def get_cloud_service(self): Printer.start_test("Get CloudService") (status, response) = self.client.perform_request( "subscriptions/%s/cloudservices/%s" % ( self.config["subscription_id"], self.config["cloud_service_name"] ), "GET", None, validate_xml=True ) if status in [200, 201]: Printer.success("Get CloudService succeeded.") Printer.info("Checking XML") else: Printer.error("Get CloudService failed with HTTP status code %s" % status) return t = xmlutil.get_subtree_from_xml_string(response) root_node_expected_tag = '{0}CloudService'.format(xmlutil.get_namespace(t)) root_node_actual_tag = xmlutil.get_root_tag(t) if (root_node_expected_tag != root_node_actual_tag): Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) return resource_names = map(lambda t: t.text, xmlutil.get_nodes(t, ".//{0}Resource/{0}Name")) if self.config['resource_name'] not in resource_names: Printer.error("Resource named '%s' not returned by endpoint" % self.config['resource_name'])
def get_cloud_service(self): Printer.start_test("Get CloudService") (status, response) = self.client.perform_request( "subscriptions/%s/cloudservices/%s" % (self.config["subscription_id"], self.config["cloud_service_name"]), "GET", None, validate_xml=True) if status in [200, 201]: Printer.success("Get CloudService succeeded.") Printer.info("Checking XML") else: Printer.error("Get CloudService failed with HTTP status code %s" % status) return t = xmlutil.get_subtree_from_xml_string(response) root_node_expected_tag = '{0}CloudService'.format( xmlutil.get_namespace(t)) root_node_actual_tag = xmlutil.get_root_tag(t) if (root_node_expected_tag != root_node_actual_tag): Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) return resource_names = map(lambda t: t.text, xmlutil.get_nodes(t, ".//{0}Resource/{0}Name")) if self.config['resource_name'] not in resource_names: Printer.error("Resource named '%s' not returned by endpoint" % self.config['resource_name'])
def _validate_resource_response(self, etag, t): root_node_expected_tag = xmlutil.get_root_tag(t) Printer.info("Checking if root node's tag is %s" % root_node_expected_tag) root_node_actual_tag = xmlutil.get_root_tag(t) if (root_node_expected_tag != root_node_actual_tag): Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) Printer.info("Checking if CloudServiceSettings are present") self._check_node_exists(t, './{0}CloudServiceSettings') if etag: Printer.info("Checking if ETag is %s" % etag) self._check_node_value(t, './{0}ETag', etag) Printer.info("Checking if Name is %s" % self.config['resource_name']) self._check_node_value(t, './{0}Name', self.config['resource_name']) Printer.info("Checking if OperationStatus/Result is 'Succeeded'") self._check_node_value(t, './{0}OperationStatus/{0}Result', "Succeeded") Printer.info("Checking if OutputItems are present") if self._check_node_exists(t, './{0}OutputItems', behavior='warn'): output_items = t.findall('.//{0}OutputItem'.format(xmlutil.get_namespace(t))) for output_item in output_items: output_item_tree = xmlutil.get_subtree_from_element(output_item) self._check_node_exists(output_item_tree, './{0}Key') self._check_node_exists(output_item_tree, './{0}Value') Printer.info("Checking if UsageMeters are present") if self._check_node_exists(t, './{0}UsageMeters', behavior='warn'): usage_meters = xmlutil.get_nodes('.//{0}UsageMeter') for usage_meter in usage_meters: usage_meter_tree = xmlutil.get_subtree_from_element(usage_meter) self._check_node_exists(usage_meter_tree, './{0}Included') self._check_node_exists(usage_meter_tree, './{0}Name') self._check_node_exists(usage_meter_tree, './{0}Unit', behavior='warn') self._check_node_exists(usage_meter_tree, './{0}Used') Printer.info("Checking if Plan is present") self._check_node_exists(t, './{0}Plan') Printer.info("Checking if State is 'Started'") self._check_node_value(t, './{0}State', "Started")
def _validate_resource_response(self, etag, t): root_node_expected_tag = xmlutil.get_root_tag(t) Printer.info("Checking if root node's tag is %s" % root_node_expected_tag) root_node_actual_tag = xmlutil.get_root_tag(t) if (root_node_expected_tag != root_node_actual_tag): Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) Printer.info("Checking if xmlns is correct") xmlns_actual = xmlutil.get_xmlns(t) xmlns_expected = "http://schemas.datacontract.org/2004/07/Microsoft.Cis.DevExp.Services.Rdfe.ServiceManagement" if not xmlns_actual: Printer.error("Missing xmlns tag") if xmlns_actual != xmlns_expected: Printer.error("xmlns in response body is not correct. Expected: %s, Actual: %s" % (xmlns_expected, xmlns_actual)) Printer.info("Checking if CloudServiceSettings are present") self._check_node_exists(t, './{0}CloudServiceSettings') if etag: Printer.info("Checking if ETag is %s" % etag) self._check_node_value(t, './{0}ETag', etag) Printer.info("Checking if Name is %s" % self.config['resource_name']) self._check_node_value(t, './{0}Name', self.config['resource_name']) Printer.info("Checking if OperationStatus/Result is 'Succeeded'") self._check_node_value(t, './{0}OperationStatus/{0}Result', "Succeeded") Printer.info("Checking if OutputItems are present") # warn if OutputItems are not returned if self._check_node_exists(t, './{0}OutputItems', behavior='warn'): output_items = t.findall('.//{0}OutputItem'.format(xmlutil.get_namespace(t))) # check that no. of OutputItems are turned is equal to no. of OutputItems defined in manifest if len(output_items) != len(self.config['manifest']['output_keys']): Printer.error( "Your response contains a different number of OutputItems (%s) than is defined in the manifest (%s)." % ( len(output_items), len(self.config['manifest']['output_keys']) ) ) for output_item in output_items: output_item_tree = xmlutil.get_subtree_from_element(output_item) # warn if Key node is not present if self._check_node_exists(output_item_tree, './{0}Key'): output_item_key = self._get_node_value(output_item_tree, './{0}Key') Printer.info("Checking if OutputItem '%s' is present in manifest and cased properly" % output_item_key) # warn if OutputItem is not defined in manifest if output_item_key not in self.config['manifest']['output_keys']: Printer.error("OutputItem '%s' not found in manifest. Make sure it is cased properly in your response and defined in the manifest" % output_item_key) # warn if Value node is not present self._check_node_exists(output_item_tree, './{0}Value') Printer.info("Checking if UsageMeters are present") if self._check_node_exists(t, './{0}UsageMeters', behavior='warn'): usage_meters = xmlutil.get_nodes(t, './/{0}UsageMeter') for usage_meter in usage_meters: usage_meter_tree = xmlutil.get_subtree_from_element(usage_meter) self._check_node_exists(usage_meter_tree, './{0}Included') self._check_node_exists(usage_meter_tree, './{0}Name') if self._check_node_exists(usage_meter_tree, './{0}Unit', behavior='warn'): meter_name = self._get_node_value(usage_meter_tree, './{0}Unit') allowed_meter_names = ['bytes', 'hours', 'generic'] if meter_name not in allowed_meter_names: Printer.error("Usage Meter '%s' is not one of allowed values: %s" % (meter_name, string.join(allowed_meter_names, ', '))) self._check_node_exists(usage_meter_tree, './{0}Used') Printer.info("Checking if Plan is present") self._check_node_exists(t, './{0}Plan') Printer.info("Checking if State is 'Started'") self._check_node_value(t, './{0}State', "Started") Printer.info("Checking if Type is '%s'" % self.config["resource_type"]) self._check_node_value(t, './{0}Type', self.config["resource_type"])
def _validate_resource_response(self, etag, t): root_node_expected_tag = xmlutil.get_root_tag(t) Printer.info("Checking if root node's tag is %s" % root_node_expected_tag) root_node_actual_tag = xmlutil.get_root_tag(t) if root_node_expected_tag != root_node_actual_tag: Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) Printer.info("Checking if xmlns is correct") xmlns_actual = xmlutil.get_xmlns(t) xmlns_expected = "http://schemas.microsoft.com/windowsazure" if not xmlns_actual: Printer.error("Missing xmlns tag") if xmlns_actual != xmlns_expected: Printer.error( "xmlns in response body is not correct. Expected: %s, Actual: %s" % (xmlns_expected, xmlns_actual) ) Printer.info("Checking if CloudServiceSettings are present") self._check_node_exists(t, "./{0}CloudServiceSettings") if etag: Printer.info("Checking if ETag is %s" % etag) self._check_node_value(t, "./{0}ETag", etag) Printer.info("Checking if Name is %s" % self.config["resource_name"]) self._check_node_value(t, "./{0}Name", self.config["resource_name"]) Printer.info("Checking if OperationStatus/Result is 'Succeeded'") self._check_node_value(t, "./{0}OperationStatus/{0}Result", "Succeeded") Printer.info("Checking if OutputItems are present") # warn if OutputItems are not returned if self._check_node_exists(t, "./{0}OutputItems", behavior="warn"): output_items = t.findall(".//{0}OutputItem".format(xmlutil.get_namespace(t))) # check that no. of OutputItems are turned is equal to no. of OutputItems defined in manifest if len(output_items) != len(self.config["manifest"]["output_items"]): Printer.error( "Your response contains a different number of OutputItems (%s) than is defined in the manifest (%s)." % (len(output_items), len(self.config["manifest"]["output_items"])) ) for output_item in output_items: output_item_tree = xmlutil.get_subtree_from_element(output_item) # warn if Key node is not present if self._check_node_exists(output_item_tree, "./{0}Key"): output_item_key = self._get_node_value(output_item_tree, "./{0}Key") Printer.info( "Checking if OutputItem '%s' is present in manifest and cased properly" % output_item_key ) # warn if OutputItem is not defined in manifest if output_item_key not in self.config["manifest"]["output_items"]: Printer.error( "OutputItem '%s' not found in manifest. Make sure it is cased properly in your response and defined in the manifest" % output_item_key ) # warn if Value node is not present self._check_node_exists(output_item_tree, "./{0}Value") Printer.info("Checking if UsageMeters are present") if self._check_node_exists(t, "./{0}UsageMeters", behavior="warn"): usage_meters = xmlutil.get_nodes(t, ".//{0}UsageMeter") for usage_meter in usage_meters: usage_meter_tree = xmlutil.get_subtree_from_element(usage_meter) self._check_node_exists(usage_meter_tree, "./{0}Included") self._check_node_exists(usage_meter_tree, "./{0}Name") if self._check_node_exists(usage_meter_tree, "./{0}Unit", behavior="warn"): meter_name = self._get_node_value(usage_meter_tree, "./{0}Unit") allowed_meter_names = ["bytes", "hours", "generic"] if meter_name not in allowed_meter_names: Printer.error( "Usage Meter '%s' is not one of allowed values: %s" % (meter_name, string.join(allowed_meter_names, ", ")) ) self._check_node_exists(usage_meter_tree, "./{0}Used") Printer.info("Checking if Plan is present") self._check_node_exists(t, "./{0}Plan") Printer.info("Checking if State is 'Started'") self._check_node_value(t, "./{0}State", "Started") Printer.info("Checking if Type is '%s'" % self.config["resource_type"]) self._check_node_value(t, "./{0}Type", self.config["resource_type"])
def _validate_resource_response(self, etag, t): root_node_expected_tag = xmlutil.get_root_tag(t) Printer.info("Checking if root node's tag is %s" % root_node_expected_tag) root_node_actual_tag = xmlutil.get_root_tag(t) if (root_node_expected_tag != root_node_actual_tag): Printer.error("Root node does not have expected tag %s" % root_node_expected_tag) Printer.info("Checking if xmlns is correct") xmlns_actual = xmlutil.get_xmlns(t) xmlns_expected = "http://schemas.microsoft.com/windowsazure" if not xmlns_actual: Printer.error("Missing xmlns tag") if xmlns_actual != xmlns_expected: Printer.error( "xmlns in response body is not correct. Expected: %s, Actual: %s" % (xmlns_expected, xmlns_actual)) Printer.info("Checking if CloudServiceSettings are present") self._check_node_exists(t, './{0}CloudServiceSettings') if etag: Printer.info("Checking if ETag is %s" % etag) self._check_node_value(t, './{0}ETag', etag) Printer.info("Checking if Name is %s" % self.config['resource_name']) self._check_node_value(t, './{0}Name', self.config['resource_name']) Printer.info("Checking if OperationStatus/Result is 'Succeeded'") self._check_node_value(t, './{0}OperationStatus/{0}Result', "Succeeded") Printer.info("Checking if OutputItems are present") # warn if OutputItems are not returned if self._check_node_exists(t, './{0}OutputItems', behavior='warn'): output_items = t.findall('.//{0}OutputItem'.format( xmlutil.get_namespace(t))) # check that no. of OutputItems are turned is equal to no. of OutputItems defined in manifest if len(output_items) != len( self.config['manifest']['output_items']): Printer.error( "Your response contains a different number of OutputItems (%s) than is defined in the manifest (%s)." % (len(output_items), len(self.config['manifest']['output_items']))) for output_item in output_items: output_item_tree = xmlutil.get_subtree_from_element( output_item) # warn if Key node is not present if self._check_node_exists(output_item_tree, './{0}Key'): output_item_key = self._get_node_value( output_item_tree, './{0}Key') Printer.info( "Checking if OutputItem '%s' is present in manifest and cased properly" % output_item_key) # warn if OutputItem is not defined in manifest if output_item_key not in self.config['manifest'][ 'output_items']: Printer.error( "OutputItem '%s' not found in manifest. Make sure it is cased properly in your response and defined in the manifest" % output_item_key) # warn if Value node is not present self._check_node_exists(output_item_tree, './{0}Value') Printer.info("Checking if UsageMeters are present") if self._check_node_exists(t, './{0}UsageMeters', behavior='warn'): usage_meters = xmlutil.get_nodes(t, './/{0}UsageMeter') for usage_meter in usage_meters: usage_meter_tree = xmlutil.get_subtree_from_element( usage_meter) self._check_node_exists(usage_meter_tree, './{0}Included') self._check_node_exists(usage_meter_tree, './{0}Name') if self._check_node_exists(usage_meter_tree, './{0}Unit', behavior='warn'): meter_name = self._get_node_value(usage_meter_tree, './{0}Unit') allowed_meter_names = ['bytes', 'hours', 'generic'] if meter_name not in allowed_meter_names: Printer.error( "Usage Meter '%s' is not one of allowed values: %s" % (meter_name, string.join(allowed_meter_names, ', '))) self._check_node_exists(usage_meter_tree, './{0}Used') Printer.info("Checking if Plan is present") self._check_node_exists(t, './{0}Plan') Printer.info("Checking if State is 'Started'") self._check_node_value(t, './{0}State', "Started") Printer.info("Checking if Type is '%s'" % self.config["resource_type"]) self._check_node_value(t, './{0}Type', self.config["resource_type"])