def test_service_unique(self): a = service(type='_jdbc._tcp', port=1521, name='Oracle JDBC', sysname='training', state='INITIAL') b = service(type='_jdbc._tcp', port=1521, name='Oracle JDBC', sysname='training', state='INITIAL') c = service(type='_jdbc._tcp', port=1522, name='Oracle JDBC', sysname='training', state='INITIAL') self.assertEquals(a,b) self.assertNotEquals(b,c) self.assertEquals(hash(a),hash(b)) self.assertNotEquals(hash(a),hash(c))
def __service_resolved(self, *args): ''' print 'service resolved' print 'name:', args[2] print 'type:', args[3] print 'domain:', args[4] print 'full_domain:', args[5] print 'address:', args[7] print 'port:', args[8] print avahi.txt_array_to_string_array(args[9]) ''' # construct service s = service() s.type = args[3] s.port = int(args[8]) txt_records = avahi.txt_array_to_string_array(args[9]) for record in txt_records: key = record[0:record.find('=')] value = record[record.find('=') + 1:len(record)] if key == 'sysname': s.sysname = value elif key == 'state': s.state = value else: s.txt[key] = value # add service to results self.__results.append(s)
def test_types(self): # load db backend = loader().get_backend() types = backend.types() # search it svc = service(type='_http._tcp', port=80, name='Web Site', sysname='training', state='INITIAL') search_pattern = svc.type_full i = types.index(search_pattern) # assert match self.assertEquals(types[i], svc.type_full)
def test_publisher(self): # create the group group = servicegroup() group.name = 'Test Service Group' # create the services svc_a = service(type='_jdbc._tcp', port=1521, name='Oracle JDBC', sysname='training', state='SCHEMA-READY') svc_a.txt = { 'foo':'smoke', 'bar':'monster' } svc_b = service(type='_http._tcp', port=8080, name='Virgo', sysname='training', state='RUNNING') group.services = [ svc_a, svc_b ] p = publisher() # publish them (seralize) if os.geteuid() != 0: self.assertRaises(IOError, p.save_group, group) else: p_rtn = p.save_group(group) self.assertTrue(p_rtn >= 0) # load service group (deserialize) sg = p.load_group() self.assertTrue(sg != None) self.assertEquals(sg.services[0].protocol, group.services[0].protocol) self.assertEquals(sg.services[0].type, group.services[0].type) self.assertEquals(sg.services[0].port, group.services[0].port) self.assertEquals(sg.services[0].sysname, group.services[0].sysname) self.assertEquals(sg.services[0].state, group.services[0].state) self.assertEquals(sg.services[0].txt['foo'], group.services[0].txt['foo']) # remove it r_rtn = p.remove_group() self.assertTrue(r_rtn >= 0)
def load_group(self, alternate_location=None): if alternate_location != None: self.__file_location = alternate_location doc = libxml2.parseFile(self.__file_location) ctx = doc.xpathNewContext() sg = servicegroup() name_node = ctx.xpathEval('//service-group/name')[0] sg.name = name_node.content sg.replace = name_node.hasProp('replace-wildcards').content service_nodes = ctx.xpathEval('//service-group/service') for node in service_nodes: ctx.setContextNode(node) s = service() sg.services.append(s) s.type = ctx.xpathEval('type')[0].content s.port = int(ctx.xpathEval('port')[0].content) record_nodes = ctx.xpathEval('txt-record') #print type + "::" + port + "::" + str(len(record_nodes)) for r_node in record_nodes: node_str = r_node.content key = node_str[0:node_str.find('=')] value = node_str[node_str.find('=') + 1:len(node_str)] if key == 'sysname': s.sysname = value elif key == 'state': s.state = value else: s.txt[key] = value doc.freeDoc() ctx.xpathFreeContext() return sg