From 212dfb2f5bede3bc2b75d83c9c0b39d58564588e Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Thu, 4 Jun 2015 11:01:23 +0900 Subject: [PATCH 1/2] #377 support depth-limited search - add testcase --- .../rawdata/AgentHistogram.java | 9 ++ .../rawdata/AgentHistogramList.java | 8 + .../web/service/BFSLinkSelectorTest.java | 137 ++++++++++++++++-- 3 files changed, 145 insertions(+), 9 deletions(-) diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java index 674ed71b38cd..9b16a3923b60 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java @@ -90,6 +90,15 @@ public Collection getTimeHistogram() { return timeHistogramMap.values(); } + @JsonIgnore + public long getTotalCount() { + long totalCount = 0; + for (TimeHistogram timeHistogram : getTimeHistogram()) { + totalCount += timeHistogram.getTotalCount(); + } + return totalCount; + } + public void addTimeHistogram(TimeHistogram timeHistogram) { TimeHistogram find = this.timeHistogramMap.get(timeHistogram.getTimeStamp()); if (find == null) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java index 3a69461e65e8..c1d8bf2af53b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java @@ -136,6 +136,14 @@ public Collection getAgentHistogramList() { return agentHistogramMap.values(); } + public long getTotalCount() { + long totalCount = 0; + for (AgentHistogram agentHistogram : getAgentHistogramList()) { + totalCount += agentHistogram.getTotalCount(); + } + return totalCount; + } + @Override public String toString() { return "AgentHistogramList{" diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java index 0cb67c73058a..4ae654a79b40 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java @@ -18,13 +18,13 @@ import com.navercorp.pinpoint.common.trace.HistogramSchema; import com.navercorp.pinpoint.common.trace.ServiceType; -import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataDuplexMap; -import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataMap; +import com.navercorp.pinpoint.web.applicationmap.rawdata.*; import com.navercorp.pinpoint.web.dao.HostApplicationMapDao; import com.navercorp.pinpoint.web.dao.MapStatisticsCalleeDao; import com.navercorp.pinpoint.web.dao.MapStatisticsCallerDao; import com.navercorp.pinpoint.web.service.map.AcceptApplication; import com.navercorp.pinpoint.web.vo.Application; +import com.navercorp.pinpoint.web.vo.LinkKey; import com.navercorp.pinpoint.web.vo.Range; import com.navercorp.pinpoint.web.vo.SearchOption; import org.junit.Assert; @@ -34,6 +34,7 @@ import java.util.HashSet; import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -49,7 +50,7 @@ public class BFSLinkSelectorTest { Application APP_A = new Application("APP_A", ServiceType.STAND_ALONE); Application APP_B = new Application("APP_B", ServiceType.STAND_ALONE); Application APP_C = new Application("APP_B", ServiceType.STAND_ALONE); - // APP_A -> + Range range = new Range(0, 100); SearchOption option = new SearchOption(1, 1); @@ -82,12 +83,11 @@ public void testEmpty() throws Exception { @Test public void testCaller() throws Exception { - Application sourceApp = new Application("APP_A", ServiceType.STAND_ALONE); - Application targetApp = new Application("APP_B", ServiceType.STAND_ALONE); - + // APP_A -> APP_B LinkDataMap linkDataMap = new LinkDataMap(); - linkDataMap.addLinkData(sourceApp, "agentA", targetApp, "agentB", 1000, HistogramSchema.FAST_SCHEMA.getNormalSlot().getSlotTime(), 1); - when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(linkDataMap); + linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + + when(callerDao.selectCaller(eq(APP_A), (Range) anyObject())).thenReturn(linkDataMap); when(calleeDao.selectCallee((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); @@ -96,11 +96,130 @@ public void testCaller() throws Exception { Range range = new Range(0, 100); SearchOption option = new SearchOption(1, 1); - LinkDataDuplexMap select = bfsLinkSelector.select(sourceApp, range, option); + LinkDataDuplexMap select = bfsLinkSelector.select(APP_A, range, option); + + Assert.assertEquals(select.size(), 1); + Assert.assertEquals(select.getSourceLinkDataList().size(), 1); + Assert.assertEquals(select.getTargetLinkDataList().size(), 0); + } + + @Test + public void testCaller_tier_3() throws Exception { + // APP_A -> APP_B -> APP_C + + LinkDataMap link_A_B = new LinkDataMap(); + link_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + when(callerDao.selectCaller(eq(APP_A), (Range) anyObject())).thenReturn(link_A_B); + + LinkDataMap link_B_C = new LinkDataMap(); + link_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 2); + when(callerDao.selectCaller(eq(APP_B), (Range) anyObject())).thenReturn(link_B_C); + + when(calleeDao.selectCallee((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + + + Range range = new Range(0, 100); + // depth 1 + SearchOption option = new SearchOption(1, 1); + BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkDataDuplexMap select = bfsLinkSelector.select(APP_A, range, option); Assert.assertEquals(select.size(), 1); Assert.assertEquals(select.getSourceLinkDataList().size(), 1); + Assert.assertEquals(select.getTargetLinkDataList().size(), 0); + assertSource_Target_TotalCount("APP_A->APP_B", select, new LinkKey(APP_A, APP_B), 1); + + // depth 2 + SearchOption depth2 = new SearchOption(2, 2); + BFSLinkSelector bfsLinkSelector2 = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkDataDuplexMap select_depth2 = bfsLinkSelector2.select(APP_A, range, depth2); + Assert.assertEquals(select_depth2.size(), 2); + + LinkKey linkKey_A_B = new LinkKey(APP_A, APP_B); + assertSource_Target_TotalCount("APP_A->APP_B", select_depth2, linkKey_A_B, 1); + + LinkKey linkKey_B_C = new LinkKey(APP_B, APP_C); + assertSource_Target_TotalCount("APP_B->APP_C", select_depth2, linkKey_B_C, 2); + } + + private void assertSource_Target_TotalCount(String message, LinkDataDuplexMap linkData, LinkKey linkKey, long count) { + LinkData sourceLinkData = linkData.getSourceLinkData(linkKey); + AgentHistogramList targetList = sourceLinkData.getTargetList(); + long totalCount = targetList.getTotalCount(); + Assert.assertEquals(message, totalCount, count); + } + + @Test + public void testCallee() throws Exception { + // APP_A -> APP_B + LinkDataMap linkDataMap = new LinkDataMap(); + linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + + when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); + when(calleeDao.selectCallee(eq(APP_B), (Range) anyObject())).thenReturn(linkDataMap); + when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + + BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + + + Range range = new Range(0, 100); + SearchOption option = new SearchOption(1, 1); + LinkDataDuplexMap select = bfsLinkSelector.select(APP_B, range, option); + + Assert.assertEquals(select.size(), 1); + Assert.assertEquals(select.getSourceLinkDataList().size(), 0); + Assert.assertEquals(select.getTargetLinkDataList().size(), 1); + + } + + @Test + public void testCallee_tier_3() throws Exception { + // APP_A -> APP_B -> APP_C + LinkDataMap linkDataMap_A_B = new LinkDataMap(); + linkDataMap_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + when(calleeDao.selectCallee(eq(APP_B), (Range) anyObject())).thenReturn(linkDataMap_A_B); + + LinkDataMap linkDataMap_B_C = new LinkDataMap(); + linkDataMap_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 2); + when(calleeDao.selectCallee(eq(APP_C), (Range) anyObject())).thenReturn(linkDataMap_B_C); + + when(calleeDao.selectCallee((Application)anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); + + when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + + BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + + + Range range = new Range(0, 100); + SearchOption option = new SearchOption(1, 1); + LinkDataDuplexMap select = bfsLinkSelector.select(APP_B, range, option); + + Assert.assertEquals(select.size(), 1); + Assert.assertEquals(select.getSourceLinkDataList().size(), 0); + Assert.assertEquals(select.getTargetLinkDataList().size(), 1); + + + // depth 2 + SearchOption depth2 = new SearchOption(2, 2); + BFSLinkSelector bfsLinkSelector2 = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkDataDuplexMap select_depth2 = bfsLinkSelector2.select(APP_A, range, depth2); + Assert.assertEquals(select_depth2.size(), 2); + + LinkKey linkKey_A_B = new LinkKey(APP_A, APP_B); + assertTarget_Source_TotalCount("APP_A->APP_B", select_depth2, linkKey_A_B, 1); + + LinkKey linkKey_B_C = new LinkKey(APP_B, APP_C); + assertTarget_Source_TotalCount("APP_B->APP_C", select_depth2, linkKey_B_C, 2); + + } + private void assertTarget_Source_TotalCount(String message, LinkDataDuplexMap linkData, LinkKey linkKey, long count) { + LinkData sourceLinkData = linkData.getTargetLinkData(linkKey); + AgentHistogramList targetList = sourceLinkData.getTargetList(); + long totalCount = targetList.getTotalCount(); + Assert.assertEquals(message, totalCount, count); } From dc843584923acbfb1ad96ab5ed241706976d9554 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Fri, 5 Jun 2015 16:29:14 +0900 Subject: [PATCH 2/2] #377 support depth-limited search - add testcase --- .../rawdata/AgentHistogram.java | 9 - .../rawdata/AgentHistogramList.java | 8 - .../applicationmap/rawdata/LinkCallData.java | 8 + .../web/applicationmap/rawdata/LinkData.java | 9 + .../rawdata/LinkDataDuplexMap.java | 4 + .../applicationmap/rawdata/LinkDataMap.java | 9 + .../web/service/BFSLinkSelectorTest.java | 178 ++++++++++-------- 7 files changed, 127 insertions(+), 98 deletions(-) diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java index 9b16a3923b60..674ed71b38cd 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java @@ -90,15 +90,6 @@ public Collection getTimeHistogram() { return timeHistogramMap.values(); } - @JsonIgnore - public long getTotalCount() { - long totalCount = 0; - for (TimeHistogram timeHistogram : getTimeHistogram()) { - totalCount += timeHistogram.getTotalCount(); - } - return totalCount; - } - public void addTimeHistogram(TimeHistogram timeHistogram) { TimeHistogram find = this.timeHistogramMap.get(timeHistogram.getTimeStamp()); if (find == null) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java index c1d8bf2af53b..3a69461e65e8 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java @@ -136,14 +136,6 @@ public Collection getAgentHistogramList() { return agentHistogramMap.values(); } - public long getTotalCount() { - long totalCount = 0; - for (AgentHistogram agentHistogram : getAgentHistogramList()) { - totalCount += agentHistogram.getTotalCount(); - } - return totalCount; - } - @Override public String toString() { return "AgentHistogramList{" diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java index 8488631fd2f2..6245022337ba 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java @@ -130,6 +130,14 @@ private TimeHistogram getTimeHistogram(Long timeStamp) { return histogram; } + public long getTotalCount() { + long totalCount = 0; + for (TimeHistogram timeHistogram : targetHistogramTimeMap.values()) { + totalCount += timeHistogram.getTotalCount(); + } + return totalCount; + } + @Override public String toString() { return "LinkCallData{" + diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkData.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkData.java index c8ebb617a1d2..73292ca7d1d7 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkData.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkData.java @@ -116,6 +116,15 @@ public void add(final LinkData linkData) { this.linkCallDataMap.addLinkDataMap(target); } + // test api + public long getTotalCount() { + long totalCount = 0; + for (LinkCallData linkCallData : linkCallDataMap.getLinkDataList()) { + totalCount += linkCallData.getTotalCount(); + } + return totalCount; + } + @Override public String toString() { return "LinkData{" + diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataDuplexMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataDuplexMap.java index bb38938916cc..501179f0aec5 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataDuplexMap.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataDuplexMap.java @@ -101,6 +101,10 @@ public LinkData getTargetLinkData(LinkKey findLinkKey) { return targetLinkDataMap.getLinkData(findLinkKey); } + public long getTotalCount() { + return this.sourceLinkDataMap.getTotalCount() + this.targetLinkDataMap.getTotalCount(); + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("LinkDataDuplexMap{"); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java index 872d862a7881..3d07b1cc49f8 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java @@ -78,6 +78,15 @@ private LinkData getLinkData(Application fromApplication, Application toApplicat return findLink; } + // test api + public long getTotalCount() { + long totalCount = 0; + for (LinkData linkData : linkDataMap.values()) { + totalCount += linkData.getTotalCount(); + } + return totalCount; + } + public int size() { return linkDataMap.size(); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java index 4ae654a79b40..253241cca071 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/BFSLinkSelectorTest.java @@ -33,7 +33,7 @@ import java.util.HashSet; -import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -47,13 +47,15 @@ public class BFSLinkSelectorTest { private MapStatisticsCalleeDao calleeDao; private HostApplicationMapDao hostApplicationMapDao; - Application APP_A = new Application("APP_A", ServiceType.STAND_ALONE); - Application APP_B = new Application("APP_B", ServiceType.STAND_ALONE); - Application APP_C = new Application("APP_B", ServiceType.STAND_ALONE); + private Application APP_A = new Application("APP_A", ServiceType.STAND_ALONE); + private Application APP_B = new Application("APP_B", ServiceType.STAND_ALONE); + private Application APP_C = new Application("APP_C", ServiceType.STAND_ALONE); - Range range = new Range(0, 100); - SearchOption option = new SearchOption(1, 1); + private Range range = new Range(0, 100); + + private SearchOption oneDepth = new SearchOption(1, 1); + private SearchOption twoDepth = new SearchOption(2, 2); @Before @@ -61,22 +63,28 @@ public void setUp() throws Exception { this.callerDao = mock(MapStatisticsCallerDao.class); this.calleeDao = mock(MapStatisticsCalleeDao.class); this.hostApplicationMapDao = mock(HostApplicationMapDao.class); + } + + private LinkSelector createLinkSelector() { + return new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + } + public LinkDataMap newEmptyLinkDataMap() { + return new LinkDataMap(); } @Test public void testEmpty() throws Exception { - when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(calleeDao.selectCallee((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); - - BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); - + when(callerDao.selectCaller(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(calleeDao.selectCallee(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName(any(Application.class), any(Range.class))).thenReturn(new HashSet()); - LinkDataDuplexMap select = bfsLinkSelector.select(APP_A, range, option); + LinkSelector linkSelector = createLinkSelector(); + LinkDataDuplexMap select = linkSelector.select(APP_A, range, oneDepth); Assert.assertEquals(select.size(), 0); + Assert.assertEquals(select.getTotalCount(), 0); } @@ -84,141 +92,149 @@ public void testEmpty() throws Exception { @Test public void testCaller() throws Exception { // APP_A -> APP_B + int callCount_A_B = 10; LinkDataMap linkDataMap = new LinkDataMap(); - linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_A_B); - when(callerDao.selectCaller(eq(APP_A), (Range) anyObject())).thenReturn(linkDataMap); - when(calleeDao.selectCallee((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + when(callerDao.selectCaller(eq(APP_A), any(Range.class))).thenReturn(linkDataMap); + when(calleeDao.selectCallee(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName(any(Application.class), any(Range.class))).thenReturn(new HashSet()); - BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkSelector linkSelector = createLinkSelector(); + LinkDataDuplexMap linkData = linkSelector.select(APP_A, range, oneDepth); + Assert.assertEquals(linkData.size(), 1); + Assert.assertEquals(linkData.getTotalCount(), callCount_A_B); - Range range = new Range(0, 100); - SearchOption option = new SearchOption(1, 1); - LinkDataDuplexMap select = bfsLinkSelector.select(APP_A, range, option); + Assert.assertEquals(linkData.getSourceLinkDataList().size(), 1); + Assert.assertEquals(linkData.getSourceLinkDataMap().getTotalCount(), callCount_A_B); - Assert.assertEquals(select.size(), 1); - Assert.assertEquals(select.getSourceLinkDataList().size(), 1); - Assert.assertEquals(select.getTargetLinkDataList().size(), 0); + Assert.assertEquals(linkData.getTargetLinkDataList().size(), 0); } @Test - public void testCaller_tier_3() throws Exception { + public void testCaller_3tier() throws Exception { // APP_A -> APP_B -> APP_C + int callCount_A_B = 10; LinkDataMap link_A_B = new LinkDataMap(); - link_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); - when(callerDao.selectCaller(eq(APP_A), (Range) anyObject())).thenReturn(link_A_B); + link_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_A_B); + when(callerDao.selectCaller(eq(APP_A), any(Range.class))).thenReturn(link_A_B); LinkDataMap link_B_C = new LinkDataMap(); - link_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 2); - when(callerDao.selectCaller(eq(APP_B), (Range) anyObject())).thenReturn(link_B_C); + int callCount_B_C = 20; + link_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_B_C); + when(callerDao.selectCaller(eq(APP_B), any(Range.class))).thenReturn(link_B_C); - when(calleeDao.selectCallee((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + when(calleeDao.selectCallee(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName(any(Application.class), any(Range.class))).thenReturn(new HashSet()); - Range range = new Range(0, 100); // depth 1 - SearchOption option = new SearchOption(1, 1); - BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); - LinkDataDuplexMap select = bfsLinkSelector.select(APP_A, range, option); + LinkSelector linkSelector = createLinkSelector(); + LinkDataDuplexMap linkData = linkSelector.select(APP_A, range, oneDepth); - Assert.assertEquals(select.size(), 1); - Assert.assertEquals(select.getSourceLinkDataList().size(), 1); - Assert.assertEquals(select.getTargetLinkDataList().size(), 0); - assertSource_Target_TotalCount("APP_A->APP_B", select, new LinkKey(APP_A, APP_B), 1); + Assert.assertEquals(linkData.size(), 1); + Assert.assertEquals(linkData.getTotalCount(), callCount_A_B); + + Assert.assertEquals(linkData.getSourceLinkDataList().size(), 1); + Assert.assertEquals(linkData.getSourceLinkDataMap().getTotalCount(), callCount_A_B); + assertSource_Target_TotalCount("APP_A->APP_B", linkData, new LinkKey(APP_A, APP_B), callCount_A_B); + + Assert.assertEquals(linkData.getTargetLinkDataList().size(), 0); // depth 2 - SearchOption depth2 = new SearchOption(2, 2); - BFSLinkSelector bfsLinkSelector2 = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); - LinkDataDuplexMap select_depth2 = bfsLinkSelector2.select(APP_A, range, depth2); - Assert.assertEquals(select_depth2.size(), 2); + LinkSelector linkSelector2 = createLinkSelector(); + LinkDataDuplexMap linkData_depth2 = linkSelector2.select(APP_A, range, twoDepth); + Assert.assertEquals(linkData_depth2.size(), 2); + Assert.assertEquals(linkData_depth2.getTotalCount(), callCount_A_B + callCount_B_C); LinkKey linkKey_A_B = new LinkKey(APP_A, APP_B); - assertSource_Target_TotalCount("APP_A->APP_B", select_depth2, linkKey_A_B, 1); + assertSource_Target_TotalCount("APP_A->APP_B", linkData_depth2, linkKey_A_B, callCount_A_B); LinkKey linkKey_B_C = new LinkKey(APP_B, APP_C); - assertSource_Target_TotalCount("APP_B->APP_C", select_depth2, linkKey_B_C, 2); + assertSource_Target_TotalCount("APP_B->APP_C", linkData_depth2, linkKey_B_C, callCount_B_C); } private void assertSource_Target_TotalCount(String message, LinkDataDuplexMap linkData, LinkKey linkKey, long count) { LinkData sourceLinkData = linkData.getSourceLinkData(linkKey); - AgentHistogramList targetList = sourceLinkData.getTargetList(); - long totalCount = targetList.getTotalCount(); + long totalCount = sourceLinkData.getTotalCount(); Assert.assertEquals(message, totalCount, count); } @Test public void testCallee() throws Exception { // APP_A -> APP_B + int callCount_A_B = 10; LinkDataMap linkDataMap = new LinkDataMap(); - linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); + linkDataMap.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_A_B); - when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(calleeDao.selectCallee(eq(APP_B), (Range) anyObject())).thenReturn(linkDataMap); - when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); + when(callerDao.selectCaller(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(calleeDao.selectCallee(eq(APP_B), any(Range.class))).thenReturn(linkDataMap); + when(hostApplicationMapDao.findAcceptApplicationName(any(Application.class), any(Range.class))).thenReturn(new HashSet()); - BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkSelector linkSelector = createLinkSelector(); + LinkDataDuplexMap linkData = linkSelector.select(APP_B, range, oneDepth); + Assert.assertEquals(linkData.size(), 1); + Assert.assertEquals(linkData.getTotalCount(), callCount_A_B); - Range range = new Range(0, 100); - SearchOption option = new SearchOption(1, 1); - LinkDataDuplexMap select = bfsLinkSelector.select(APP_B, range, option); + Assert.assertEquals(linkData.getSourceLinkDataList().size(), 0); - Assert.assertEquals(select.size(), 1); - Assert.assertEquals(select.getSourceLinkDataList().size(), 0); - Assert.assertEquals(select.getTargetLinkDataList().size(), 1); + Assert.assertEquals(linkData.getTargetLinkDataList().size(), 1); + Assert.assertEquals(linkData.getTargetLinkDataMap().getTotalCount(), callCount_A_B); } + + @Test - public void testCallee_tier_3() throws Exception { + public void testCallee_3tier() throws Exception { // APP_A -> APP_B -> APP_C + when(calleeDao.selectCallee(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + + int callCount_A_B = 30; LinkDataMap linkDataMap_A_B = new LinkDataMap(); - linkDataMap_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 1); - when(calleeDao.selectCallee(eq(APP_B), (Range) anyObject())).thenReturn(linkDataMap_A_B); + linkDataMap_A_B.addLinkData(APP_A, "agentA", APP_B, "agentB", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_A_B); + when(calleeDao.selectCallee(eq(APP_B), any(Range.class))).thenReturn(linkDataMap_A_B); + int callCount_B_C = 40; LinkDataMap linkDataMap_B_C = new LinkDataMap(); - linkDataMap_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), 2); - when(calleeDao.selectCallee(eq(APP_C), (Range) anyObject())).thenReturn(linkDataMap_B_C); + linkDataMap_B_C.addLinkData(APP_B, "agentB", APP_C, "agentC", 1000, HistogramSchema.NORMAL_SCHEMA.getNormalSlot().getSlotTime(), callCount_B_C); + when(calleeDao.selectCallee(eq(APP_C), any(Range.class))).thenReturn(linkDataMap_B_C); - when(calleeDao.selectCallee((Application)anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); + when(callerDao.selectCaller(any(Application.class), any(Range.class))).thenReturn(newEmptyLinkDataMap()); + when(hostApplicationMapDao.findAcceptApplicationName(any(Application.class), any(Range.class))).thenReturn(new HashSet()); - when(callerDao.selectCaller((Application) anyObject(), (Range) anyObject())).thenReturn(new LinkDataMap()); - when(hostApplicationMapDao.findAcceptApplicationName((Application) anyObject(), (Range) anyObject())).thenReturn(new HashSet()); - BFSLinkSelector bfsLinkSelector = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); + LinkSelector linkSelector = createLinkSelector(); + LinkDataDuplexMap linkData = linkSelector.select(APP_C, range, oneDepth); + Assert.assertEquals(linkData.size(), 1); + Assert.assertEquals(linkData.getTotalCount(), callCount_B_C); - Range range = new Range(0, 100); - SearchOption option = new SearchOption(1, 1); - LinkDataDuplexMap select = bfsLinkSelector.select(APP_B, range, option); + Assert.assertEquals(linkData.getSourceLinkDataList().size(), 0); - Assert.assertEquals(select.size(), 1); - Assert.assertEquals(select.getSourceLinkDataList().size(), 0); - Assert.assertEquals(select.getTargetLinkDataList().size(), 1); + Assert.assertEquals(linkData.getTargetLinkDataList().size(), 1); + Assert.assertEquals(linkData.getTotalCount(), callCount_B_C); // depth 2 - SearchOption depth2 = new SearchOption(2, 2); - BFSLinkSelector bfsLinkSelector2 = new BFSLinkSelector(this.callerDao, this.calleeDao, hostApplicationMapDao); - LinkDataDuplexMap select_depth2 = bfsLinkSelector2.select(APP_A, range, depth2); - Assert.assertEquals(select_depth2.size(), 2); + LinkSelector linkSelector2 = createLinkSelector(); + LinkDataDuplexMap linkData_depth2 = linkSelector2.select(APP_C, range, twoDepth); + Assert.assertEquals(linkData_depth2.size(), 2); LinkKey linkKey_A_B = new LinkKey(APP_A, APP_B); - assertTarget_Source_TotalCount("APP_A->APP_B", select_depth2, linkKey_A_B, 1); + assertTarget_Source_TotalCount("APP_A->APP_B", linkData_depth2, linkKey_A_B, callCount_A_B); LinkKey linkKey_B_C = new LinkKey(APP_B, APP_C); - assertTarget_Source_TotalCount("APP_B->APP_C", select_depth2, linkKey_B_C, 2); + assertTarget_Source_TotalCount("APP_B->APP_C", linkData_depth2, linkKey_B_C, callCount_B_C); } private void assertTarget_Source_TotalCount(String message, LinkDataDuplexMap linkData, LinkKey linkKey, long count) { LinkData sourceLinkData = linkData.getTargetLinkData(linkKey); - AgentHistogramList targetList = sourceLinkData.getTargetList(); - long totalCount = targetList.getTotalCount(); + long totalCount = sourceLinkData.getTotalCount(); Assert.assertEquals(message, totalCount, count); }