001    package org.hackystat.telemetry.analyzer.function.impl;
002    
003    import junit.framework.TestCase;
004    
005    import org.hackystat.telemetry.analyzer.function.TelemetryFunctionManager;
006    import org.hackystat.telemetry.analyzer.model.TelemetryDataPoint;
007    import org.hackystat.telemetry.analyzer.model.TelemetryStream;
008    import org.hackystat.telemetry.analyzer.model.TelemetryStreamCollection;
009    import org.hackystat.telemetry.analyzer.model.TestTelemetryStreamCollection;
010    import org.hackystat.sensorbase.resource.projects.jaxb.Project;
011    import org.hackystat.utilities.time.interval.DayInterval;
012    import org.hackystat.utilities.time.period.Day;
013    
014    /**
015     * Test suite for <code>AddFunction</code>.
016     * 
017     * @author (Cedric) Qin ZHANG
018     */
019    public class TestAddFunction extends TestCase {
020    
021      private TelemetryFunctionManager manager = TelemetryFunctionManager.getInstance();
022      private String projectName = "TestAddFunction";
023      private Project project;
024      private Day startDay;
025      private DayInterval interval;
026      
027      private String add = "add";
028      private String test = "test";
029      
030      
031    
032      /**
033       * Sets up this test case.
034       * @throws Exception If test case cannot be set up.
035       */
036      @Override
037      protected void setUp() throws Exception {
038    
039        //this.project = ProjectManager.getInstance().createTestProjectClientSide(projectName);
040        this.project = new Project();
041        this.project.setName(projectName);
042        this.startDay = Day.getInstance("01-Jan-2004"); 
043        this.interval = new DayInterval(this.startDay, this.startDay.inc(1));
044      }
045      
046      /**
047       * Tears down this test case.
048       * @throws Exception If tear down failed.
049       */
050      @Override
051      protected void tearDown() throws Exception {
052        //ProjectManager.getInstance().deleteProject(this.projectName);
053      }
054      
055      /**
056       * Tests with 2 numbers.
057       * @throws Exception If test fails.
058       */
059      public void testWith2Numbers() throws Exception {
060        Number num1 = Integer.valueOf(1);
061        Number num2 = Integer.valueOf(3);
062        Object result = this.manager.compute(add, new Number[]{num1, num2});
063        assertEquals(4, ((Integer) result).intValue());
064        
065        num1 = Integer.valueOf(1);
066        num2 = Double.valueOf(3.5);
067        result = this.manager.compute(add, new Number[]{num1, num2});
068        assertEquals(4.50, ((Double) result).doubleValue(), 0.00001);
069        
070        num1 = Double.valueOf(1.1);
071        num2 = Double.valueOf(3.5);
072        result = this.manager.compute(add, new Number[]{num1, num2});
073        assertEquals(4.60, ((Double) result).doubleValue(), 0.00001);
074      }
075      
076      /**
077       * Tests with 1 telemetry stream collection and 1 numbers.
078       * @throws Exception If test fails.
079       */
080      public void testWithTelemetryStreamCollectionAndNumber() throws Exception {  //NOPMD assert OK.
081        TelemetryStreamCollection input 
082            = new TelemetryStreamCollection(test, this.project, this.interval);
083        TelemetryStream inputStream = new TelemetryStream(test);
084        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
085        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
086        input.add(inputStream);
087    
088        TelemetryStreamCollection output = (TelemetryStreamCollection) 
089            this.manager.compute(add, new Object[]{input, new Double(0.1)});
090        
091        TelemetryStreamCollection expected 
092            = new TelemetryStreamCollection(test, this.project, this.interval);
093        TelemetryStream expectedStream = new TelemetryStream(test);
094        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(0.1)));
095        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(1.1)));
096        expected.add(expectedStream);
097        
098        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
099      }
100      
101      /**
102       * Tests with 1 numbers and  1 telemetry stream collection.
103       * @throws Exception If test fails.
104       */
105      public void testWithNumberAndTelemetryStreamCollection() throws Exception { //NOPMD assert OK
106        TelemetryStreamCollection input 
107            = new TelemetryStreamCollection(test, this.project, this.interval);
108        TelemetryStream inputStream = new TelemetryStream(test);
109        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
110        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
111        input.add(inputStream);
112    
113        TelemetryStreamCollection output = (TelemetryStreamCollection) 
114            this.manager.compute(add, new Object[]{new Double(0.1), input});
115    
116        TelemetryStreamCollection expected 
117            = new TelemetryStreamCollection(test, this.project, this.interval);
118        TelemetryStream expectedStream = new TelemetryStream(test);
119        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(0.1)));
120        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(1.1)));
121        expected.add(expectedStream);
122    
123        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
124      }
125      
126      /**
127       * Tests with 2 telemetry stream collections.
128       * @throws Exception If test fails.
129       */
130      public void testWith2TelemetryStreamCollections() throws Exception { //NOPMD assert OK.
131        TelemetryStreamCollection input1
132            = new TelemetryStreamCollection(test, this.project, this.interval);
133        TelemetryStream inputStream1 = new TelemetryStream(test);
134        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
135        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
136        input1.add(inputStream1);
137    
138        TelemetryStreamCollection input2 
139            = new TelemetryStreamCollection(test, this.project, this.interval);
140        TelemetryStream inputStream2 = new TelemetryStream(test);
141        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(10)));
142        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(11)));
143        input2.add(inputStream2);
144    
145        TelemetryStreamCollection output = (TelemetryStreamCollection) 
146            this.manager.compute(add, new Object[]{input1, input2});
147    
148        TelemetryStreamCollection expected 
149            = new TelemetryStreamCollection(test, this.project, this.interval);
150        TelemetryStream expectedStream = new TelemetryStream(test);
151        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(10)));
152        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(12)));
153        expected.add(expectedStream);
154    
155        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);    
156      }
157    }