From 20e74d260242c91c9836efba6a9436a159c4decc Mon Sep 17 00:00:00 2001 From: tierno Date: Mon, 22 Jun 2020 12:17:22 +0000 Subject: [PATCH] bug 1092 fixing deletion of items referenced by several projects It is only deletes if it the last project referencing it. Depends on this change at common: https://osm.etsi.org/gerrit/9134 Change-Id: Id167c0ae3309212b97f59d47a9f3cee7f53fd263 Signed-off-by: tierno --- osm_nbi/admin_topics.py | 8 ++++---- osm_nbi/base_topic.py | 8 ++++---- osm_nbi/tests/test_admin_topics.py | 4 ++-- osm_nbi/tests/test_descriptor_topics.py | 10 ++++++---- osm_nbi/tests/test_instance_topics.py | 5 +++-- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/osm_nbi/admin_topics.py b/osm_nbi/admin_topics.py index 6342ba2..f831b63 100644 --- a/osm_nbi/admin_topics.py +++ b/osm_nbi/admin_topics.py @@ -325,14 +325,14 @@ class CommonVimWimSdn(BaseTopic): # do not remove reference, but order via kafka to delete it if session["project_id"] and session["project_id"]: other_projects_referencing = next((p for p in db_content["_admin"]["projects_read"] - if p not in session["project_id"]), None) + if p not in session["project_id"] and p != "ANY"), None) # check if there are projects referencing it (apart from ANY, that means, public).... if other_projects_referencing: # remove references but not delete - update_dict_pull = {"_admin.projects_read.{}".format(p): None for p in session["project_id"]} - update_dict_pull.update({"_admin.projects_write.{}".format(p): None for p in session["project_id"]}) - self.db.set_one(self.topic, filter_q, update_dict=None, pull=update_dict_pull) + update_dict_pull = {"_admin.projects_read": session["project_id"], + "_admin.projects_write": session["project_id"]} + self.db.set_one(self.topic, filter_q, update_dict=None, pull_list=update_dict_pull) return None else: can_write = next((p for p in db_content["_admin"]["projects_write"] if p == "ANY" or diff --git a/osm_nbi/base_topic.py b/osm_nbi/base_topic.py index 130d4fc..daa7a6b 100644 --- a/osm_nbi/base_topic.py +++ b/osm_nbi/base_topic.py @@ -497,14 +497,14 @@ class BaseTopic: # remove reference from project_read if there are more projects referencing it. If it last one, # do not remove reference, but delete other_projects_referencing = next((p for p in item_content["_admin"]["projects_read"] - if p not in session["project_id"]), None) + if p not in session["project_id"] and p != "ANY"), None) # check if there are projects referencing it (apart from ANY, that means, public).... if other_projects_referencing: # remove references but not delete - update_dict_pull = {"_admin.projects_read.{}".format(p): None for p in session["project_id"]} - update_dict_pull.update({"_admin.projects_write.{}".format(p): None for p in session["project_id"]}) - self.db.set_one(self.topic, filter_q, update_dict=None, pull=update_dict_pull) + update_dict_pull = {"_admin.projects_read": session["project_id"], + "_admin.projects_write": session["project_id"]} + self.db.set_one(self.topic, filter_q, update_dict=None, pull_list=update_dict_pull) return None else: can_write = next((p for p in item_content["_admin"]["projects_write"] if p == "ANY" or diff --git a/osm_nbi/tests/test_admin_topics.py b/osm_nbi/tests/test_admin_topics.py index dce8710..a26d576 100755 --- a/osm_nbi/tests/test_admin_topics.py +++ b/osm_nbi/tests/test_admin_topics.py @@ -734,8 +734,8 @@ class Test_CommonVimWimSdn(TestCase): self.assertEqual(self.db.set_one.call_args[0][1]["_id"], cid, "Wrong CIM identifier") self.assertEqual(self.db.set_one.call_args[1]["update_dict"], None, "Wrong read-only projects update") - self.assertEqual(self.db.set_one.call_args[1]["pull"], {"_admin.projects_read." + test_pid: None, - "_admin.projects_write." + test_pid: None}, + self.assertEqual(self.db.set_one.call_args[1]["pull_list"], + {"_admin.projects_read": (test_pid,), "_admin.projects_write": (test_pid,)}, "Wrong read/write projects update") self.topic._send_msg.assert_not_called() with self.subTest(i=2): diff --git a/osm_nbi/tests/test_descriptor_topics.py b/osm_nbi/tests/test_descriptor_topics.py index 260104a..3853f76 100755 --- a/osm_nbi/tests/test_descriptor_topics.py +++ b/osm_nbi/tests/test_descriptor_topics.py @@ -510,8 +510,9 @@ class Test_VnfdTopic(TestCase): self.assertEqual(db_s1_args[0][1]["_id"], did, "Wrong DB ID") self.assertIn(p_id, db_s1_args[0][1]["_admin.projects_write.cont"], "Wrong DB filter") self.assertIsNone(db_s1_args[1]["update_dict"], "Wrong DB update dictionary") - self.assertIn("_admin.projects_read." + p_id, db_s1_args[1]["pull"], "Wrong DB pull dictionary") - self.assertIn("_admin.projects_write." + p_id, db_s1_args[1]["pull"], "Wrong DB pull dictionary") + self.assertEqual(db_s1_args[1]["pull_list"], + {"_admin.projects_read": (p_id,), "_admin.projects_write": (p_id,)}, + "Wrong DB pull_list dictionary") self.fs.file_delete.assert_not_called() return @@ -841,8 +842,9 @@ class Test_NsdTopic(TestCase): self.assertEqual(db_s1_args[0][1]["_id"], did, "Wrong DB ID") self.assertIn(p_id, db_s1_args[0][1]["_admin.projects_write.cont"], "Wrong DB filter") self.assertIsNone(db_s1_args[1]["update_dict"], "Wrong DB update dictionary") - self.assertIn("_admin.projects_read." + p_id, db_s1_args[1]["pull"], "Wrong DB pull dictionary") - self.assertIn("_admin.projects_write." + p_id, db_s1_args[1]["pull"], "Wrong DB pull dictionary") + self.assertEqual(db_s1_args[1]["pull_list"], + {"_admin.projects_read": (p_id,), "_admin.projects_write": (p_id,)}, + "Wrong DB pull_list dictionary") self.fs.file_delete.assert_not_called() return diff --git a/osm_nbi/tests/test_instance_topics.py b/osm_nbi/tests/test_instance_topics.py index 6d82b0f..14abde7 100644 --- a/osm_nbi/tests/test_instance_topics.py +++ b/osm_nbi/tests/test_instance_topics.py @@ -276,8 +276,9 @@ class TestNsrTopic(unittest.TestCase): self.assertEqual(db_s1_args[0][0], self.nsr_topic.topic, "Wrong DB topic") self.assertEqual(db_s1_args[0][1]["_id"], self.nsr_id, "Wrong DB ID") self.assertIsNone(db_s1_args[1]["update_dict"], "Wrong DB update dictionary") - self.assertIn("_admin.projects_read." + p_other, db_s1_args[1]["pull"], "Wrong DB pull dictionary") - self.assertIn("_admin.projects_write." + p_other, db_s1_args[1]["pull"], "Wrong DB pull dictionary") + self.assertEqual(db_s1_args[1]["pull_list"], + {"_admin.projects_read": [p_other], "_admin.projects_write": [p_other]}, + "Wrong DB pull_list dictionary") self.fs.file_delete.assert_not_called() with self.subTest(i=4, t='Delete with force and admin'): self.db.del_one.reset_mock() -- 2.17.1