001 package org.hackystat.telemetry.analyzer.function.impl; 002 003 import junit.framework.TestCase; 004 005 import org.hackystat.telemetry.analyzer.model.TelemetryDataPoint; 006 import org.hackystat.telemetry.analyzer.model.TelemetryStream; 007 import org.hackystat.telemetry.analyzer.model.TelemetryStreamCollection; 008 import org.hackystat.sensorbase.resource.projects.jaxb.Project; 009 import org.hackystat.utilities.time.interval.DayInterval; 010 import org.hackystat.utilities.time.period.Day; 011 012 /** 013 * Test suite for <code>FilterFunction</code>. 014 * 015 * @author (Cedric) Qin ZHANG 016 */ 017 public class TestFilterFunction extends TestCase { 018 019 private FilterFunction filterFunction = new FilterFunction(); 020 private String projectName = "TestFilterFunction"; 021 private Project project; 022 private Day startDay; 023 private DayInterval interval; 024 025 private String test1 = "test1"; 026 private String test2 = "test2"; 027 private String test3 = "test3"; 028 private String avg = "Avg"; 029 private String topPercent = "TopPercent"; 030 private String bottomPercent = "BottomPercent"; 031 private String top = "Top"; 032 private String bottom = "Bottom"; 033 034 035 036 /** 037 * Sets up this test case. 038 * @throws Exception If test case cannot be set up. 039 */ 040 @Override 041 protected void setUp() throws Exception { 042 043 //this.project = ProjectManager.getInstance().createTestProjectClientSide(projectName); 044 this.project = new Project(); 045 this.project.setName(projectName); 046 this.startDay = Day.getInstance("01-Jan-2004"); 047 this.interval = new DayInterval(this.startDay, this.startDay.inc(1)); 048 } 049 050 /** 051 * Tears down this test case. 052 * @throws Exception If tear down failed. 053 */ 054 @Override 055 protected void tearDown() throws Exception { 056 //ProjectManager.getInstance().deleteProject(this.projectName); 057 } 058 059 /** 060 * Tests the filter in absolute mode. 061 * @throws Exception If test fails. 062 */ 063 public void testFilterAbsoluteMode() throws Exception { 064 TelemetryStreamCollection input 065 = new TelemetryStreamCollection("test", this.project, this.interval); 066 TelemetryStream inputStream1 = new TelemetryStream(test1); 067 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(1))); 068 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(2))); 069 input.add(inputStream1); 070 TelemetryStream inputStream2 = new TelemetryStream(test2); 071 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(3))); 072 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(4))); 073 input.add(inputStream2); 074 TelemetryStream inputStream3 = new TelemetryStream(test3); 075 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0))); 076 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(5))); 077 input.add(inputStream3); 078 079 //Mode AllAbove 080 TelemetryStreamCollection output = (TelemetryStreamCollection) 081 this.filterFunction.compute(new Object[]{input, "Min", "Above", Integer.valueOf(2)}); 082 assertEquals(1, output.getTelemetryStreams().size()); 083 assertSame(inputStream2, output.get(test2)); 084 085 //Mode AllBlow 086 output = (TelemetryStreamCollection) 087 this.filterFunction.compute(new Object[]{input, "Max", "Below", Integer.valueOf(3)}); 088 assertEquals(1, output.getTelemetryStreams().size()); 089 assertSame(inputStream1, output.get(test1)); 090 091 //Mode AnyAbove 092 output = (TelemetryStreamCollection) 093 this.filterFunction.compute(new Object[]{input, "Max", "Above", Integer.valueOf(3)}); 094 assertEquals(2, output.getTelemetryStreams().size()); 095 assertSame(inputStream2, output.get(test2)); 096 assertSame(inputStream3, output.get(test3)); 097 098 //Mode AnyBelow 099 output = (TelemetryStreamCollection) 100 this.filterFunction.compute(new Object[]{input, "Min", "Below", Integer.valueOf(3)}); 101 assertEquals(2, output.getTelemetryStreams().size()); 102 assertSame(inputStream1, output.get(test1)); 103 assertSame(inputStream3, output.get(test3)); 104 } 105 106 /** 107 * Tests the filter in relative mode. 108 * @throws Exception If test fails. 109 */ 110 public void testFilterRelativeMode() throws Exception { 111 TelemetryStreamCollection input 112 = new TelemetryStreamCollection("test", this.project, this.interval); 113 TelemetryStream inputStream1 = new TelemetryStream(test1); 114 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(1))); 115 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1))); 116 input.add(inputStream1); 117 TelemetryStream inputStream2 = new TelemetryStream(test2); 118 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(2))); 119 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(2))); 120 input.add(inputStream2); 121 TelemetryStream inputStream3 = new TelemetryStream(test3); 122 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(3))); 123 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(3))); 124 input.add(inputStream3); 125 126 //Mode TopPercent 127 TelemetryStreamCollection output = (TelemetryStreamCollection) 128 this.filterFunction.compute(new Object[]{input, avg, topPercent, Integer.valueOf(30)}); 129 assertEquals(1, output.getTelemetryStreams().size()); 130 assertSame(inputStream3, output.get(test3)); 131 output = (TelemetryStreamCollection) 132 this.filterFunction.compute(new Object[]{input, avg, topPercent, Integer.valueOf(60)}); 133 assertEquals(2, output.getTelemetryStreams().size()); 134 assertSame(inputStream2, output.get(test2)); 135 assertSame(inputStream3, output.get(test3)); 136 output = (TelemetryStreamCollection) 137 this.filterFunction.compute(new Object[]{input, avg, topPercent, Integer.valueOf(0)}); 138 assertEquals(0, output.getTelemetryStreams().size()); 139 output = (TelemetryStreamCollection) 140 this.filterFunction.compute(new Object[]{input, avg, topPercent, Integer.valueOf(100)}); 141 assertEquals(3, output.getTelemetryStreams().size()); 142 143 //Mode BottomPercent 144 output = (TelemetryStreamCollection) 145 this.filterFunction.compute(new Object[]{input, avg, bottomPercent, Integer.valueOf(30)}); 146 assertEquals(1, output.getTelemetryStreams().size()); 147 assertSame(inputStream1, output.get(test1)); 148 output = (TelemetryStreamCollection) 149 this.filterFunction.compute(new Object[]{input, avg, bottomPercent, Integer.valueOf(60)}); 150 assertEquals(2, output.getTelemetryStreams().size()); 151 assertSame(inputStream1, output.get(test1)); 152 assertSame(inputStream2, output.get(test2)); 153 output = (TelemetryStreamCollection) 154 this.filterFunction.compute(new Object[]{input, avg, bottomPercent, Integer.valueOf(0)}); 155 assertEquals(0, output.getTelemetryStreams().size()); 156 output = (TelemetryStreamCollection) 157 this.filterFunction.compute(new Object[]{input, avg, bottomPercent, Integer.valueOf(100)}); 158 assertEquals(3, output.getTelemetryStreams().size()); 159 160 //Mode Top 161 output = (TelemetryStreamCollection) 162 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(2)}); 163 assertEquals(2, output.getTelemetryStreams().size()); 164 assertSame(inputStream2, output.get(test2)); 165 assertSame(inputStream3, output.get(test3)); 166 output = (TelemetryStreamCollection) 167 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(-1)}); 168 assertEquals(0, output.getTelemetryStreams().size()); 169 output = (TelemetryStreamCollection) 170 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(0)}); 171 assertEquals(0, output.getTelemetryStreams().size()); 172 output = (TelemetryStreamCollection) 173 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(1)}); 174 assertEquals(1, output.getTelemetryStreams().size()); 175 output = (TelemetryStreamCollection) 176 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(2)}); 177 assertEquals(2, output.getTelemetryStreams().size()); 178 output = (TelemetryStreamCollection) 179 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(3)}); 180 assertEquals(3, output.getTelemetryStreams().size()); 181 output = (TelemetryStreamCollection) 182 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(4)}); 183 assertEquals(3, output.getTelemetryStreams().size()); 184 185 //Mode Bottom 186 output = (TelemetryStreamCollection) 187 this.filterFunction.compute(new Object[]{input, avg, bottom, Integer.valueOf(2)}); 188 assertEquals(2, output.getTelemetryStreams().size()); 189 assertSame(inputStream1, output.get(test1)); 190 assertSame(inputStream2, output.get(test2)); 191 output = (TelemetryStreamCollection) 192 this.filterFunction.compute(new Object[]{input, avg, bottom, Integer.valueOf(-1)}); 193 assertEquals(0, output.getTelemetryStreams().size()); 194 output = (TelemetryStreamCollection) 195 this.filterFunction.compute(new Object[]{input, avg, bottom, Integer.valueOf(0)}); 196 assertEquals(0, output.getTelemetryStreams().size()); 197 output = (TelemetryStreamCollection) 198 this.filterFunction.compute(new Object[]{input, avg, bottom, Integer.valueOf(1)}); 199 assertEquals(1, output.getTelemetryStreams().size()); 200 output = (TelemetryStreamCollection) 201 this.filterFunction.compute(new Object[]{input, avg, bottom, Integer.valueOf(2)}); 202 assertEquals(2, output.getTelemetryStreams().size()); 203 output = (TelemetryStreamCollection) 204 this.filterFunction.compute(new Object[]{input, avg, bottom, "3"}); 205 assertEquals(3, output.getTelemetryStreams().size()); 206 output = (TelemetryStreamCollection) 207 this.filterFunction.compute(new Object[]{input, avg, bottom, "4"}); 208 assertEquals(3, output.getTelemetryStreams().size()); 209 } 210 211 /** 212 * Tests the rank functions. 213 * @throws Exception If test fails. 214 */ 215 public void testRankFunctions() throws Exception { 216 TelemetryStreamCollection input 217 = new TelemetryStreamCollection("test", this.project, this.interval); 218 TelemetryStream inputStream1 = new TelemetryStream(test1); 219 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(100))); 220 inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(50))); 221 input.add(inputStream1); 222 TelemetryStream inputStream2 = new TelemetryStream(test2); 223 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(3))); 224 inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(4))); 225 input.add(inputStream2); 226 TelemetryStream inputStream3 = new TelemetryStream(test3); 227 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(120))); 228 inputStream3.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(-100))); 229 input.add(inputStream3); 230 231 FilterFunction.RankFunction rank = null; 232 233 //Average: (150/2, 7/2, 20/2) 234 rank = new FilterFunction.AverageRankFunction(); 235 assertEquals(150.0 / 2, rank.getRank(inputStream1), 0); 236 assertEquals(7.0 / 2, rank.getRank(inputStream2), 0); 237 assertEquals(20.0 / 2, rank.getRank(inputStream3), 0); 238 TelemetryStreamCollection output = (TelemetryStreamCollection) 239 this.filterFunction.compute(new Object[]{input, avg, top, Integer.valueOf(1)}); 240 assertEquals(1, output.getTelemetryStreams().size()); 241 assertSame(inputStream1, output.get(test1)); 242 243 //Max: (100, 4, 120) 244 rank = new FilterFunction.MaxRankFunction(); 245 assertEquals(100.0, rank.getRank(inputStream1), 0); 246 assertEquals(4.0, rank.getRank(inputStream2), 0); 247 assertEquals(120.0, rank.getRank(inputStream3), 0); 248 output = (TelemetryStreamCollection) 249 this.filterFunction.compute(new Object[]{input, "Max", top, Integer.valueOf(1)}); 250 assertEquals(1, output.getTelemetryStreams().size()); 251 assertSame(inputStream3, output.get(test3)); 252 253 //Min (50, 3, -100) 254 rank = new FilterFunction.MinRankFunction(); 255 assertEquals(50.0, rank.getRank(inputStream1), 0); 256 assertEquals(3.0, rank.getRank(inputStream2), 0); 257 assertEquals(-100.0, rank.getRank(inputStream3), 0); 258 output = (TelemetryStreamCollection) 259 this.filterFunction.compute(new Object[]{input, "Min", top, Integer.valueOf(1)}); 260 assertEquals(1, output.getTelemetryStreams().size()); 261 assertSame(inputStream1, output.get(test1)); 262 263 //Min (50, 4, -100) 264 rank = new FilterFunction.LastRankFunction(); 265 assertEquals(50.0, rank.getRank(inputStream1), 0); 266 assertEquals(4.0, rank.getRank(inputStream2), 0); 267 assertEquals(-100.0, rank.getRank(inputStream3), 0); 268 output = (TelemetryStreamCollection) 269 this.filterFunction.compute(new Object[]{input, "Last", top, Integer.valueOf(1)}); 270 assertEquals(1, output.getTelemetryStreams().size()); 271 assertSame(inputStream1, output.get(test1)); 272 273 //Delta (50, 1, 220) 274 rank = new FilterFunction.DeltaRankFunction(); 275 assertEquals(50.0, rank.getRank(inputStream1), 0); 276 assertEquals(1.0, rank.getRank(inputStream2), 0); 277 assertEquals(220.0, rank.getRank(inputStream3), 0); 278 output = (TelemetryStreamCollection) 279 this.filterFunction.compute(new Object[]{input, "Delta", top, Integer.valueOf(1)}); 280 assertEquals(1, output.getTelemetryStreams().size()); 281 assertSame(inputStream3, output.get(test3)); 282 283 //SimpleDelta (-50, 1, -220) 284 rank = new FilterFunction.SimpleDeltaRankFunction(); 285 assertEquals(-50.0, rank.getRank(inputStream1), 0); 286 assertEquals(1.0, rank.getRank(inputStream2), 0); 287 assertEquals(-220.0, rank.getRank(inputStream3), 0); 288 output = (TelemetryStreamCollection) 289 this.filterFunction.compute(new Object[]{input, "SimpleDelta", top, Integer.valueOf(1)}); 290 assertEquals(1, output.getTelemetryStreams().size()); 291 assertSame(inputStream2, output.get(test2)); 292 } 293 }