コード例 #1
0
ファイル: base_store.py プロジェクト: caseybryant/pyon
 def define_viewset(self, design_name, design_doc, datastore_name=None, keepviews=False):
     """
     Create or update a design document (i.e. a set of views).
     If design exists, only updates if view definitions are different to prevent rebuild of indexes.
     """
     ds, datastore_name = self._get_datastore(datastore_name)
     doc_name = self._get_design_name(design_name)
     try:
         ds[doc_name] = dict(views=design_doc)
     #except ResourceConflict:
     except Exception:
         # View exists
         old_design = ds[doc_name]
         if not keepviews:
             try:
                 try:
                     del ds[doc_name]
                 except ResourceNotFound:
                     pass
                 ds[doc_name] = dict(views=design_doc)
             except Exception as ex:
                 # In case this gets executed concurrently and 2 processes perform the same creates
                 log.warn("Error defining datastore %s view %s (concurrent create?): %s", datastore_name, doc_name, str(ex))
         else:
             ddiff = DictDiffer(old_design.get("views", {}), design_doc)
             if ddiff.changed():
                 old_design["views"] = design_doc
                 ds.save(old_design)
コード例 #2
0
 def define_views(self, design, viewdef, datastore_name=None):
     """
     Create or update a design document (set of views).
     If design exists, only updates if view definitions are different to prevent rebuild of indexes.
     """
     ds, datastore_name = self._get_datastore(datastore_name)
     doc_name = self._get_design_name(design)
     try:
         ds[doc_name] = dict(views=viewdef)
     except ResourceConflict:
         # View exists
         old_design = ds[doc_name]
         ddiff = DictDiffer(old_design.get("views", {}), viewdef)
         if ddiff.changed():
             old_design["views"] = viewdef
             ds.save(old_design)
コード例 #3
0
ファイル: couchdb_standalone.py プロジェクト: ateranishi/pyon
 def define_views(self, design, viewdef, datastore_name=None):
     """
     Create or update a design document (set of views).
     If design exists, only updates if view definitions are different to prevent rebuild of indexes.
     """
     ds, datastore_name = self._get_datastore(datastore_name)
     doc_name = self._get_design_name(design)
     try:
         ds[doc_name] = dict(views=viewdef)
     except ResourceConflict:
         # View exists
         old_design = ds[doc_name]
         ddiff = DictDiffer(old_design.get("views", {}), viewdef)
         if ddiff.changed():
             old_design["views"] = viewdef
             ds.save(old_design)
