diff --git a/src/config/api-server/tests/test_perms2.py b/src/config/api-server/tests/test_perms2.py index 1a12eb7443d..f01d70b37a0 100644 --- a/src/config/api-server/tests/test_perms2.py +++ b/src/config/api-server/tests/test_perms2.py @@ -967,6 +967,31 @@ def test_chmod_api(self): alice.vnc_lib.chmod(vn.get_uuid(), owner=valid_uuid_2) admin.vnc_lib.chmod(vn.get_uuid(), owner=alice.project_uuid) + def test_bug_1604986(self): + """ + 1) Create a VN + 2) Make is globally shared + 3) list of virtual-networks should not return VN information twice + """ + admin = self.admin + vn_name = "test-vn-1604986" + vn_fq_name = [self.domain_name, admin.project, vn_name] + + test_vn = VirtualNetwork(vn_name, admin.project_obj) + self.admin.vnc_lib.virtual_network_create(test_vn) + + z = self.admin.vnc_lib.resource_list('virtual-network') + test_vn_list = [vn for vn in z['virtual-networks'] if vn['fq_name'][-1] == vn_name] + self.assertEquals(len(test_vn_list), 1) + + test_vn = vnc_read_obj(self.admin.vnc_lib, 'virtual-network', name = vn_fq_name) + set_perms(test_vn, global_access = PERMS_RWX) + admin.vnc_lib.virtual_network_update(test_vn) + + z = self.admin.vnc_lib.resource_list('virtual-network') + test_vn_list = [vn for vn in z['virtual-networks'] if vn['fq_name'][-1] == vn_name] + self.assertEquals(len(test_vn_list), 1) + def tearDown(self): super(TestPermissions, self).tearDown() # end tearDown diff --git a/src/config/api-server/vnc_cfg_api_server.py b/src/config/api-server/vnc_cfg_api_server.py index 93424f64922..7b440c03dd5 100644 --- a/src/config/api-server/vnc_cfg_api_server.py +++ b/src/config/api-server/vnc_cfg_api_server.py @@ -2865,7 +2865,11 @@ def _list_collection(self, obj_type, parent_uuids=None, shares = self._db_conn.get_shared_objects(obj_type, tenant_uuid) except NoIdError: shares = [] + owned_objs = set([obj_uuid for (fq_name, obj_uuid) in result]) for (obj_uuid, obj_perm) in shares: + # skip owned objects already included in results + if obj_uuid in owned_objs: + continue try: fq_name = self._db_conn.uuid_to_fq_name(obj_uuid) result.append((fq_name, obj_uuid))