Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
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