コード例 #1
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_validate_elements_of_collection_with_elements_referenced_by_out_of_range_json_pointer(self):
        metadata = """
                    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="N">
                        <EntityType Name="Outer" Abstract="false">
                            <NavigationProperty Name="MyCollection" Type="Collection(ReferencedEntity)" ContainsTarget="true">
                                <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read"/>
                            </NavigationProperty>
                        </EntityType>

                        <EntityType Name="ReferencedEntity" Abstract="false">
                            <Property Name="name" Type="Edm.String"/>
                        </EntityType>
                    </Schema>
                    """

        resource = \
            {
                "@odata.id": "resource.id",
                "@odata.type": "N.Outer",
                "MyCollection": [
                    {
                        "@odata.id": "/outer#MyCollection/0"
                    },
                    {
                        "@odata.id": "/outer#MyCollection/2"  # pointer out of range
                    }
                ]
            }

        metadata_manager = MetadataManager(["qualifier"])
        metadata_container = metadata_manager.read_metadata_from_strings("Unknown", metadata)
        discovery_container = DiscoveryContainer()
        configuration = Configuration(**dict(UseSSL='True', ApiEndpoint=API_ENDPOINT))
        api_explorer = ApiExplorer(metadata_container, configuration)

        with mock.patch('cts_core.commons.api_caller.ApiCaller.get_resource') as get_resource:
            get_resource.side_effect = [(Link('url1', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK, resource,
                                         Link('url1', 'netloc')),
                                        (Link('url2', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK, resource,
                                         Link('url2', 'netloc')),
                                        (Link('url3', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK, resource,
                                         Link('url3', 'netloc'))]

            with StdoutCapture() as output:
                api_explorer.discover("/outer", "N.Outer", discovery_container)
            self.assertEqual(3, get_resource.call_count)
            self.assertIn(
                'ERROR::JSON pointer exception while dereferencing /MyCollection/2',
                ';'.join(output))

        requirements = [
        ]
        validator = MetadataGetValidator(metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED, validator.validate(discovery_container))

        self.assertEqual(0, len(re.findall('ERROR::', ';'.join(output))))
コード例 #2
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_pass_if_entity_type_declared_on_ignore_list_with_asterix(self):
        metadata_manager = MetadataManager(['qualifier'], ignore_types=["N.*"])
        self.metadata_container = metadata_manager.read_metadata_from_strings('Unknown', METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource('/redfish/resource1',
                                                          'netloc',
                                                          RESOURCE_WITH_INVALID_PROPERTY_VALUE,
                                                          '#N.R'))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED, validator.validate(self.discovery_container))
コード例 #3
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_pass_when_unknown_complex_type_mapped_on_known_type(self):
        metadata_manager = MetadataManager(["qualifier"], map_types={"A" : "B", "unknown.complex.type" : "N.ObjectWithNumericProperty"})
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_UNKNOWN_COMPLEX_TYPE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED, validator.validate(self.discovery_container))
コード例 #4
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_pass_if_property_of_incorrect_type_declared_on_ignore_list(self):
        metadata_manager = MetadataManager(["qualifier"], ignore_types=["N.ObjectWithNumericProperty"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_INVALID_PROPERTY_VALUE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED, validator.validate(self.discovery_container))
コード例 #5
0
    def test_should_pass_if_entity_type_declared_on_ignore_list(self):
        metadata_manager = MetadataManager(["qualifier"], ignore_types=["N.R"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_INVALID_PROPERTY_VALUE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED,
                         validator.validate(self.discovery_container))
コード例 #6
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_pass_with_correct_resource(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_CORRECT,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED, validator.validate(self.discovery_container))
コード例 #7
0
    def test_should_pass_with_correct_resource(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc', RESOURCE_CORRECT,
                        "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED,
                             validator.validate(self.discovery_container))
コード例 #8
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_fail_bacause_of_unknown_entity_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_UNKNOWN_ENTITY_TYPE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED, validator.validate(self.discovery_container))

        self.assertIn("ERROR::Unknown entity type 'unknown.entity.type'", output.raw)
コード例 #9
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_fail_bacause_of_unknown_complex_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_UNKNOWN_COMPLEX_TYPE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED, validator.validate(self.discovery_container))

        self.assertIn('Reference to unknown type unknown.complex.type', '\n'.join(output))
コード例 #10
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_fail_if_property_of_incorrect_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_INVALID_PROPERTY_VALUE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED, validator.validate(self.discovery_container))

        self.assertIn('Property resource.id->ObjectWithNumber is expected to be json object', '\n'.join(output))
