Adding more IGMP test cases
diff --git a/src/test/igmp/igmpTest.py b/src/test/igmp/igmpTest.py
index 9a6bf09..441e845 100644
--- a/src/test/igmp/igmpTest.py
+++ b/src/test/igmp/igmpTest.py
@@ -44,6 +44,7 @@
     MGROUP2 = '239.2.2.3'
     MMACGROUP1 = "01:00:5e:01:02:03"
     MMACGROUP2 = "01:00:5e:02:02:03"
+    MINVALIDGROUP1 = "255.255.255.255"
     IGMP_DST_MAC = "01:00:5e:00:01:01"
     IGMP_SRC_MAC = "5a:e1:ac:ec:4d:a1"
     IP_SRC = '1.2.3.4'
@@ -757,3 +758,158 @@
         reactor.callLater(0, igmp_join_sourceip_0_0_0_0_functionality)
         return df
 
+    def igmp_invalid_join_packet_functionality(self, df = None):
+        groups1 = (self.MGROUP1,)
+        groups2 = (self.MINVALIDGROUP1,)
+        groups = groups1 + groups2
+        ip_src = '1.1.1.1'
+        self.igmp_send_joins_different_groups_srclist(groups,
+                                                      (['2.2.2.2', '3.3.3.3', '4.4.4.4'], ['5.5.5.5']),
+                                                      intf = self.V_INF1, delay = 2, ip_src = ip_src)
+        ip_src = self.IP_SRC
+        dst_mac = '01:00:5e:02:02:03'
+        src_ip = '5.5.5.5'
+        if df is None:
+              df = defer.Deferred()
+        igmpState1 = IGMPTestState(groups = groups2, df = df)
+        igmpStateRecv1 = IGMPTestState(groups = groups2, df = df)
+        mcastTraffic1 = McastTraffic(groups2, iface= 'veth2', dst_mac = dst_mac,
+                                     src_ip = src_ip, cb = self.send_mcast_cb, arg = igmpState1)
+        mcastTraffic1.start()
+        join_state1 = IGMPTestState(groups = groups2)
+        target1 = self.igmp_not_recv_task(self.V_INF1, groups2, join_state1)
+        assert target1==1, 'EXPECTED FAILURE'
+        log.info('Interface is not receiving from multicast groups %s when we sent invalid join packet ' %groups2)
+        mcastTraffic1.stop()
+        self.onos_ctrl.deactivate()
+
+    @deferred(timeout=MCAST_TRAFFIC_TIMEOUT+20)
+    def test_igmp_invalid_join_packet_functionality(self):
+        '''This test is sending invalid join with source list A,B,C and exclude D,F,G with multicast group as 255.255.255.255'''
+        df = defer.Deferred()
+        def igmp_invalid_join_packet_functionality():
+              self.igmp_invalid_join_packet_functionality(df = df)
+              df.callback(0)
+        reactor.callLater(0, igmp_invalid_join_packet_functionality)
+        return df
+
+    def igmp_join_data_receiving_during_subscriber_link_down_up_functionality(self, df = None):
+        groups1 = (self.MGROUP1,)
+        groups2 = (self.MGROUP2,)
+        groups = groups1 + groups2
+        ip_src = '1.1.1.1'
+        self.igmp_send_joins_different_groups_srclist(groups,
+                                                      (['2.2.2.2', '3.3.3.3', '4.4.4.4'], ['5.5.5.5']),
+                                                      intf = self.V_INF1, delay = 2, ip_src = ip_src)
+        ip_src = self.IP_SRC
+        dst_mac = '01:00:5e:02:02:03'
+        src_ip = '5.5.5.5'
+        if df is None:
+              df = defer.Deferred()
+        igmpState1 = IGMPTestState(groups = groups2, df = df)
+        igmpStateRecv1 = IGMPTestState(groups = groups2, df = df)
+        mcastTraffic1 = McastTraffic(groups2, iface= 'veth2', dst_mac = dst_mac,
+                                     src_ip = src_ip, cb = self.send_mcast_cb, arg = igmpState1)
+        mcastTraffic1.start()
+        join_state1 = IGMPTestState(groups = groups2)
+        target1 = self.igmp_recv_task(self.V_INF1, groups2, join_state1)
+        log.info('Interface is receiving data from multicast groups, before bringing it down self.V_INF1=%s  ' %self.V_INF1)
+        os.system('ifconfig '+self.V_INF1+' down')
+        log.info(' the self.V_INF1 %s is down now  ' %self.V_INF1)
+        os.system('ifconfig '+self.V_INF1)
+        time.sleep(10)
+        #target1 = self.igmp_not_recv_task(self.V_INF1, groups2, join_state1)
+        #assert target1==1, 'EXPECTED FAILURE'
+        #log.info('Interface is not receiving from multicast groups %s when we shutdown the subscriber interface ' %groups2)
+        os.system('ifconfig '+self.V_INF1+' up')
+        os.system('ifconfig '+self.V_INF1)
+        log.info(' the self.V_INF1 %s is up now  ' %self.V_INF1)
+        #target1 = self.igmp_not_recv_task(self.V_INF1, groups2, join_state1)
+        #assert target1==0, 'EXPECTED FAILURE'
+        #log.info('Interface is not receiving from multicast groups %s when we shutdown the subscriber interface ' %groups2)
+        target1 = self.igmp_recv_task(self.V_INF1, groups2, join_state1)
+        log.info('Interface is receiving data from multicast groups %s when we bring up interface  ' %groups2)
+        mcastTraffic1.stop()
+        self.onos_ctrl.deactivate()
+
+
+    @deferred(timeout=MCAST_TRAFFIC_TIMEOUT+20)
+    def test_igmp_join_data_receiving_during_subscriber_link_down_up_functionality(self):
+        '''This test is sending join with source list A,B,C and exclude D,F,G with valid multicast group during receiving data shutdown the data receiving port  '''
+        df = defer.Deferred()
+        def igmp_join_data_receiving_during_subscriber_link_down_up_functionality():
+            self.igmp_join_data_receiving_during_subscriber_link_down_up_functionality(df = df)
+            df.callback(0)
+        reactor.callLater(0, igmp_join_data_receiving_during_subscriber_link_down_up_functionality)
+        return df
+
+
+    def igmp_invalidClassDIP_join_packet_functionality(self, df = None):
+        groups1 = (self.MGROUP1,)
+        groups2 = (self.MINVALIDGROUP2,)
+        groups = groups1 + groups2
+        ip_src = '1.1.1.1'
+        self.igmp_send_joins_different_groups_srclist(groups,
+                                                      (['2.2.2.2', '3.3.3.3', '4.4.4.4'], ['5.5.5.5']),
+                                                      intf = self.V_INF1, delay = 2, ip_src = ip_src)
+        ip_src = self.IP_SRC
+        dst_mac = '01:00:5e:02:02:03'
+        src_ip = '5.5.5.5'
+        if df is None:
+              df = defer.Deferred()
+        igmpState1 = IGMPTestState(groups = groups2, df = df)
+        igmpStateRecv1 = IGMPTestState(groups = groups2, df = df)
+        mcastTraffic1 = McastTraffic(groups2, iface= 'veth2', dst_mac = dst_mac,
+                                     src_ip = src_ip, cb = self.send_mcast_cb, arg = igmpState1)
+        mcastTraffic1.start()
+        join_state1 = IGMPTestState(groups = groups2)
+        target1 = self.igmp_not_recv_task(self.V_INF1, groups2, join_state1)
+        assert target1==1, 'EXPECTED FAILURE'
+        log.info('Interface is not receiving from multicast groups %s when we sent invalid join packet ' %groups2)
+        mcastTraffic1.stop()
+        self.onos_ctrl.deactivate()
+
+    @deferred(timeout=MCAST_TRAFFIC_TIMEOUT+20)
+    def test_igmp_invalidClassDIP_join_packet_functionality(self):
+        '''This test is sending invalid join with source list A,B,C and exclude D,F,G with multicast group as 239.255.255.255'''
+        df = defer.Deferred()
+        def igmp_invalidClassDIP_join_packet_functionality():
+              self.igmp_invalidClassDIP_join_packet_functionality(df = df)
+              df.callback(0)
+        reactor.callLater(0, igmp_invalidClassDIP_join_packet_functionality)
+        return df
+
+    def igmp_invalidClassDIP_as_srclistIP_join_packet_functionality(self, df = None):
+        groups1 = (self.MGROUP1,)
+        groups2 = (self.MGROUP2,)
+        groups = groups1 + groups2
+        ip_src = '1.1.1.1'
+        self.igmp_send_joins_different_groups_srclist(groups,
+                                                      (['2.2.2.2', '3.3.3.3', '4.4.4.4'], ['239.5.5.5']),
+                                                      intf = self.V_INF1, delay = 2, ip_src = ip_src)
+        ip_src = self.IP_SRC
+        dst_mac = '01:00:5e:02:02:03'
+        src_ip = '5.5.5.5'
+        if df is None:
+              df = defer.Deferred()
+        igmpState1 = IGMPTestState(groups = groups2, df = df)
+        igmpStateRecv1 = IGMPTestState(groups = groups2, df = df)
+        mcastTraffic1 = McastTraffic(groups2, iface= 'veth2', dst_mac = dst_mac,
+                                     src_ip = src_ip, cb = self.send_mcast_cb, arg = igmpState1)
+        mcastTraffic1.start()
+        join_state1 = IGMPTestState(groups = groups2)
+        target1 = self.igmp_not_recv_task(self.V_INF1, groups2, join_state1)
+        assert target1==1, 'EXPECTED FAILURE'
+        log.info('Interface is not receiving from multicast groups %s when we sent invalid join packet ' %groups2)
+        mcastTraffic1.stop()
+        self.onos_ctrl.deactivate()
+
+    @deferred(timeout=MCAST_TRAFFIC_TIMEOUT+20)
+    def test_igmp_invalidClassDIP_as_srclistIP_join_packet_functionality(self):
+        '''This test is sending invalid join with source list A,B,C and exclude D,F,G with source list as  239.5.5.5'''
+        df = defer.Deferred()
+        def igmp_invalidClassDIP_as_srclistIP_join_packet_functionality():
+            self.igmp_invalidClassDIP_as_srclistIP_join_packet_functionality(df = df)
+            df.callback(0)
+        reactor.callLater(0, igmp_invalidClassDIP_as_srclistIP_join_packet_functionality)
+        return df