001    package org.hackystat.telemetry.analyzer.model;
002    
003    import java.util.Collection;
004    
005    import junit.framework.TestCase;
006    
007    /**
008     * Test suite for <code>TelemetryStreamCollection</code>.
009     * 
010     * @author (Cedric) Qin Zhang
011     */
012    public class TestTelemetryStreamCollection extends TestCase {
013    
014      /**
015       * Test case.
016       * 
017       * @throws Exception If test fails.
018       */
019      public void testAll() throws Exception {
020        TelemetryStream stream0 = new TelemetryStream(null);
021        TelemetryStream stream0b = new TelemetryStream(null);
022        TelemetryStream stream1 = new TelemetryStream("stream1");
023        TelemetryStream stream1b = new TelemetryStream("stream1");
024        TelemetryStream stream2 = new TelemetryStream("stream2");
025    
026        TelemetryStreamCollection streams = new TelemetryStreamCollection("Test", null, null);
027        assertEquals("Test", streams.getName());
028        assertNull(streams.getProject());
029        assertNull(streams.getInterval());
030        assertEquals(0, streams.getTelemetryStreams().size());
031    
032        streams.add(stream0);
033        streams.add(stream1);
034        assertEquals(2, streams.getTelemetryStreams().size());
035        try {
036          streams.add(stream0b);
037          fail("Should not allow add stream with same tag.");
038        }
039        catch (TelemetryDataModelException ex) { //NOPMD
040          // expected.
041        }
042        assertEquals(2, streams.getTelemetryStreams().size());
043        try {
044          streams.add(stream1b);
045          fail("Should not allow add stream with same tag.");
046        }
047        catch (TelemetryDataModelException ex) { //NOPMD
048          // expected.
049        }
050        assertEquals(2, streams.getTelemetryStreams().size());
051        streams.add(stream2);
052    
053        assertEquals(3, streams.getTelemetryStreams().size());
054        assertSame(stream0, streams.get(null));
055        assertSame(stream1, streams.get("stream1"));
056        assertSame(stream2, streams.get("stream2"));
057      }
058      
059      /**
060       * Asserts equality for two telemetry stream collection objects, except their names.
061       * 
062       * @param streamCollection1 Telemetry stream collection 1.
063       * @param streamCollection2 Telemetry stream collection 2.
064       * 
065       * @throws Exception If the two stream collections are not the same.
066       */
067      public static void assertEqualsIgnoreName(TelemetryStreamCollection streamCollection1, 
068                               TelemetryStreamCollection streamCollection2) throws Exception {
069        //assertEquals(streamCollection1.getName(), streamCollection2.getName());
070        assertEquals(streamCollection1.getProject(), streamCollection2.getProject());
071        assertEquals(streamCollection1.getInterval(), streamCollection2.getInterval());
072        
073        Collection<TelemetryStream> streams1 = streamCollection1.getTelemetryStreams();
074        assertEquals(streams1.size(), streamCollection2.getTelemetryStreams().size());
075        
076        for (TelemetryStream streamFrom1 : streams1) {
077          Object tag = streamFrom1.getTag();
078          TelemetryStream streamFrom2 = streamCollection2.get(tag);
079          if (streamFrom2 == null) {
080            throw new Exception("Unable to find TelemetryStream '" + streamFrom1.getTag() 
081                + "' from TelemetryStreamCollection '" + streamCollection2.getName() + "'.");
082          }
083          TestTelemetryStream.assertEquals(streamFrom1, streamFrom2);
084        }
085      }
086    }