コード例 #11
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_validate_dynamic_properties_at_entity_level(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_INCOMPLETE_DYNAMIC_PROPERTY,
                                                          "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED, validator.validate(self.discovery_container))

        self.assertIn('ERROR::Required property resource.id->aaaaaaaa->Obligatory not present in the resource',
                      '\n'.join(output))
コード例 #12
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_fail_if_non_nullable_property_is_null(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_WITH_NULL_ON_NON_NULLABLE,
                                                                                "#N.R"))

        requirements = [
        ]
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED, validator.validate(self.discovery_container))

        self.assertIn('ERROR::Property resource.id->CapacityGiB cannot be null', '\n'.join(output))
        self.assertIn('ERROR::Property resource.id->ObjectWithNumber->Number cannot be null', '\n'.join(output))
コード例 #13
0
    def test_should_fail_bacause_of_unknown_complex_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_UNKNOWN_COMPLEX_TYPE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED,
                             validator.validate(self.discovery_container))

        self.assertIn('Reference to unknown type unknown.complex.type',
                      '\n'.join(output))
コード例 #14
0
    def test_should_pass_when_unknown_entity_type_mapped_to_known_one(self):
        metadata_manager = MetadataManager(["qualifier"],
                                           map_types={
                                               "A": "B",
                                               "unknown.entity.type": "N.R"
                                           })
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_UNKNOWN_ENTITY_TYPE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED,
                         validator.validate(self.discovery_container))
コード例 #15
0
    def test_should_fail_bacause_of_unknown_entity_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_UNKNOWN_ENTITY_TYPE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED,
                             validator.validate(self.discovery_container))

        self.assertIn("ERROR::Unknown entity type 'unknown.entity.type'",
                      output.raw)
コード例 #16
0
    def test_should_fail_if_property_of_incorrect_type(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_INVALID_PROPERTY_VALUE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED,
                             validator.validate(self.discovery_container))

        self.assertIn(
            'Property resource.id->ObjectWithNumber is expected to be json object',
            '\n'.join(output))
コード例 #17
0
    def test_should_validate_dynamic_properties_at_entity_level(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_INCOMPLETE_DYNAMIC_PROPERTY, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED,
                             validator.validate(self.discovery_container))

        self.assertIn(
            'ERROR::Required property resource.id->aaaaaaaa->Obligatory not present in the resource',
            '\n'.join(output))
