package net.opentsdb.tools; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.util.ArrayList; import org.junit.Before; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import com.stumbleupon.async.Deferred; import net.opentsdb.core.Const; import net.opentsdb.core.TSDB; import net.opentsdb.core.Tags; import net.opentsdb.storage.MockBase; import net.opentsdb.uid.NoSuchUniqueName; import net.opentsdb.utils.Config; @PrepareForTest({ Const.class }) public class TestFsckSalted extends TestFsck { @Before public void before() throws Exception { PowerMockito.mockStatic(Const.class); PowerMockito.when(Const.SALT_BUCKETS()).thenReturn(2); PowerMockito.when(Const.SALT_WIDTH()).thenReturn(1); PowerMockito.when(Const.MAX_NUM_TAGS()).thenReturn((short) 8); GLOBAL_ROW = new byte[] {0, 0, 0, 0, 0x52, (byte)0xC3, 0x5A, (byte)0x80}; ROW = MockBase.stringToBytes("0000000150E22700000001000001"); ROW2 = MockBase.stringToBytes("0100000150E23510000001000001"); ROW3 = MockBase.stringToBytes("0100000150E24320000001000001"); BAD_KEY = new byte[] { 0x01, 0x00, 0x00, 0x01 }; config = new Config(false); tsdb = new TSDB(client, config); when(client.flush()).thenReturn(Deferred.fromResult(null)); storage = new MockBase(tsdb, client, true, true, true, true); storage.setFamily("t".getBytes(MockBase.ASCII())); when(options.fix()).thenReturn(false); when(options.compact()).thenReturn(false); when(options.resolveDupes()).thenReturn(false); when(options.lastWriteWins()).thenReturn(false); when(options.deleteOrphans()).thenReturn(false); when(options.deleteUnknownColumns()).thenReturn(false); when(options.deleteBadValues()).thenReturn(false); when(options.deleteBadRows()).thenReturn(false); when(options.deleteBadCompacts()).thenReturn(false); when(options.threads()).thenReturn(1); // replace the "real" field objects with mocks Field met = tsdb.getClass().getDeclaredField("metrics"); met.setAccessible(true); met.set(tsdb, metrics); Field tagk = tsdb.getClass().getDeclaredField("tag_names"); tagk.setAccessible(true); tagk.set(tsdb, tag_names); Field tagv = tsdb.getClass().getDeclaredField("tag_values"); tagv.setAccessible(true); tagv.set(tsdb, tag_values); // mock UniqueId when(metrics.getId("sys.cpu.user")).thenReturn(new byte[] { 0, 0, 1 }); when(metrics.getNameAsync(new byte[] { 0, 0, 1 })) .thenReturn(Deferred.fromResult("sys.cpu.user")); when(metrics.getId("sys.cpu.system")) .thenThrow(new NoSuchUniqueName("sys.cpu.system", "metric")); when(metrics.getId("sys.cpu.nice")).thenReturn(new byte[] { 0, 0, 2 }); when(metrics.getName(new byte[] { 0, 0, 2 })).thenReturn("sys.cpu.nice"); when(tag_names.getId("host")).thenReturn(new byte[] { 0, 0, 1 }); when(tag_names.getName(new byte[] { 0, 0, 1 })).thenReturn("host"); when(tag_names.getOrCreateId("host")).thenReturn(new byte[] { 0, 0, 1 }); when(tag_names.getId("dc")).thenThrow(new NoSuchUniqueName("dc", "metric")); when(tag_values.getId("web01")).thenReturn(new byte[] { 0, 0, 1 }); when(tag_values.getName(new byte[] { 0, 0, 1 })).thenReturn("web01"); when(tag_values.getOrCreateId("web01")).thenReturn(new byte[] { 0, 0, 1 }); when(tag_values.getId("web02")).thenReturn(new byte[] { 0, 0, 2 }); when(tag_values.getName(new byte[] { 0, 0, 2 })).thenReturn("web02"); when(tag_values.getOrCreateId("web02")).thenReturn(new byte[] { 0, 0, 2 }); when(tag_values.getId("web03")) .thenThrow(new NoSuchUniqueName("web03", "metric")); PowerMockito.mockStatic(Tags.class); when(Tags.resolveIds((TSDB)any(), (ArrayList<byte[]>)any())) .thenReturn(null); // don't care when(metrics.width()).thenReturn((short)3); when(tag_names.width()).thenReturn((short)3); when(tag_values.width()).thenReturn((short)3); } }