コード例 #4
0
    def test_anonymous_resource_registry_operations_through_gateway(self):
        """
        This test ensures that requests make through the service gateway through messaging to the Resource Registry and
        back; including the support of unicode characters.
        """
        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name="
            + convert_unicode(DATA_PRODUCT_NAME)
            + "&id_only=True&user_id=123abc456"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {"object_id": data_product_id},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        data_product_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])

        # Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(data_product_obj["name"], convert_unicode(DATA_PRODUCT_NAME))
        self.assertEqual(data_product_obj["description"], convert_unicode(DATA_PRODUCT_DESCRIPTION))

        updated_description_text = data_product_obj["description"] + "---Updated!!"

        # modify some fields in the data for testing update
        data_product_obj["description"] = updated_description_text

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {"object": data_product_obj},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/update", {"payload": simplejson.dumps(data_product_update_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        updated_data_product_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj["description"], updated_description_text)

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(
            len(differ.changed()), 2
        )  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name=" + convert_unicode(DATA_PRODUCT_NAME) + "&id_only=True"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 1)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json["data"][GATEWAY_RESPONSE])

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json["data"])
        self.assertIn("does not exist", response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name=" + convert_unicode(DATA_PRODUCT_NAME) + "&id_only=True"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json["data"])
        self.assertIn("does not exist", response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])

        # Now try creating a policy object which has an internal object of a different type
        policy_id = self.create_policy_resource()

        policy_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {"object_id": policy_id},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(policy_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        policy_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])

        # Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(policy_obj["name"], convert_unicode(POLICY_NAME))
        self.assertEqual(policy_obj["description"], convert_unicode(POLICY_DESCRIPTION))
        self.assertEqual(policy_obj["policy_type"]["policy_rule"], convert_unicode(POLICY_RULE))

        updated_policy_rule = policy_obj["policy_type"]["policy_rule"] + "---Updated!!"

        # modify some fields in the data for testing update
        policy_obj["policy_type"]["policy_rule"] = updated_policy_rule

        policy_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {"object": policy_obj},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/update", {"payload": simplejson.dumps(policy_update_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(policy_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        updated_policy_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])
        self.assertEqual(updated_policy_obj["policy_type"]["policy_rule"], updated_policy_rule)

        # Now testing the generic get_resource_extension with optional user_id parameter

        response = self.test_app.get("/ion-service/resource_registry/find_resources?name=ionsystem")
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]

        actor_id = response_data[0][0]["_id"]

        response = self.test_app.get(
            "/ion-service/resource_registry/get_resource_extension?resource_id="
            + actor_id
            + "&resource_extension=TestExtendedInformationResource"
        )
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data["user_id"]), "")

        response = self.test_app.get(
            "/ion-service/resource_registry/get_resource_extension?resource_id="
            + actor_id
            + "&resource_extension=TestExtendedInformationResource&user_id=123abc456"
        )
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data["user_id"]), "123abc456")
コード例 #5
0
    def test_resource_registry_operations_through_gateway(self):


        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {  "serviceRequest": {
                                    "serviceName": "resource_registry",
                                    "serviceOp": "read",
                                    "params": {
                                        "object_id": data_product_id
                                            }
                                        }
                                    }

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])

        #modify some fields in the data for testing update
        data_product_obj['description'] = 'An updated description for test data'
        data_product_obj['contact']['postalcode'] = '12345'

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": data_product_obj
                }
            }
        }

        response = self.test_app.post('/ion-service/resource_registry/update', {'payload': simplejson.dumps(data_product_update_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj['description'], 'An updated description for test data', )
        self.assertEqual(updated_data_product_obj['contact']['postalcode'], '12345')

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(len(differ.changed()), 2)  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 1 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json['data'][GATEWAY_RESPONSE])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])
コード例 #6
0
ファイル: test_containers.py プロジェクト: jamie-cyber1/pyon
    def test_dict_merge(self):
        # dict_merge(base, upd, inplace=False):
        org_dict = {"a":"str_a", "d": {"d-x": 1, "d-y": None, "d-d": {"d-d-1": 1, "d-d-2": 2}}}

        base_dict = copy.deepcopy(org_dict)
        dd = DictDiffer(base_dict, org_dict)
        self.assertTrue(len(base_dict), 2)
        self.assertTrue(len(dd.unchanged()), len(base_dict))

        # Case 1: Add new value
        delta_dict = {"c" : "NEW_C"}
        mod_dict = dict_merge(base_dict, delta_dict)
        dd = DictDiffer(base_dict, org_dict)
        self.assertTrue(len(base_dict), 2)
        self.assertTrue(len(dd.unchanged()), len(base_dict))

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), 3)
        self.assertTrue(len(dd.unchanged()), len(org_dict))
        self.assertTrue(dd.added(), 1)

        # Case 2: Change simple type value
        delta_dict = {"a" : 5}
        base_dict = copy.deepcopy(org_dict)
        mod_dict = dict_merge(base_dict, delta_dict)

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), len(org_dict))
        self.assertTrue(len(dd.unchanged()), len(org_dict)-1)
        self.assertTrue(len(dd.changed()), 1)
        self.assertTrue(mod_dict['a'], 5)

        # Case 3: Add new value on lower level
        delta_dict = {"d": {"new":"NEW_ENTRY"}}
        base_dict = copy.deepcopy(org_dict)
        mod_dict = dict_merge(base_dict, delta_dict)

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), len(org_dict))
        self.assertTrue(len(mod_dict['d']), len(org_dict['d']) + 1)
        self.assertTrue(mod_dict['d']['new'], "NEW_ENTRY")
        dd = DictDiffer(mod_dict['d'], org_dict['d'])
        self.assertTrue(len(dd.unchanged()), len(org_dict['d']))
        self.assertTrue(dd.added(), 1)
