package com.dianping.puma.storage.cache; import com.dianping.puma.core.event.RowChangedEvent; import com.dianping.puma.storage.Sequence; import com.dianping.puma.storage.data.GroupReadDataManager; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static org.mockito.Mockito.*; /** * Dozer @ 2015-12 * mail@dozer.cc * http://www.dozer.cc */ public class CachedGroupReadDataManagerTest { private CachedGroupReadDataManager target; private GroupReadDataManager groupReadDataManager; private CachedDataStorage.Reader cachedDataStorageReader; @Before public void setUp() throws Exception { groupReadDataManager = mock(GroupReadDataManager.class); CachedDataStorage cachedDataStorage = mock(CachedDataStorage.class); cachedDataStorageReader = mock(CachedDataStorage.Reader.class); doReturn(cachedDataStorageReader).when(cachedDataStorage).createReader(); CachedDataStorageFactory factory = spy(new CachedDataStorageFactory()); doReturn(cachedDataStorage).when(factory).initCachedDataStorage(); target = new CachedGroupReadDataManager("test", factory, groupReadDataManager); target.start(); } @Test public void test_open_memory() throws Exception { doReturn(true).when(cachedDataStorageReader).open(any(Sequence.class)); target.open(new Sequence(20151111, 0, 0)); Assert.assertEquals(target.getStorageMode(), "Memory"); verify(cachedDataStorageReader, only()).open(any(Sequence.class)); } @Test public void test_open_file() throws Exception { doReturn(false).when(cachedDataStorageReader).open(any(Sequence.class)); target.open(new Sequence(20151111, 0, 0)); Assert.assertEquals(target.getStorageMode(), "File"); verify(cachedDataStorageReader, times(1)).open(any(Sequence.class)); verify(groupReadDataManager, times(1)).open(any(Sequence.class)); } @Test public void test_open_memory_switch_to_file() throws Exception { test_open_memory(); ChangedEventWithSequence result = new ChangedEventWithSequence(new RowChangedEvent(1, 1, "", 1), new Sequence(1, 1, 1)); doReturn(result).when(cachedDataStorageReader).next(); doReturn(result.getChangedEvent()).when(groupReadDataManager).next(); Assert.assertNotNull(target.next()); verify(cachedDataStorageReader, times(1)).next(); Assert.assertEquals(target.getStorageMode(), "Memory"); doThrow(new IOException()).when(cachedDataStorageReader).next(); Assert.assertNotNull(target.next()); Assert.assertEquals(target.getStorageMode(), "File"); verify(cachedDataStorageReader, times(2)).next(); verify(groupReadDataManager, times(1)).next(); } @Test public void test_open_file_switch_to_memory() throws Exception { test_open_file(); ChangedEventWithSequence result = new ChangedEventWithSequence(new RowChangedEvent(1, 1, "", 1), new Sequence(1, 1, 1)); doReturn(result).when(cachedDataStorageReader).next(); doReturn(result.getChangedEvent()).when(groupReadDataManager).next(); doReturn(true).when(cachedDataStorageReader).open(any(Sequence.class)); Assert.assertNotNull(target.next()); Assert.assertEquals(target.getStorageMode(), "Memory"); verify(cachedDataStorageReader, times(0)).next(); verify(groupReadDataManager, times(1)).next(); Assert.assertNotNull(target.next()); verify(cachedDataStorageReader, times(1)).next(); verify(cachedDataStorageReader, times(2)).open(any(Sequence.class)); Assert.assertEquals(target.getStorageMode(), "Memory"); verify(groupReadDataManager, times(1)).next(); } }