001    package org.hackystat.telemetry.analyzer.configuration;
002    
003    import junit.framework.TestCase;
004    
005    import org.hackystat.sensorbase.resource.users.jaxb.User;
006    
007    
008    /**
009     * Test suite for <code>NonPersistentTelemetryDefinitionManager</code>.
010     * 
011     * @author (Cedric) Qin Zhang
012     */
013    public class TestNonPersistentTelemetryDefinitionManager extends TestCase {
014    
015      private User user = new User();
016      private ShareScope privateShareScope = ShareScope.getPrivateShareScope();
017      
018      private String chartDefName = "nonpersistent-CreatedbyUnitTest-ChartDefName";
019      private String reportDefName = "nonpersistent-CreatedbyUnitTest-ReportDefName";
020      private String sameNameDefName = "nonpersistent-CreatedbyUnitTest-SameNameDefName";
021    
022      /**
023       * Sets up the testcase.
024       * 
025       */
026      @Override
027      protected void setUp() {
028        this.user.setEmail("TelemetryDefinitions@hackystat.org");
029        TelemetryDefinitionManager globalManager 
030            = TelemetryDefinitionManagerFactory.getGlobalPersistentInstance();
031        globalManager.remove(this.user, this.chartDefName, TelemetryDefinitionType.CHART);
032        globalManager.remove(this.user, this.reportDefName, TelemetryDefinitionType.REPORT);
033        
034        globalManager.remove(this.user, this.sameNameDefName, TelemetryDefinitionType.CHART);
035        globalManager.remove(this.user, this.sameNameDefName, TelemetryDefinitionType.REPORT);
036      }
037    
038      /**
039       * Tears down the testcase.
040       */
041      @Override
042      protected void tearDown() {
043        this.setUp(); // just do the clean up one more time.
044      }
045    
046      /**
047       * Tests the non-persistent implementation.
048       * 
049       * @throws Exception If test fails.
050       */
051      public void testNonPersistentInstanceUnlinked() throws Exception {
052        TelemetryDefinitionManager manager 
053            = TelemetryDefinitionManagerFactory.createNonPersistentInstance(false);  
054        
055        // chart definition
056        TelemetryChartDefinitionInfo chartDefInfo = new TelemetryChartDefinitionInfo(
057            "chart " + this.chartDefName + "() = {\"title\", (StreamRef(), yAxis())};", 
058            this.user, this.privateShareScope);
059        assertSame(null, manager.get(this.user, chartDefInfo.getName(), false, 
060            TelemetryDefinitionType.CHART));
061        int chartDefSize = 0; //may not be 0 if the manager is liked to global singleton.
062        manager.add(chartDefInfo);
063        assertSame(chartDefInfo, manager.get(this.user, chartDefInfo.getName(), false, 
064            TelemetryDefinitionType.CHART));
065        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
066            TelemetryDefinitionType.CHART).size());
067        manager.remove(this.user, chartDefInfo.getName(), 
068            TelemetryDefinitionType.CHART);
069        assertEquals(chartDefSize, manager.getAll(this.user, false, 
070            TelemetryDefinitionType.CHART).size());
071    
072        // report definition
073        TelemetryReportDefinitionInfo reportDefInfo = new TelemetryReportDefinitionInfo(
074            "report " + this.reportDefName + "() = {\"title\", ChartRef()};",
075            this.user, this.privateShareScope);
076        assertSame(null, manager.get(this.user, reportDefInfo.getName(), false, 
077            TelemetryDefinitionType.REPORT));
078        int reportDefSize = 0; //may not be 0 if the manager is liked to global singleton.
079        manager.add(reportDefInfo);
080        assertSame(reportDefInfo, manager.get(this.user, reportDefInfo.getName(), false, 
081            TelemetryDefinitionType.REPORT));
082        assertEquals(reportDefSize + 1, manager.getAll(this.user, false, 
083            TelemetryDefinitionType.REPORT).size());
084        manager.remove(this.user, reportDefInfo.getName(), 
085            TelemetryDefinitionType.REPORT);
086        assertEquals(reportDefSize, manager.getAll(this.user, false, 
087            TelemetryDefinitionType.REPORT).size());
088    
089        // test single global namespace constraint
090        chartDefInfo = new TelemetryChartDefinitionInfo(
091            "chart " + this.sameNameDefName + "() = {\"title\", (StreamRef(), yAxis())};",
092            this.user, this.privateShareScope);
093        manager.add(chartDefInfo);
094        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
095            TelemetryDefinitionType.CHART).size());
096        assertEquals(reportDefSize, manager.getAll(this.user, false, 
097            TelemetryDefinitionType.REPORT).size());
098    
099        reportDefInfo = new TelemetryReportDefinitionInfo(
100            "report " + this.sameNameDefName + "() = {\"title\", ChartRef()};",
101            this.user, this.privateShareScope);
102        try {
103          manager.add(reportDefInfo);
104          fail("Global namespace constraint violation.");
105        }
106        catch (TelemetryConfigurationException ex) { //NOPMD
107          // expected
108        }
109        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
110            TelemetryDefinitionType.CHART).size());
111        assertEquals(reportDefSize, manager.getAll(this.user, false, 
112            TelemetryDefinitionType.REPORT).size());
113      }
114    
115      /**
116       * Tests the non-persistent implementation.
117       * 
118       * @throws Exception If test fails.
119       */
120      public void testNonPersistentInstanceLinked() throws Exception {
121        TelemetryDefinitionManager globalManager 
122            = TelemetryDefinitionManagerFactory.getGlobalPersistentInstance(); 
123        TelemetryDefinitionManager localManager 
124            = TelemetryDefinitionManagerFactory.createNonPersistentInstance(true);
125        
126        // global instance
127        TelemetryChartDefinitionInfo chartDefInfo = new TelemetryChartDefinitionInfo(
128            "chart " + this.chartDefName + "() = {\"title\", (StreamRef(), yAxis())};", 
129            this.user, this.privateShareScope);
130        assertSame(null, globalManager.get(this.user, chartDefInfo.getName(), false, 
131            TelemetryDefinitionType.CHART));
132        int globalStreamsDefSize = globalManager.getAll(this.user, false, 
133            TelemetryDefinitionType.CHART).size();
134        globalManager.add(chartDefInfo);
135        assertSame(chartDefInfo, globalManager.get(this.user, chartDefInfo.getName(), 
136            false, TelemetryDefinitionType.CHART));
137        assertEquals(globalStreamsDefSize + 1, globalManager.getAll(this.user, false, 
138            TelemetryDefinitionType.CHART).size());
139    
140        // local instance
141        assertSame(chartDefInfo, localManager.get(this.user, chartDefInfo.getName(), 
142            false, TelemetryDefinitionType.CHART));
143        assertEquals(globalStreamsDefSize + 1, localManager.getAll(this.user, false, 
144            TelemetryDefinitionType.CHART).size());    
145        try {
146          localManager.add(chartDefInfo);
147          fail("Name already used in global instance, should not be used again in local instance.");
148        }
149        catch (TelemetryConfigurationException ex) { //NOPMD
150          // expected.
151        }
152        assertSame(chartDefInfo, localManager.get(this.user, chartDefInfo.getName(), 
153            false, TelemetryDefinitionType.CHART));
154        assertEquals(globalStreamsDefSize + 1, localManager.getAll(this.user, false, 
155            TelemetryDefinitionType.CHART).size());   
156      }
157    }