@Test public void shouldDelegateSaveOfOriginalStats(){ //given Stats stats = new Stats(); stats.setStartDate(parse("2000-03-03 13:15:12")); stats.setEndDate(parse("2000-03-03 13:25:07")); stats.getMap().put("x", Stat.emptyStat()); //when storage.save(stats, "instance", "type"); //then verify(defaultStorage).save(eq(stats), eq("instance"), eq("type")); }
@Test public void should_find_one_stats_in_exact_range() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:14:59")), null, null); String id2 = storage.save(stats(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00")), null, null); String id3 = storage.save(stats(dt(year+"-01-01 08:30:01"), dt(year+"-01-01 08:45:00")), null, null); List<String> ids = storage.find(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00"), null, null); assertEquals(1, ids.size() ); assertEquals(id2, ids.get(0) ); }
@Test public void should_find_all_stats_in_bigger_range() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), null, null); String id2 = storage.save(stats(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00")), null, null); String id3 = storage.save(stats(dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:45:00")), null, null); List<String> ids = storage.find(dt(year+"-01-01 08:10:00"), dt(year+"-01-01 08:40:00"), null, null); assertEquals(3, ids.size() ); assertTrue(ids.containsAll(asList(id1, id2, id3))); }
@Test public void should_find_one_stats_matching_instance_and_type() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t1"); String id2 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", "t1"); String id3 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t2"); String id4 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", "t2"); List<String> ids = storage.find(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), "i2", "t1"); assertEquals(1, ids.size() ); assertEquals(id2, ids.get(0) ); }
@Test public void should_find_two_stats_in_bigger_range() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), null, null); String id2 = storage.save(stats(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00")), null, null); String id3 = storage.save(stats(dt(year+"-01-01 08:30:01"), dt(year+"-01-01 08:45:00")), null, null); List<String> ids = storage.find(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:30:00"), null, null); assertEquals(2, ids.size() ); assertEquals(id1, ids.get(0) ); assertEquals(id2, ids.get(1) ); }
@Test public void should_find_one_stats_matching_instance() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", null); String id2 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", null); String id3 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i3", null); List<String> ids = storage.find(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), "i2", null); assertEquals(1, ids.size() ); assertEquals(id2, ids.get(0) ); }
@Test public void should_find_one_stats_matching_type() throws IOException{ String id1 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), null, "t1"); String id2 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), null, "t2"); String id3 = storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), null, "t3"); List<String> ids = storage.find(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), null, "t2"); assertEquals(1, ids.size() ); assertEquals(id2, ids.get(0) ); }
@Test public void should_find_filters_for_date_range() throws IOException{ storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t1"); storage.save(stats(dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:40:00")), "i2", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t2"); storage.save(stats(dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:40:00")), "i3", "t2"); Filters filters = storage.findFilters(dt(year+"-01-01 08:35:00"), dt(year+"-01-01 08:37:00"), null); assertEquals( 2, filters.getInstances().size() ); assertTrue(filters.getInstances().contains("i2")); assertTrue(filters.getInstances().contains("i3")); assertEquals( 2, filters.getTypes().size() ); assertTrue(filters.getTypes().contains("t1")); assertTrue(filters.getTypes().contains("t2")); }
@Test public void should_find_filters_for_type() throws IOException{ storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t2"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i3", "t2"); Filters filters = storage.findFilters(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), "t1"); assertEquals( 2, filters.getInstances().size() ); assertTrue(filters.getInstances().contains("i1")); assertTrue(filters.getInstances().contains("i2")); assertEquals( 1, filters.getTypes().size() ); assertTrue(filters.getTypes().contains("t1")); }
@Test public void should_find_all_filters() throws IOException{ storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t2"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i3", "t2"); Filters filters = storage.findFilters(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), null); assertEquals( 3, filters.getInstances().size() ); assertTrue(filters.getInstances().contains("i1")); assertTrue(filters.getInstances().contains("i2")); assertTrue(filters.getInstances().contains("i3")); assertEquals( 2, filters.getTypes().size() ); assertTrue(filters.getTypes().contains("t1")); assertTrue(filters.getTypes().contains("t2")); }
@Test public void should_load_histogram_by_instance_and_type() throws IOException{ //given Stats stats = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:15:00"), stat(100)); //save the same but with different instance and type storage.save(stats, "i1", null); storage.save(stats, "i1", "t1"); storage.save(stats, "i2", "t1"); //when Histogram histogramI = storage.loadHistogram(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), "i1", null, null); Histogram histogramT = storage.loadHistogram(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), null, "t1", null); Histogram histogramIT = storage.loadHistogram(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), "i1", "t1", null); //then assertEquals( 2, histogramI.getHistogram().size()); assertEquals( 2, histogramT.getHistogram().size()); assertEquals( 1, histogramIT.getHistogram().size()); }
@Test public void should_load_details_by_stats_ids() throws IOException{ //given Stats stats1 = stats( dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00"), stat(100, 200)//hits = 2, avg = 150 ); Stats stats2 = stats( dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00"), stat(1000)//hits = 1, avg = 1000 ); String id1 = storage.save(stats1, null, null); String id2 = storage.save(stats2, null, null); //when StatDetails details = storage.loadDetails(STAT_NAME, asList(id1, id2)); //then Stat expected = stats1.getMap().get(STAT_NAME).deepCopy(); expected.merge(stats2.getMap().get(STAT_NAME)); assertEquals(STAT_NAME, details.getId() ); assertEquals( expected, details.getMerged()); }
@Test public void should_load_top_level() throws IOException{ //given Stat parentStat = stat(100); Stat childStat = stat(10); parentStat.ensureChildrenMap(); parentStat.getChildren().put("child", childStat); Stats stats = stats(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:30:00"), parentStat); storage.save(stats, null, null); //when Stats topLevel = storage.loadAggregated(true, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:45:00"), null, null); //then Stat root = topLevel.getMap().get(STAT_NAME); assertNotNull(root); assertNotNull( root.getChildren() ); //not null map means that root has children ... assertEquals( 0, root.getChildren().size());///but for top level only children are empty }
@Test public void should_load_aggregated_top_level() throws IOException{ //given Stat parentStat = stat(100); Stat childStat = stat(10); parentStat.ensureChildrenMap(); parentStat.getChildren().put("child", childStat); Stats stats1 = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:10:00"), parentStat); storage.save(stats1, null, null); Stats stats2 = stats(dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:20:00"), parentStat); storage.save(stats2, null, null); //when Stats loaded = storage.loadAggregated(true, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), null, null); //then assertEquals( dt(year+"-01-01 08:05:00"), loaded.getStartDate()); assertEquals( dt(year+"-01-01 08:20:00"), loaded.getEndDate()); assertEquals( 1, loaded.getMap().size()); Stat loadedRoot = loaded.getMap().get(STAT_NAME); assertEquals( 100L, loadedRoot.getAvg()); assertEquals( 2, loadedRoot.getHits()); assertNotNull( loadedRoot.getChildren()); assertEquals( 0, loadedRoot.getChildren().size()); }
@Test public void should_load_aggregated_by_instance() throws IOException{ //given storage.save(stats( dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:10:00"), stat(10)), "i1", null); storage.save(stats( dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:20:00"), stat(100)), "i1", "t1"); storage.save(stats( dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:45:00"), stat(1000)), "i2", "t1"); //when Stats aggrI = storage.loadAggregated(false, dt(year+"-01-01 07:00:00"), dt(year+"-01-01 09:30:00"), "i1", null); //then Stats aggregated = aggrI; Stat stat = aggregated.getMap().get(STAT_NAME); assertEquals( dt(year+"-01-01 08:00:00"), aggregated.getStartDate()); assertEquals( dt(year+"-01-01 08:20:00"), aggregated.getEndDate()); assertEquals( 1, aggregated.getMap().size()); assertEquals( 55L, stat.getAvg()); assertEquals( 2L, stat.getHits()); assertEquals( 100L, stat.getMax()); assertEquals( 10L, stat.getMin()); }
@Test public void should_load_aggregated_by_type() throws IOException{ //given storage.save(stats( dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:10:00"), stat(10)), "i1", null); storage.save(stats( dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:20:00"), stat(100)), "i1", "t1"); storage.save(stats( dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:45:00"), stat(1000)), "i2", "t1"); //when Stats aggrT = storage.loadAggregated(false, dt(year+"-01-01 07:00:00"), dt(year+"-01-01 09:30:00"), null, "t1"); //then Stats aggregated = aggrT; Stat stat = aggregated.getMap().get(STAT_NAME); assertEquals( dt(year+"-01-01 08:15:00"), aggregated.getStartDate()); assertEquals( dt(year+"-01-01 08:45:00"), aggregated.getEndDate()); assertEquals( 1, aggregated.getMap().size()); assertEquals( 550L, stat.getAvg()); assertEquals( 2L, stat.getHits()); assertEquals( 1000L, stat.getMax()); assertEquals( 100L, stat.getMin()); }
@Test public void should_load_aggregated_by_instance_and_type() throws IOException{ //given storage.save(stats( dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:10:00"), stat(10)), "i1", null); storage.save(stats( dt(year+"-01-01 08:15:00"), dt(year+"-01-01 08:20:00"), stat(100)), "i1", "t1"); storage.save(stats( dt(year+"-01-01 08:30:00"), dt(year+"-01-01 08:45:00"), stat(1000)), "i2", "t1"); //when Stats aggrIT = storage.loadAggregated(false, dt(year+"-01-01 07:00:00"), dt(year+"-01-01 09:30:00"), "i1", "t1"); //then Stats aggregated = aggrIT; Stat stat = aggregated.getMap().get(STAT_NAME); assertEquals( dt(year+"-01-01 08:15:00"), aggregated.getStartDate()); assertEquals( dt(year+"-01-01 08:20:00"), aggregated.getEndDate()); assertEquals( 1, aggregated.getMap().size()); assertEquals( 100L, stat.getAvg()); assertEquals( 1L, stat.getHits()); assertEquals( 100L, stat.getMax()); assertEquals( 100L, stat.getMin()); } }
@Test public void should_save_and_load_single_stats() throws IOException{ Stats stats = stats( dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")); String identifier = storage.save(stats, null, null); Stats loaded = storage.load(identifier); //we don't compare implementation specific data loaded.setInfo(stats.getInfo()); assertEquals(stats, loaded); assertEquals(jsonUtil.toJson(stats), jsonUtil.toJson(loaded)); }
@Test public void should_load_details_by_instance_and_type() throws IOException{ //given Stats stats1 = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:15:00"), stat(2)); Stats stats10 = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:15:00"), stat(10)); Stats stats100 = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:15:00"), stat(100)); //save the same but with different instance and type storage.save(stats1, "i1", null); storage.save(stats10, "i1", "t1"); storage.save(stats100, "i2", "t1"); //when StatDetails detailsI = storage.loadDetails(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), "i1", null); StatDetails detailsT = storage.loadDetails(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), null, "t1"); StatDetails detailsIT = storage.loadDetails(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), "i1", "t1"); //then assertEquals( 6, detailsI.getMerged().getAvg()); assertEquals( 55, detailsT.getMerged().getAvg()); assertEquals( 10, detailsIT.getMerged().getAvg()); }
@Test public void should_load_details_with_children() throws IOException{ //given Stat rootStat = stat(100); Stat stat1 = stat(10); rootStat.ensureChildrenMap(); rootStat.getChildren().put("1", stat1); Stat stat2 = stat(1); stat1.ensureChildrenMap(); stat1.getChildren().put("11", stat2); Stats stats = stats(dt(year+"-01-01 08:05:00"), dt(year+"-01-01 08:15:00"), rootStat); storage.save(stats, "i1", "t1"); //when StatDetails details = storage.loadDetails(STAT_NAME, dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:30:00"), null, null); //then assertEquals( 100L, details.getMerged().getAvg()); assertEquals( 10L, details.getMerged().getChild("1").getAvg()); assertEquals( 1L, details.getMerged().getChild("1").getChild("11").getAvg()); }