コード例 #18
0
ファイル: test_get_validate.py プロジェクト: 01org/intelRSD
    def test_should_suggest_other_names_for_additionals(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings("Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(ApiResource("/redfish/resource1",
                                                          'netloc', RESOURCE_CORRECT,
                                                                                "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED, validator.validate(self.discovery_container))

        self.assertIn('Schema defines other, not used, but similar properties: [OptionalProperty1, OptionalProperty3]',
                      '\n'.join(output))
        self.assertIn(
            'Schema defines other, not used, but similar properties: [OptionalPropertyInComplex1, OptionalPropertyInComplex3]',
            '\n'.join(output))
コード例 #19
0
    def test_should_pass_when_unknown_complex_type_mapped_on_known_type(self):
        metadata_manager = MetadataManager(["qualifier"],
                                           map_types={
                                               "A":
                                               "B",
                                               "unknown.complex.type":
                                               "N.ObjectWithNumericProperty"
                                           })
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_UNKNOWN_COMPLEX_TYPE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        self.assertEqual(ValidationStatus.PASSED,
                         validator.validate(self.discovery_container))
コード例 #20
0
    def test_should_fail_if_non_nullable_property_is_null(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc',
                        RESOURCE_WITH_NULL_ON_NON_NULLABLE, "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.FAILED,
                             validator.validate(self.discovery_container))

        self.assertIn(
            'ERROR::Property resource.id->CapacityGiB cannot be null',
            '\n'.join(output))
        self.assertIn(
            'ERROR::Property resource.id->ObjectWithNumber->Number cannot be null',
            '\n'.join(output))
コード例 #21
0
    def test_should_suggest_other_names_for_additionals(self):
        metadata_manager = MetadataManager(["qualifier"])
        self.metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", METADATA)
        self.discovery_container = DiscoveryContainer()

        self.discovery_container.add_resource(
            ApiResource("/redfish/resource1", 'netloc', RESOURCE_CORRECT,
                        "#N.R"))

        requirements = []
        validator = MetadataGetValidator(self.metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED,
                             validator.validate(self.discovery_container))

        self.assertIn(
            'Schema defines other, not used, but similar properties: [OptionalProperty1, OptionalProperty3]',
            '\n'.join(output))
        self.assertIn(
            'Schema defines other, not used, but similar properties: [OptionalPropertyInComplex1, OptionalPropertyInComplex3]',
            '\n'.join(output))
コード例 #22
0
    def test_validate_elements_of_collection_with_elements_referenced_by_out_of_range_json_pointer(
            self):
        metadata = """
                    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="N">
                        <EntityType Name="Outer" Abstract="false">
                            <NavigationProperty Name="MyCollection" Type="Collection(ReferencedEntity)" ContainsTarget="true">
                                <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read"/>
                            </NavigationProperty>
                        </EntityType>

                        <EntityType Name="ReferencedEntity" Abstract="false">
                            <Property Name="name" Type="Edm.String"/>
                        </EntityType>
                    </Schema>
                    """

        resource = \
            {
                "@odata.id": "resource.id",
                "@odata.type": "N.Outer",
                "MyCollection": [
                    {
                        "@odata.id": "/outer#MyCollection/0"
                    },
                    {
                        "@odata.id": "/outer#MyCollection/2"  # pointer out of range
                    }
                ]
            }

        metadata_manager = MetadataManager(["qualifier"])
        metadata_container = metadata_manager.read_metadata_from_strings(
            "Unknown", metadata)
        discovery_container = DiscoveryContainer()
        configuration = Configuration(
            **dict(UseSSL='True', ApiEndpoint=API_ENDPOINT))
        api_explorer = ApiExplorer(metadata_container, configuration)

        with mock.patch('cts_core.commons.api_caller.ApiCaller.get_resource'
                        ) as get_resource:
            get_resource.side_effect = [
                (Link('url1', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK,
                 resource, Link('url1', 'netloc')),
                (Link('url2', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK,
                 resource, Link('url2', 'netloc')),
                (Link('url3', 'netloc'), RequestStatus.SUCCESS, ReturnCodes.OK,
                 resource, Link('url3', 'netloc'))
            ]

            with StdoutCapture() as output:
                api_explorer.discover("/outer", "N.Outer", discovery_container)
            self.assertEqual(3, get_resource.call_count)
            self.assertIn(
                'ERROR::JSON pointer exception while dereferencing /MyCollection/2',
                ';'.join(output))

        requirements = []
        validator = MetadataGetValidator(metadata_container, requirements)

        with StdoutCapture() as output:
            self.assertEqual(ValidationStatus.PASSED,
                             validator.validate(discovery_container))

        self.assertEqual(0, len(re.findall('ERROR::', ';'.join(output))))