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>TelemetryDefInfoRepository</code>.
009     * 
010     * TODO: find and findAll method with "true" not tested!!!!
011     * 
012     * @author (Cedric) Qin Zhang
013     */
014    public class TestTelemetryDefInfoRepository extends TestCase {
015    
016      private User user = new User();
017      private ShareScope privateShareScope = ShareScope.getPrivateShareScope();
018    
019      /**
020       * Tests all.
021       * 
022       * @throws Exception If test fails.
023       */
024      public void testAll() throws Exception {
025        this.user.setEmail("TelemetryDefinitions@hackystat.org");
026        TelemetryChartDefinitionInfo a1 = new TelemetryChartDefinitionInfo(
027            "chart A() = {\"title\", (StreamRef1(), yAxis())};", this.user, this.privateShareScope);
028        TelemetryChartDefinitionInfo a2 = new TelemetryChartDefinitionInfo(
029            "chart A() = {\"title\", (StreamRef2(), yAxis())};", this.user, this.privateShareScope);
030        TelemetryChartDefinitionInfo b = new TelemetryChartDefinitionInfo(
031            "chart B() = {\"title\", (StreamRef3(), yAxis())};", this.user, this.privateShareScope);
032    
033        TelemetryDefinitionInfoRepository repository = new TelemetryDefinitionInfoRepository();
034        assertEquals(0, repository.findAll(this.user, false).size());
035        assertNull(repository.find(this.user, "Ghost", false));
036        assertEquals(false, repository.exists("A"));
037        assertEquals(false, repository.exists("B"));
038    
039        repository.add(a1);
040        assertSame(a1, repository.find(this.user, "A", false));
041        assertEquals(1, repository.findAll(this.user, false).size());
042        assertEquals(true, repository.exists("A"));
043        assertEquals(false, repository.exists("B"));
044    
045        try {
046          repository.add(a2);
047          fail("Should not allow adding defintion with the same name under same user.");
048        }
049        catch (TelemetryConfigurationException ex) { //NOPMD
050          // expected
051        }
052        assertSame(a1, repository.find(this.user, "A", false));
053        assertEquals(1, repository.findAll(this.user, false).size());
054    
055        repository.add(b);
056        assertSame(b, repository.find(this.user, "B", false));
057        assertEquals(2, repository.findAll(this.user, false).size());
058        assertEquals(true, repository.exists("A"));
059        assertEquals(true, repository.exists("B"));
060    
061        // do update by remove first and then add
062        repository.remove(this.user, "A");
063        repository.add(a2);
064        assertSame(a2, repository.find(this.user, "A", false));
065        assertEquals(2, repository.findAll(this.user, false).size());
066        assertEquals(true, repository.exists("A"));
067        assertEquals(true, repository.exists("B"));
068    
069        try {
070          repository.add(a1);
071          fail("Should not allow adding defintion with the same name under same user.");
072        }
073        catch (TelemetryConfigurationException ex) { //NOPMD
074          // expected
075        }
076        assertSame(a2, repository.find(this.user, "A", false));
077        assertEquals(2, repository.findAll(this.user, false).size());
078    
079        repository.remove(this.user, "B");
080        assertEquals(1, repository.findAll(this.user, false).size());
081        assertNull(repository.find(this.user, "B", false));
082        assertEquals(true, repository.exists("A"));
083        assertEquals(false, repository.exists("B"));
084      }
085    }