Beispiel #1
0
 def test_register_metadata(self):
     # TODO more testing is needed
     results = open(self.PATH + 'hls_snmp.xml').read()
     results_set = ResultSet.parse_result(results)
     services = parse_lookup_service_result(results_set)
     
     self.assertEqual(len(services), 2)
     self.assertEqual(len(services[0]['data']), 8)
     self.assertEqual(len(services[1]['data']), 5)
     
     for psservice in services:
         serviceType = psservice['service'].serviceType
         serviceName = psservice['service'].serviceName
         accessPoint = psservice['service'].accessPoint
         serviceDescription = psservice['service'].serviceDescription
         
         service = create_psservice(serviceName,
                 accessPoint,
                 serviceType,
                 serviceDescription,
                 psservice['event_types'])
         
         for data in psservice['data']:
             obj = register_metadata(service, data.data)
             # check if all data elements were registered
             watch = psServiceWatchList.objects.filter(service=service, network_object=obj)
             self.assertTrue(watch.count() > 0)
Beispiel #2
0
    def aggregate_query(self, queries, \
                        message_type=Message.SETUP_DATA_REQUEST, \
                        parse_result=True):
        """
        Send multiple queries to the same service to save round trip
        time.

        Arguments:
        queries: list of queries either objects of type Query or
                 XML strings.
        message_type: perfSONAR message types, possible values are
                      defined in Message
        parse_results: If False return raw XML string
        """
        if not isinstance(queries, list):
            raise ValueError("queries should be a list.")

        message = self.make_aggregate_query(queries, message_type)
        xml = message.to_xml()
        
        result = self.soap_client.send_request(xml, parse=parse_result)

        if parse_result is True:
            return ResultSet.parse_result(result)
        else:
            return result
Beispiel #3
0
 def test_interface_to_port(self):
     # TODO test with create port is False
     results = open(self.PATH + 'hls_snmp.xml').read()
     results_set = ResultSet.parse_result(results)
     services = parse_lookup_service_result(results_set)
     
     for psservice in services:
         for data in psservice['data']:
             port = interface_to_port(data.subject.contents)
             self.assertIsInstance(port, Port)
Beispiel #4
0
def query_psservice(client, query, message_type=None, parse_result=True):
    """
    Sends query to perfSONAR service and returns the result.
    
    @param client: perfSONAR service client
    @type client: L{psapi.client.ServiceClient}
    @param query: Query to be sent
    @type query: L{psapi.query.Query} or XML string, or list of them.
    @param parse_result: if B{False} results will not be parsed.
    @type parse_result: boolean
    
    @returns: L{psapi.client.ResultSet} if I{parse_result}, XML string otherwise
    """
    if not isinstance(client, ServiceClient):
        raise ValueError("Client must be of type psapi.client.ServiceClient")
    
    logger.info("Sending query to: '%s'" % client.access_point)
    
    if PRINT_XML_QUERIES:
        print "Sending query to", client.access_point, ":", PRINT_XML_QUERIES
        if isinstance(query, list):
            print client.make_aggregate_query(query, message_type).to_xml()
        else:
            print query.to_xml(message_type=message_type)
    
    parse_query_result = parse_result
    if PRINT_XML_RESULTS:
        parse_query_result = False
    
    if isinstance(query, list):
        results = client.aggregate_query(query,
                    message_type=message_type, parse_result=parse_query_result)
    else:        
        results = client.query(query,
                    message_type=message_type, parse_result=parse_query_result)
    
    if PRINT_XML_RESULTS:
        print "Received result from", client.access_point, ":"
        print results
    
    if parse_result and not parse_query_result:
        results = ResultSet.parse_result(results)
    
    logger.info("Received result from: '%s'" % client.access_point)
    return results
Beispiel #5
0
 def test_parse_lookup_service_result(self):
     results = open(self.PATH + 'hls_snmp.xml').read()
     results_set = ResultSet.parse_result(results)
     services = parse_lookup_service_result(results_set)
     
     self.assertEqual(len(services), 2)
     self.assertEqual(len(services[0]['data']), 8)
     self.assertEqual(len(services[1]['data']), 5)
     
     event_types = [ events.NET_ERROR,
         events.NET_DISCARD,
         events.NET_UTILIZATION
     ]
     
     for service in services:
         for data in service['data']:
             self.assertIsNotNone(data)
         for event in event_types:
             self.assertTrue(event in service['event_types'])
Beispiel #6
0
    def query(self, query, message_type=None, parse_result=True):
        """
        Send One query to perfSONAR service

        Arguments:
        query: either objects of type Query or XML strings
        message_type: perfSONAR message types, possible values are
                      defined in Message
        parse_results: If False return raw XML string
        """
        result = None
        if hasattr(query, 'to_xml'):
            result = self.soap_client.send_request(\
                                query.to_xml(message_type=message_type),
                                parse=parse_result)
        elif isinstance(query, str):
            result = self.soap_client.send_request(query)
        else:
            raise ValueError("Query should be Query instance.")

        if parse_result is True:
            return ResultSet.parse_result(result)
        else:
            return result