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 }