コード例 #7
0
    def test_resource_registry_operations_through_gateway(self):


        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {  "serviceRequest": {
                                    "serviceName": "resource_registry",
                                    "serviceOp": "read",
                                    "params": {
                                        "object_id": data_product_id
                                            }
                                        }
                                    }

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])

        #modify some fields in the data for testing update
        data_product_obj['description'] = 'An updated description for test data'
        data_product_obj['contact']['postalcode'] = '12345'

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": data_product_obj
                }
            }
        }

        response = self.test_app.post('/ion-service/resource_registry/update', {'payload': simplejson.dumps(data_product_update_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj['description'], 'An updated description for test data', )
        self.assertEqual(updated_data_product_obj['contact']['postalcode'], '12345')

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(len(differ.changed()), 2)  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 1 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json['data'][GATEWAY_RESPONSE])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=TestDataProduct&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])
コード例 #8
0
    def test_anonymous_resource_registry_operations_through_gateway(self):
        """
        This test ensures that requests make through the service gateway through messaging to the Resource Registry and
        back; including the support of unicode characters.
        @return:
        """

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {
                    "object_id": data_product_id
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        data_product_obj = convert_unicode(
            response.json['data'][GATEWAY_RESPONSE])

        #Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(data_product_obj['name'],
                         convert_unicode(DATA_PRODUCT_NAME))
        self.assertEqual(data_product_obj['description'],
                         convert_unicode(DATA_PRODUCT_DESCRIPTION))

        updated_description_text = data_product_obj[
            'description'] + '---Updated!!'

        #modify some fields in the data for testing update
        data_product_obj['description'] = updated_description_text

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": data_product_obj
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/update',
            {'payload': simplejson.dumps(data_product_update_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_data_product_obj = convert_unicode(
            response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj['description'],
                         updated_description_text)

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(
            len(differ.changed()), 2
        )  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 1)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json['data'][GATEWAY_RESPONSE])

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn(
            'does not exist',
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn(
            'does not exist',
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])
コード例 #9
0
    def test_anonymous_resource_registry_operations_through_gateway(self):
        """
        This test ensures that requests make through the service gateway through messaging to the Resource Registry and
        back; including the support of unicode characters.
        @return:
        """

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=' + convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True&user_id=123abc456')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {  "serviceRequest": {
                                    "serviceName": "resource_registry",
                                    "serviceOp": "read",
                                    "params": {
                                        "object_id": data_product_id
                                            }
                                        }
                                    }

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])


        #Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(data_product_obj['name'], convert_unicode(DATA_PRODUCT_NAME))
        self.assertEqual(data_product_obj['description'], convert_unicode(DATA_PRODUCT_DESCRIPTION))

        updated_description_text = data_product_obj['description'] + '---Updated!!'

        #modify some fields in the data for testing update
        data_product_obj['description'] = updated_description_text

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": data_product_obj
                }
            }
        }

        response = self.test_app.post('/ion-service/resource_registry/update', {'payload': simplejson.dumps(data_product_update_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_data_product_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj['description'], updated_description_text )

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(len(differ.changed()), 2)  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=' + convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 1 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json['data'][GATEWAY_RESPONSE])

        response = self.test_app.post('/ion-service/resource_registry/read', {'payload': simplejson.dumps(data_product_read_request) })
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=' + convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data),2 )
        self.assertEqual(len(response_data[0]), 0 )

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn('does not exist', response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])


        #Now testing the generic get_resource_extension with optional user_id parameter

        response = self.test_app.get('/ion-service/resource_registry/find_resources?name=ionsystem')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]

        actor_id = response_data[0][0]['_id']

        response = self.test_app.get('/ion-service/resource_registry/get_resource_extension?resource_id=' + actor_id + '&resource_extension=TestExtendedInformationResource')
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data['user_id']), '')

        response = self.test_app.get('/ion-service/resource_registry/get_resource_extension?resource_id=' + actor_id + '&resource_extension=TestExtendedInformationResource&user_id=123abc456')
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data['user_id']), '123abc456')
コード例 #10
0
    def test_dict_merge(self):
        # dict_merge(base, upd, inplace=False):
        org_dict = {
            "a": "str_a",
            "d": {
                "d-x": 1,
                "d-y": None,
                "d-d": {
                    "d-d-1": 1,
                    "d-d-2": 2
                }
            }
        }

        base_dict = copy.deepcopy(org_dict)
        dd = DictDiffer(base_dict, org_dict)
        self.assertTrue(len(base_dict), 2)
        self.assertTrue(len(dd.unchanged()), len(base_dict))

        # Case 1: Add new value
        delta_dict = {"c": "NEW_C"}
        mod_dict = dict_merge(base_dict, delta_dict)
        dd = DictDiffer(base_dict, org_dict)
        self.assertTrue(len(base_dict), 2)
        self.assertTrue(len(dd.unchanged()), len(base_dict))

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), 3)
        self.assertTrue(len(dd.unchanged()), len(org_dict))
        self.assertTrue(dd.added(), 1)

        # Case 2: Change simple type value
        delta_dict = {"a": 5}
        base_dict = copy.deepcopy(org_dict)
        mod_dict = dict_merge(base_dict, delta_dict)

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), len(org_dict))
        self.assertTrue(len(dd.unchanged()), len(org_dict) - 1)
        self.assertTrue(len(dd.changed()), 1)
        self.assertTrue(mod_dict['a'], 5)

        # Case 3: Add new value on lower level
        delta_dict = {"d": {"new": "NEW_ENTRY"}}
        base_dict = copy.deepcopy(org_dict)
        mod_dict = dict_merge(base_dict, delta_dict)

        dd = DictDiffer(mod_dict, org_dict)
        self.assertTrue(len(mod_dict), len(org_dict))
        self.assertTrue(len(mod_dict['d']), len(org_dict['d']) + 1)
        self.assertTrue(mod_dict['d']['new'], "NEW_ENTRY")
        dd = DictDiffer(mod_dict['d'], org_dict['d'])
        self.assertTrue(len(dd.unchanged()), len(org_dict['d']))
        self.assertTrue(dd.added(), 1)
