def test_recursive_properties(self):
     discovery_doc = {
         'id': 'recursive#api',
         'schemas': {
             'Object-1': {
                 'properties': {
                     'property-1': {
                         'type': 'object',
                         '$ref': 'Object-2'
                     }
                 }
             },
             'Object-2': {
                 'properties': {
                     'property-2': {
                         'type': 'object',
                         '$ref': 'Object-1'
                     }
                 }
             }
         }
     }
     schema = APISchema._translate_resource_to_schema(
         'Object-1', discovery_doc)
     schema.sort()
     self.assertEqual(schema, [])
 def test_simple_properties(self):
     api_properties = {
         'property-1': {
             'type': 'string',
             'description': 'description-1.'
         },
         'property-2': {
             'type': 'integer',
             'description': 'description-2.'
         }
     }
     schema = APISchema._properties_map_to_field_list(
         api_properties, {}, {})
     schema.sort()
     self.assertEqual(schema, [{
         'name': 'property-1',
         'field_type': 'STRING',
         'description': 'description-1.',
         'mode': 'NULLABLE'
     }, {
         'name': 'property-2',
         'field_type': 'NUMERIC',
         'description': 'description-2.',
         'mode': 'NULLABLE'
     }])
示例#3
0
 def test_repeated_properties(self):
     api_properties = {
         'property-1': {
             'type': 'array',
             'items': {
                 '$ref': 'NestedObject',
             },
             'description': 'description-1.'
         },
     }
     resources = {
         'NestedObject': {
             'properties': {
                 'property-2': {
                     'type': 'string',
                     'description': 'description-2.'
                 }
             }
         }
     }
     schema = APISchema._properties_map_to_field_list(api_properties,
                                                      resources, {})
     schema.sort()
     self.assertEqual(schema, [{'name': 'property-1',
                                'field_type': 'RECORD',
                                'mode': 'REPEATED',
                                'description': 'description-1.',
                                'fields': [{
                                    'name': 'property-2',
                                    'field_type': 'STRING',
                                    'description': 'description-2.',
                                    'mode': 'NULLABLE'
                                }]}])
示例#4
0
    def test_for_for_asset_type(self):
        APISchema._discovery_document_cache = {
            'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest': {
                'id': 'compute.v1',
                'schemas': {
                    'Instance': {
                        'properties': {
                            'property-1': {
                                'type': 'string',
                                'description': 'description-1.'
                            }}}}},
            'https://content.googleapis.com/discovery/v1/apis': {
                'items': [{
                    'name': 'compute',
                    'version': 'v1',
                    'discoveryRestUrl': 'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest'}]}}

        schema = APISchema.bigquery_schema_for_resource(
            'google.compute.Instance',
            'Instance',
            'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest',
            True, True)
        data_fields = self.get_schema_data_field(schema)
        self.assertEqual(
            [{'field_type': 'STRING',
              'name': 'property-1',
              'description': 'description-1.',
              'mode': 'NULLABLE'},
             {'field_type': 'STRING',
              'description': 'Last time resource was changed.',
              'name': 'lastModifiedTime',
              'mode': 'NULLABLE'}],
            data_fields)
        # name, asset_type, timestamp, resource, iam_policy
        self.assertEqual(len(schema), 5)
示例#5
0
 def test_resource_last_modified(self):
     # Test that resource lastModifiedTime takes precedence.
     APISchema._discovery_document_cache = {
         'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest': {
             'id': 'compute.v1',
             'schemas': {
                 'Machine': {
                     'properties': {
                         'lastModifiedTime': {
                             'type': 'string',
                             'description': 'Track time of last change.'
                         }}}}},
         'https://content.googleapis.com/discovery/v1/apis': {
             'items': [{
                 'name': 'compute',
                 'version': 'v1',
                 'discoveryRestUrl': 'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest'}]}}
     schema = APISchema.bigquery_schema_for_resource(
         'google.compute.Machine',
         'Machine',
         'https://www.googleapis.com/discovery/v1/apis/compute/v1/rest',
         True, True)
     data_fields = self.get_schema_data_field(schema)
     self.assertEqual(
         [{'field_type': 'STRING',
           'name': 'lastModifiedTime',
           'description': 'Track time of last change.',
           'mode': 'NULLABLE'}],
         data_fields)
