View Javadoc
1   /*
2    * Licensed under the GPL License. You may not use this file except in compliance with the License.
3    * You may obtain a copy of the License at
4    *
5    *   https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6    *
7    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
8    * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
9    * PURPOSE.
10   */
11  package psiprobe.beans.stats.providers;
12  
13  import static org.junit.jupiter.api.Assertions.assertEquals;
14  import static org.mockito.Mockito.mock;
15  
16  import com.codebox.bean.JavaBeanTester;
17  
18  import jakarta.servlet.http.HttpServletRequest;
19  
20  import java.util.List;
21  
22  import org.jfree.data.xy.DefaultTableXYDataset;
23  import org.jfree.data.xy.XYDataItem;
24  import org.junit.jupiter.api.BeforeEach;
25  import org.junit.jupiter.api.Test;
26  
27  import psiprobe.model.stats.StatsCollection;
28  
29  /**
30   * The Class MultipleSeriesProviderTest.
31   */
32  class MultipleSeriesProviderTest {
33  
34    private MultipleSeriesProvider provider;
35    private StatsCollection statsCollection;
36    private DefaultTableXYDataset dataset;
37  
38    /**
39     * Javabean tester.
40     */
41    @Test
42    void javabeanTester() {
43      JavaBeanTester.builder(MultipleSeriesProvider.class).loadData().test();
44    }
45  
46    @BeforeEach
47    void setUp() {
48      provider = new MultipleSeriesProvider();
49      provider.setStatNamePrefix("stat.app.");
50      provider.setTop(0);
51      provider.setMovingAvgFrame(0);
52      statsCollection = new StatsCollection();
53      dataset = new DefaultTableXYDataset();
54    }
55  
56    @Test
57    void testPopulateAllSeries() {
58      List<XYDataItem> items1 = statsCollection.newStats("stat.app.app1", 10);
59      items1.add(new XYDataItem(1L, 100.0));
60      items1.add(new XYDataItem(2L, 200.0));
61  
62      List<XYDataItem> items2 = statsCollection.newStats("stat.app.app2", 10);
63      items2.add(new XYDataItem(1L, 300.0));
64  
65      HttpServletRequest request = mock(HttpServletRequest.class);
66      provider.populate(dataset, statsCollection, request);
67  
68      assertEquals(2, dataset.getSeriesCount());
69    }
70  
71    @Test
72    void testPopulateTopNSeries() {
73      // Create 3 series, request top 2
74      List<XYDataItem> items1 = statsCollection.newStats("stat.app.app1", 10);
75      items1.add(new XYDataItem(1L, 50.0));
76  
77      List<XYDataItem> items2 = statsCollection.newStats("stat.app.app2", 10);
78      items2.add(new XYDataItem(1L, 200.0));
79  
80      List<XYDataItem> items3 = statsCollection.newStats("stat.app.app3", 10);
81      items3.add(new XYDataItem(1L, 100.0));
82  
83      provider.setTop(2);
84      HttpServletRequest request = mock(HttpServletRequest.class);
85      provider.populate(dataset, statsCollection, request);
86  
87      assertEquals(2, dataset.getSeriesCount());
88    }
89  
90    @Test
91    void testPopulateNoMatchingStats() {
92      HttpServletRequest request = mock(HttpServletRequest.class);
93      provider.populate(dataset, statsCollection, request);
94      assertEquals(0, dataset.getSeriesCount());
95    }
96  
97    @Test
98    void testPopulateWithMovingAvgFrame() {
99      provider.setMovingAvgFrame(2);
100     provider.setTop(2);
101 
102     List<XYDataItem> items1 = statsCollection.newStats("stat.app.app1", 10);
103     for (int i = 0; i < 10; i++) {
104       items1.add(new XYDataItem((long) i, i * 10.0));
105     }
106 
107     List<XYDataItem> items2 = statsCollection.newStats("stat.app.app2", 10);
108     for (int i = 0; i < 10; i++) {
109       items2.add(new XYDataItem((long) i, i * 5.0));
110     }
111 
112     List<XYDataItem> items3 = statsCollection.newStats("stat.app.app3", 10);
113     for (int i = 0; i < 10; i++) {
114       items3.add(new XYDataItem((long) i, i * 1.0));
115     }
116 
117     HttpServletRequest request = mock(HttpServletRequest.class);
118     provider.populate(dataset, statsCollection, request);
119 
120     assertEquals(2, dataset.getSeriesCount());
121   }
122 
123   @Test
124   void testTopEqualToSize() {
125     // top == size -> useTop is false, should return all
126     List<XYDataItem> items1 = statsCollection.newStats("stat.app.app1", 10);
127     items1.add(new XYDataItem(1L, 100.0));
128     List<XYDataItem> items2 = statsCollection.newStats("stat.app.app2", 10);
129     items2.add(new XYDataItem(1L, 200.0));
130 
131     provider.setTop(2); // top == size, useTop is false
132     HttpServletRequest request = mock(HttpServletRequest.class);
133     provider.populate(dataset, statsCollection, request);
134 
135     assertEquals(2, dataset.getSeriesCount());
136   }
137 }