コード例 #11
0
    def test_anonymous_resource_registry_operations_through_gateway(self):
        """
        This test ensures that requests make through the service gateway through messaging to the Resource Registry and
        back; including the support of unicode characters.
        @return:
        """

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) +
            '&id_only=True&user_id=123abc456')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {
                    "object_id": data_product_id
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        data_product_obj = convert_unicode(
            response.json['data'][GATEWAY_RESPONSE])

        #Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(data_product_obj['name'],
                         convert_unicode(DATA_PRODUCT_NAME))
        self.assertEqual(data_product_obj['description'],
                         convert_unicode(DATA_PRODUCT_DESCRIPTION))

        updated_description_text = data_product_obj[
            'description'] + '---Updated!!'

        #modify some fields in the data for testing update
        data_product_obj['description'] = updated_description_text

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": data_product_obj
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/update',
            {'payload': simplejson.dumps(data_product_update_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_data_product_obj = convert_unicode(
            response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj['description'],
                         updated_description_text)

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(
            len(differ.changed()), 2
        )  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 1)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json['data'][GATEWAY_RESPONSE])

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(data_product_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn(
            'does not exist',
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=' +
            convert_unicode(DATA_PRODUCT_NAME) + '&id_only=True')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json['data'])
        self.assertIn(
            'does not exist',
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(
            response.json['data'][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])

        #Now try creating a policy object which has an internal object of a different type
        policy_id = self.create_policy_resource()

        policy_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {
                    "object_id": policy_id
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(policy_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        policy_obj = convert_unicode(response.json['data'][GATEWAY_RESPONSE])

        #Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(policy_obj['name'], convert_unicode(POLICY_NAME))
        self.assertEqual(policy_obj['description'],
                         convert_unicode(POLICY_DESCRIPTION))
        self.assertEqual(policy_obj['policy_type']['policy_rule'],
                         convert_unicode(POLICY_RULE))

        updated_policy_rule = policy_obj['policy_type'][
            'policy_rule'] + '---Updated!!'

        #modify some fields in the data for testing update
        policy_obj['policy_type']['policy_rule'] = updated_policy_rule

        policy_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {
                    "object": policy_obj
                }
            }
        }

        response = self.test_app.post(
            '/ion-service/resource_registry/update',
            {'payload': simplejson.dumps(policy_update_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        response = self.test_app.post(
            '/ion-service/resource_registry/read',
            {'payload': simplejson.dumps(policy_read_request)})
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])

        updated_policy_obj = convert_unicode(
            response.json['data'][GATEWAY_RESPONSE])
        self.assertEqual(updated_policy_obj['policy_type']['policy_rule'],
                         updated_policy_rule)

        #Now testing the generic get_resource_extension with optional user_id parameter

        response = self.test_app.get(
            '/ion-service/resource_registry/find_resources?name=ionsystem')
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]

        actor_id = response_data[0][0]['_id']

        response = self.test_app.get(
            '/ion-service/resource_registry/get_resource_extension?resource_id='
            + actor_id + '&resource_extension=TestExtendedInformationResource')
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data['user_id']), '')

        response = self.test_app.get(
            '/ion-service/resource_registry/get_resource_extension?resource_id='
            + actor_id +
            '&resource_extension=TestExtendedInformationResource&user_id=123abc456'
        )
        self.assertIn(GATEWAY_RESPONSE, response.json['data'])
        response_data = response.json['data'][GATEWAY_RESPONSE]
        self.assertEqual(convert_unicode(response_data['user_id']),
                         '123abc456')
