# # Author: Njaal Borch # import unittest from Multicast import * #class MyLoggerTest(unittest.TestCase): class DoNotRunThisNow: """ Test the MyLogger class """ def setUp(self): self.log = MyLogger() def testLog(self): self.log.debug("DEBUG message") self.log.info("INFO message") self.log.warning("WARNING message") self.log.fatal("FATAL message") try: raise Exception("Exception text") except: self.log.exception("Should have a traceback below here:") class MulticastTest(unittest.TestCase): """ Test multicast class """ def testIPv4(self): # Dummy config config = {'permid':'123', 'hostname':'myhostname', 'port':'1234', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_enabled':True, 'multicast_ipv4_enabled':True, 'multicast_ipv6_enabled':False, 'multicast_announce':True} self.multicast = Multicast(config) try: failed = True seen = 0 for (permid, addr, capabilities) in self.multicast.discoverNodes(): if permid == '123': failed = False if failed: raise Exception("Didn't discover myself using IPv4") finally: self.multicast.stop() def testIPv6(self): # Dummy config config = {'permid':'123', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_enabled':True, 'multicast_ipv4_enabled':False, 'multicast_ipv6_enabled':True, 'multicast_announce':True} self.multicast = Multicast(config) try: failed = True for (permid, addr, capabilities) in self.multicast.discoverNodes(): if permid == '123': failed = False if failed: raise Exception("Didn't discover myself using IPv6") finally: self.multicast.stop() def testBoth(self): # Dummy config config = {'permid':'123', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_enabled':True, 'multicast_ipv4_enabled':True, 'multicast_ipv6_enabled':True, 'multicast_announce':True} self.multicast = Multicast(config) try: seen = 0 for (permid, addr, capabilities) in self.multicast.discoverNodes(): if permid == '123': seen += 1 if seen < 2: raise Exception("Didn't discover myself enough using both (saw me %d times, expected 2)"%seen) finally: self.multicast.stop() def testAllDisabled(self): # Dummy config config = {'permid':'123', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_ipv4_enabled':False, 'multicast_ipv6_enabled':False, 'multicast_announce':True} self.multicast = Multicast(config) try: if len(self.multicast.discoverNodes()) > 0: raise Exception("Discovered nodes even though multicast is not allowed") except: # Expected pass finally: self.multicast.stop() def testAnnounce(self): # Dummy config config = {'permid':'123', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_enabled':True, 'multicast_ipv4_enabled':True, 'multicast_ipv6_enabled':True, 'multicast_announce':True} self.multicast = Multicast(config) # Handle the announce self.announces = [] self.multicast.addAnnounceHandler(self.handleAnnounce) self.multicast.sendAnnounce(['elem1','elem2']) # Wait for asynchronous handling time.sleep(2.0) try: for announce in self.announces: if announce == ['123', 'elem1', 'elem2']: return # Got it raise Exception("Failed to get announce") finally: self.multicast.stop() def handleAnnounce(self, permid, addr, list): """ Handle announce callback function """ self.announces.append([permid] + list) def testCapabilities(self): """ Test capabilities thingy """ myCapabilities = ["Something", "something else", "something totally different"] # Dummy config config = {'permid':'testCapabilities', 'multicast_ipv4_address':'224.0.1.43', 'multicast_ipv6_address':'ff02::4124:1261:ffef', 'multicast_port':'6124', 'multicast_enabled':True, 'multicast_ipv4_enabled':False, 'multicast_ipv6_enabled':True, 'multicast_announce':True} self.multicast = Multicast(config, capabilities=myCapabilities) failed = True for (permid, addr, capabilities) in self.multicast.discoverNodes(): if permid == config['permid']: failed = False if capabilities != myCapabilities: raise Exception("Got bad capabilities, got %s, expected %s"%(str(capabilities), str(myCapabilities))) if failed: raise Exception("Didn't discover myself using IPv6") self.multicast.stop() if __name__ == "__main__": # TODO: Multicast does gives us multiple hits for ourselves, is that ok? print "Testing the Multicast classes" unittest.main() print "All done"