示例#6
0
 def element_to_schema(self, element):
     element_resource = element.get('resource', {})
     return APISchema.bigquery_schema_for_resource(
         element['asset_type'],
         element_resource.get('discovery_name', None),
         element_resource.get('discovery_document_uri', None), 'data'
         in element_resource, 'iam_policy' in element)
    def test_for_swagger_type(self):
        APISchema._discovery_document_cache = {
            'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json':
            {
                'info': {
                    'title': 'Kubernetes',
                    'version': 'v1.15.0'
                },
                'definitions': {
                    'io.k8s.api.rbac.v1.ClusterRole': {
                        'properties': {
                            'aggregationRule': {
                                '$ref':
                                '#/definitions/io.k8s.api.rbac.v1.AggregationRule',
                            }
                        }
                    },
                    'io.k8s.api.rbac.v1.AggregationRule': {
                        'properties': {
                            'name': {
                                'type': 'string'
                            }
                        }
                    }
                }
            },
            'https://content.googleapis.com/discovery/v1/apis': {
                'items': []
            }
        }

        schema = APISchema.bigquery_schema_for_resource(
            'io.k8s.authorization.rbac.ClusterRoleBinding',
            'io.k8s.api.rbac.v1.ClusterRole',
            'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json',
            True, True)
        data_fields = self.get_schema_data_field(schema)
        self.assertEqual([{
            'field_type':
            'RECORD',
            'name':
            'aggregationRule',
            'fields': [{
                'field_type': 'STRING',
                'name': 'name',
                'mode': 'NULLABLE'
            }],
            'mode':
            'NULLABLE'
        }, {
            'field_type': 'STRING',
            'description': 'Last time resource was changed.',
            'name': 'lastModifiedTime',
            'mode': 'NULLABLE'
        }], data_fields)
    def test_for_for_asset_type(self):
        APISchema._discovey_documents_map = {
            'compute': [{
                'id': 'compute.v1',
                'schemas': {
                    'Instance': {
                        'properties': {
                            'property-1': {
                                'type': 'string',
                                'description': 'description-1.'
                            }
                        }
                    }
                }
            }]
        }

        schema = APISchema.bigquery_schema_for_asset_type(
            'google.compute.Instance', True, True)
        self.assertEqual(len(schema), 4)
 def test_recursive_properties(self):
     resources = {
         'Object-1': {
             'properties': {
                 'property-1': {
                     'type': 'object',
                     '$ref': 'Object-2',
                 }
             }
         },
         'Object-2': {
             'properties': {
                 'property-2': {
                     'type': 'object',
                     '$ref': 'Object-1',
                 }
             }
         }
     }
     schema = APISchema._properties_map_to_field_list(
         resources['Object-1']['properties'], resources, {})
     schema.sort()
     self.assertEqual(schema, [])
示例#10
0
 def test_string_additional_properties(self):
     api_properties = {
         'property-1': {
             'type': 'object',
             'additionalProperties': {
                 'type': 'string',
                 'description': 'description-1.'
             },
             'description': 'description-1'
         },
     }
     resources = {}
     schema = APISchema._properties_map_to_field_list(
         api_properties, resources, {})
     schema.sort()
     self.assertEqual(schema, [{
         'name':
         'property-1',
         'field_type':
         'RECORD',
         'description':
         'description-1',
         'mode':
         'REPEATED',
         'fields': [{
             'name': 'name',
             'field_type': 'STRING',
             'description': 'additionalProperties name',
             'mode': 'NULLABLE'
         }, {
             'name': 'value',
             'field_type': 'STRING',
             'description': 'description-1.',
             'mode': 'NULLABLE'
         }]
     }])
 def element_to_schema(self, element):
     return APISchema.bigquery_schema_for_asset_type(
         element['asset_type'],
         'resource' in element and 'data' in element['resource'],
         'iam_policy' in element)