コード例 #12
0
    def test_anonymous_resource_registry_operations_through_gateway(self):
        """
        This test ensures that requests make through the service gateway through messaging to the Resource Registry and
        back; including the support of unicode characters.
        @return:
        """

        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name=" + convert_unicode(DATA_PRODUCT_NAME) + "&id_only=True"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        data_product_id = self.create_data_product_resource()

        data_product_read_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "read",
                "params": {"object_id": data_product_id},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        data_product_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])

        # Verify the the name and description fields containing unicode characters match all the way through couch and the messaging
        self.assertEqual(data_product_obj["name"], convert_unicode(DATA_PRODUCT_NAME))
        self.assertEqual(data_product_obj["description"], convert_unicode(DATA_PRODUCT_DESCRIPTION))

        updated_description_text = data_product_obj["description"] + "---Updated!!"

        # modify some fields in the data for testing update
        data_product_obj["description"] = updated_description_text

        data_product_update_request = {
            "serviceRequest": {
                "serviceName": "resource_registry",
                "serviceOp": "update",
                "params": {"object": data_product_obj},
            }
        }

        response = self.test_app.post(
            "/ion-service/resource_registry/update", {"payload": simplejson.dumps(data_product_update_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])

        updated_data_product_obj = convert_unicode(response.json["data"][GATEWAY_RESPONSE])
        self.assertEqual(updated_data_product_obj["description"], updated_description_text)

        differ = DictDiffer(updated_data_product_obj, data_product_obj)
        self.assertEqual(
            len(differ.changed()), 2
        )  # Only the _rev and ts_updated fields should be different after an update

        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name=" + convert_unicode(DATA_PRODUCT_NAME) + "&id_only=True"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 1)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIsNone(response.json["data"][GATEWAY_RESPONSE])

        response = self.test_app.post(
            "/ion-service/resource_registry/read", {"payload": simplejson.dumps(data_product_read_request)}
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_ERROR, response.json["data"])
        self.assertIn("does not exist", response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])

        response = self.test_app.get(
            "/ion-service/resource_registry/find_resources?name=" + convert_unicode(DATA_PRODUCT_NAME) + "&id_only=True"
        )
        self.check_response_headers(response)
        self.assertIn(GATEWAY_RESPONSE, response.json["data"])
        response_data = response.json["data"][GATEWAY_RESPONSE]
        self.assertEqual(len(response_data), 2)
        self.assertEqual(len(response_data[0]), 0)

        response = self.delete_data_product_resource(data_product_id)
        self.assertIn(GATEWAY_ERROR, response.json["data"])
        self.assertIn("does not exist", response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_MESSAGE])
        self.assertIsNotNone(response.json["data"][GATEWAY_ERROR][GATEWAY_ERROR_TRACE])