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     * Test suite for <code>PersistentTelemetryDefinitionManager</code>.
009     * 
010     * @author (Cedric) Qin Zhang
011     */
012    public class TestPersistentTelemetryDefinitionManager extends TestCase {
013    
014      private User user = new User(); 
015      private ShareScope privateShareScope = ShareScope.getPrivateShareScope();
016      
017      private String chartDefName = "persistent-CreatedbyUnitTest-ChartDefName";
018      private String reportDefName = "persistent-CreatedbyUnitTest-ReportDefName";
019      private String sameNameDefName = "persistent-CreatedbyUnitTest-SameNameDefName";
020    
021      /**
022       * Sets up the testcase.
023       * 
024       */
025      @Override
026      protected void setUp() {
027        this.user.setEmail("TelemetryDefinitions@hackystat.org");
028        TelemetryDefinitionManager globalManager 
029            = TelemetryDefinitionManagerFactory.getGlobalPersistentInstance();
030        globalManager.remove(this.user, this.chartDefName, TelemetryDefinitionType.CHART);
031        globalManager.remove(this.user, this.reportDefName, TelemetryDefinitionType.REPORT);
032        
033        globalManager.remove(this.user, this.sameNameDefName, TelemetryDefinitionType.CHART);
034        globalManager.remove(this.user, this.sameNameDefName, TelemetryDefinitionType.REPORT);
035      }
036    
037      /**
038       * Tears down the testcase.
039       */
040      @Override
041      protected void tearDown() {
042        this.setUp(); // just do the clean up one more time.
043      }
044    
045      /**
046       * Test the global persistent instance.
047       * 
048       * @throws Exception If test fails.
049       */
050      public void testGlobalInstance() throws Exception {
051        TelemetryDefinitionManager manager 
052            = TelemetryDefinitionManagerFactory.getGlobalPersistentInstance();
053    
054        // chart definition
055        TelemetryChartDefinitionInfo chartDefInfo = new TelemetryChartDefinitionInfo(
056            "chart " + this.chartDefName + "() = {\"title\", (StreamRef(), yAxis())};", 
057            this.user, this.privateShareScope);
058        assertSame(null, manager.get(this.user, chartDefInfo.getName(), false, 
059            TelemetryDefinitionType.CHART));
060        int chartDefSize = manager.getAll(this.user, false, TelemetryDefinitionType.CHART).size();
061        manager.add(chartDefInfo);
062        assertSame(chartDefInfo, manager.get(this.user, chartDefInfo.getName(), false, 
063            TelemetryDefinitionType.CHART));
064        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
065            TelemetryDefinitionType.CHART).size());
066        manager.remove(this.user, chartDefInfo.getName(), TelemetryDefinitionType.CHART);
067        assertEquals(chartDefSize, manager.getAll(this.user, false, 
068            TelemetryDefinitionType.CHART).size());
069    
070        // report defintion
071        TelemetryReportDefinitionInfo reportDefInfo = new TelemetryReportDefinitionInfo(
072            "report " + this.reportDefName + "() = {\"title\", ChartRef()};",
073            this.user, this.privateShareScope);
074        assertSame(null, manager.get(this.user, reportDefInfo.getName(), false, 
075            TelemetryDefinitionType.REPORT));
076        int reportDefSize = manager.getAll(this.user, false, TelemetryDefinitionType.REPORT).size();
077        manager.add(reportDefInfo);
078        assertSame(reportDefInfo, manager.get(this.user, reportDefInfo.getName(), false,
079            TelemetryDefinitionType.REPORT));
080        assertEquals(reportDefSize + 1, manager.getAll(this.user, false, 
081            TelemetryDefinitionType.REPORT).size());
082        manager.remove(this.user, reportDefInfo.getName(), TelemetryDefinitionType.REPORT);
083        assertEquals(reportDefSize, manager.getAll(this.user, false, 
084            TelemetryDefinitionType.REPORT).size());
085    
086        // test single global namespace constraint
087        chartDefInfo = new TelemetryChartDefinitionInfo(
088            "chart " + this.sameNameDefName + "() = {\"title\", (StreamRef(), yAxis())};", 
089            this.user, this.privateShareScope);
090        manager.add(chartDefInfo);
091        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
092            TelemetryDefinitionType.CHART).size());
093        assertEquals(reportDefSize, manager.getAll(this.user, false, 
094            TelemetryDefinitionType.REPORT).size());
095    
096        reportDefInfo = new TelemetryReportDefinitionInfo(
097            "report " + this.sameNameDefName + "() = {\"title\", ChartRef()};",
098            this.user, this.privateShareScope);
099        try {
100          manager.add(reportDefInfo);
101          fail("Global namespace constraint violation.");
102        }
103        catch (TelemetryConfigurationException ex) { //NOPMD
104          // expected
105        }
106        assertEquals(chartDefSize + 1, manager.getAll(this.user, false, 
107            TelemetryDefinitionType.CHART).size());
108        assertEquals(reportDefSize, manager.getAll(this.user, false, 
109            TelemetryDefinitionType.REPORT).size());
110      }
111    }