diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py
index 6708748..eabc619 100644
--- a/n2vc/k8s_juju_conn.py
+++ b/n2vc/k8s_juju_conn.py
@@ -64,12 +64,7 @@
         """
 
         # parent class
-        K8sConnector.__init__(
-            self,
-            db,
-            log=log,
-            on_update_db=on_update_db,
-        )
+        K8sConnector.__init__(self, db, log=log, on_update_db=on_update_db)
 
         self.fs = fs
         self.loop = loop or asyncio.get_event_loop()
@@ -125,34 +120,19 @@
         cleanup_data = []
         try:
             self.log.debug("Initializing K8s cluster for juju")
-            kubectl.create_cluster_role(
-                name=metadata_name,
-                labels=labels,
-            )
+            kubectl.create_cluster_role(name=metadata_name, labels=labels)
             self.log.debug("Cluster role created")
             cleanup_data.append(
-                {
-                    "delete": kubectl.delete_cluster_role,
-                    "args": (metadata_name,),
-                }
+                {"delete": kubectl.delete_cluster_role, "args": (metadata_name,)}
             )
 
-            kubectl.create_service_account(
-                name=metadata_name,
-                labels=labels,
-            )
+            kubectl.create_service_account(name=metadata_name, labels=labels)
             self.log.debug("Service account created")
             cleanup_data.append(
-                {
-                    "delete": kubectl.delete_service_account,
-                    "args": (metadata_name,),
-                }
+                {"delete": kubectl.delete_service_account, "args": (metadata_name,)}
             )
 
-            kubectl.create_cluster_role_binding(
-                name=metadata_name,
-                labels=labels,
-            )
+            kubectl.create_cluster_role_binding(name=metadata_name, labels=labels)
             self.log.debug("Role binding created")
             cleanup_data.append(
                 {
@@ -160,9 +140,7 @@
                     "args": (metadata_name,),
                 }
             )
-            token, client_cert_data = await kubectl.get_secret_data(
-                metadata_name,
-            )
+            token, client_cert_data = await kubectl.get_secret_data(metadata_name)
 
             default_storage_class = kubectl.get_default_storage_class()
             self.log.debug("Default storage class: {}".format(default_storage_class))
@@ -204,10 +182,7 @@
     async def repo_list(self):
         raise MethodNotImplemented()
 
-    async def repo_remove(
-        self,
-        name: str,
-    ):
+    async def repo_remove(self, name: str):
         raise MethodNotImplemented()
 
     async def synchronize_repos(self, cluster_uuid: str, name: str):
@@ -418,11 +393,7 @@
         return True
 
     async def get_scale_count(
-        self,
-        resource_name: str,
-        kdu_instance: str,
-        namespace: str = None,
-        **kwargs,
+        self, resource_name: str, kdu_instance: str, namespace: str = None, **kwargs
     ) -> int:
         """Get an application scale count
 
@@ -494,10 +465,7 @@
     """Rollback"""
 
     async def rollback(
-        self,
-        cluster_uuid: str,
-        kdu_instance: str,
-        revision: int = 0,
+        self, cluster_uuid: str, kdu_instance: str, revision: int = 0
     ) -> str:
         """Rollback a model
 
@@ -514,11 +482,7 @@
     """Deletion"""
 
     async def uninstall(
-        self,
-        cluster_uuid: str,
-        kdu_instance: str,
-        namespace: str = None,
-        **kwargs,
+        self, cluster_uuid: str, kdu_instance: str, namespace: str = None, **kwargs
     ) -> bool:
         """Uninstall a KDU instance
 
@@ -658,10 +622,7 @@
 
     """Introspection"""
 
-    async def inspect_kdu(
-        self,
-        kdu_model: str,
-    ) -> dict:
+    async def inspect_kdu(self, kdu_model: str) -> dict:
         """Inspect a KDU
 
         Inspects a bundle and returns a dictionary of config parameters and
@@ -703,10 +664,7 @@
 
         return kdu
 
-    async def help_kdu(
-        self,
-        kdu_model: str,
-    ) -> str:
+    async def help_kdu(self, kdu_model: str) -> str:
         """View the README
 
                 If available, returns the README of the bundle.
@@ -772,9 +730,7 @@
         return status
 
     async def add_relation(
-        self,
-        provider: RelationEndpoint,
-        requirer: RelationEndpoint,
+        self, provider: RelationEndpoint, requirer: RelationEndpoint
     ):
         """
         Add relation between two charmed endpoints
@@ -785,7 +741,7 @@
         self.log.debug(f"adding new relation between {provider} and {requirer}")
         cross_model_relation = (
             provider.model_name != requirer.model_name
-            or requirer.vca_id != requirer.vca_id
+            or provider.vca_id != requirer.vca_id
         )
         try:
             if cross_model_relation:
@@ -798,9 +754,7 @@
                         requirer.model_name, offer, provider_libjuju
                     )
                     await requirer_libjuju.add_relation(
-                        requirer.model_name,
-                        requirer.endpoint,
-                        saas_name,
+                        requirer.model_name, requirer.endpoint, saas_name
                     )
             else:
                 # Standard relation
@@ -921,10 +875,7 @@
         """
         return "cred-{}".format(cluster_uuid)
 
-    def get_namespace(
-        self,
-        cluster_uuid: str,
-    ) -> str:
+    def get_namespace(self, cluster_uuid: str) -> str:
         """Get the namespace UUID
         Gets the namespace's unique name
 
@@ -961,12 +912,7 @@
             return self.libjuju
         else:
             vca_connection = await get_connection(self._store, vca_id)
-            return Libjuju(
-                vca_connection,
-                loop=self.loop,
-                log=self.log,
-                n2vc=self,
-            )
+            return Libjuju(vca_connection, loop=self.loop, log=self.log, n2vc=self)
 
     def _get_kubectl(self, credentials: str) -> Kubectl:
         """
diff --git a/n2vc/n2vc_juju_conn.py b/n2vc/n2vc_juju_conn.py
index 64e338c..2c2f6af 100644
--- a/n2vc/n2vc_juju_conn.py
+++ b/n2vc/n2vc_juju_conn.py
@@ -76,12 +76,7 @@
 
         # parent class constructor
         N2VCConnector.__init__(
-            self,
-            db=db,
-            fs=fs,
-            log=log,
-            loop=loop,
-            on_update_db=on_update_db,
+            self, db=db, fs=fs, log=log, loop=loop, on_update_db=on_update_db
         )
 
         # silence websocket traffic log
@@ -227,10 +222,7 @@
         # create or reuse a new juju machine
         try:
             if not await libjuju.model_exists(model_name):
-                await libjuju.add_model(
-                    model_name,
-                    libjuju.vca_connection.lxd_cloud,
-                )
+                await libjuju.add_model(model_name, libjuju.vca_connection.lxd_cloud)
             machine, new = await libjuju.create_machine(
                 model_name=model_name,
                 machine_id=machine_id,
@@ -256,9 +248,7 @@
             raise N2VCException(message=message)
 
         # new machine credentials
-        credentials = {
-            "hostname": machine.dns_name,
-        }
+        credentials = {"hostname": machine.dns_name}
 
         self.log.info(
             "Execution environment created. ee_id: {}, credentials: {}".format(
@@ -338,10 +328,7 @@
         # register machine on juju
         try:
             if not await libjuju.model_exists(model_name):
-                await libjuju.add_model(
-                    model_name,
-                    libjuju.vca_connection.lxd_cloud,
-                )
+                await libjuju.add_model(model_name, libjuju.vca_connection.lxd_cloud)
             machine_id = await libjuju.provision_machine(
                 model_name=model_name,
                 hostname=hostname,
@@ -565,10 +552,7 @@
         _, ns_id, _, _, _ = self._get_namespace_components(namespace=namespace)
         model_name = "{}-k8s".format(ns_id)
         if not await libjuju.model_exists(model_name):
-            await libjuju.add_model(
-                model_name,
-                libjuju.vca_connection.k8s_cloud,
-            )
+            await libjuju.add_model(model_name, libjuju.vca_connection.k8s_cloud)
         application_name = self._get_application_name(namespace)
 
         try:
@@ -587,9 +571,7 @@
 
         self.log.info("K8s proxy charm installed")
         ee_id = N2VCJujuConnector._build_ee_id(
-            model_name=model_name,
-            application_name=application_name,
-            machine_id="k8s",
+            model_name=model_name, application_name=application_name, machine_id="k8s"
         )
 
         self._write_ee_id_db(db_dict=db_dict, ee_id=ee_id)
@@ -718,9 +700,7 @@
         return await libjuju.get_metrics(model_name, application_name)
 
     async def add_relation(
-        self,
-        provider: RelationEndpoint,
-        requirer: RelationEndpoint,
+        self, provider: RelationEndpoint, requirer: RelationEndpoint
     ):
         """
         Add relation between two charmed endpoints
@@ -731,7 +711,7 @@
         self.log.debug(f"adding new relation between {provider} and {requirer}")
         cross_model_relation = (
             provider.model_name != requirer.model_name
-            or requirer.vca_id != requirer.vca_id
+            or provider.vca_id != requirer.vca_id
         )
         try:
             if cross_model_relation:
@@ -744,9 +724,7 @@
                         requirer.model_name, offer, provider_libjuju
                     )
                     await requirer_libjuju.add_relation(
-                        requirer.model_name,
-                        requirer.endpoint,
-                        saas_name,
+                        requirer.model_name, requirer.endpoint, saas_name
                     )
             else:
                 # Standard relation
@@ -886,8 +864,7 @@
             if not scaling_in:
                 # destroy the model
                 await libjuju.destroy_model(
-                    model_name=model_name,
-                    total_timeout=total_timeout,
+                    model_name=model_name, total_timeout=total_timeout
                 )
             elif vca_type == "native_charm" and scaling_in:
                 # destroy the unit in the application
@@ -991,8 +968,7 @@
                     config=params_dict,
                 )
                 actions = await libjuju.get_actions(
-                    application_name=application_name,
-                    model_name=model_name,
+                    application_name=application_name, model_name=model_name
                 )
                 self.log.debug(
                     "Application {} has these actions: {}".format(
@@ -1177,12 +1153,7 @@
             return self.libjuju
         else:
             vca_connection = await get_connection(self._store, vca_id)
-            return Libjuju(
-                vca_connection,
-                loop=self.loop,
-                log=self.log,
-                n2vc=self,
-            )
+            return Libjuju(vca_connection, loop=self.loop, log=self.log, n2vc=self)
 
     def _write_ee_id_db(self, db_dict: dict, ee_id: str):
 
diff --git a/n2vc/tests/unit/test_k8s_juju_conn.py b/n2vc/tests/unit/test_k8s_juju_conn.py
index 6119d50..ead7b53 100644
--- a/n2vc/tests/unit/test_k8s_juju_conn.py
+++ b/n2vc/tests/unit/test_k8s_juju_conn.py
@@ -21,10 +21,7 @@
 from n2vc.k8s_juju_conn import K8sJujuConnector, RBAC_LABEL_KEY_NAME
 from osm_common import fslocal
 from .utils import kubeconfig, FakeModel, FakeFileWrapper, AsyncMock, FakeApplication
-from n2vc.exceptions import (
-    MethodNotImplemented,
-    K8sException,
-)
+from n2vc.exceptions import MethodNotImplemented, K8sException
 from n2vc.vca.connection_data import ConnectionData
 
 
@@ -255,10 +252,7 @@
         )
         self.k8s_juju_conn.libjuju.add_model.assert_called_once()
         self.k8s_juju_conn.libjuju.deploy.assert_called_once_with(
-            self.cs_bundle,
-            model_name=self.default_namespace,
-            wait=True,
-            timeout=1800,
+            self.cs_bundle, model_name=self.default_namespace, wait=True, timeout=1800
         )
 
     def test_success_http(self, mock_chdir):
@@ -275,10 +269,7 @@
         )
         self.k8s_juju_conn.libjuju.add_model.assert_called_once()
         self.k8s_juju_conn.libjuju.deploy.assert_called_once_with(
-            self.http_bundle,
-            model_name=self.default_namespace,
-            wait=True,
-            timeout=1800,
+            self.http_bundle, model_name=self.default_namespace, wait=True, timeout=1800
         )
 
     def test_success_not_kdu_name(self, mock_chdir):
@@ -294,10 +285,7 @@
         )
         self.k8s_juju_conn.libjuju.add_model.assert_called_once()
         self.k8s_juju_conn.libjuju.deploy.assert_called_once_with(
-            self.cs_bundle,
-            model_name=self.default_namespace,
-            wait=True,
-            timeout=1800,
+            self.cs_bundle, model_name=self.default_namespace, wait=True, timeout=1800
         )
 
     def test_missing_db_dict(self, mock_chdir):
@@ -333,10 +321,7 @@
         )
         self.k8s_juju_conn.libjuju.add_model.assert_called_once()
         self.k8s_juju_conn.libjuju.deploy.assert_called_once_with(
-            self.cs_bundle,
-            model_name=self.default_namespace,
-            wait=True,
-            timeout=1800,
+            self.cs_bundle, model_name=self.default_namespace, wait=True, timeout=1800
         )
 
     def test_missing_bundle(self, mock_chdir):
@@ -759,14 +744,16 @@
         self.k8s_juju_conn.libjuju.get_controller = AsyncMock()
         self.k8s_juju_conn.libjuju.consume = AsyncMock()
 
-    def test_standard_relation(self):
-        relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint")
-        relation_endpoint_2 = RelationEndpoint("model-1.app2.1", None, "endpoint")
+    def test_standard_relation_same_model_and_controller(self):
+        relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint1")
+        relation_endpoint_2 = RelationEndpoint("model-1.app2.1", None, "endpoint2")
         self.loop.run_until_complete(
             self.k8s_juju_conn.add_relation(relation_endpoint_1, relation_endpoint_2)
         )
         self.k8s_juju_conn.libjuju.add_relation.assert_called_once_with(
-            model_name="model-1", endpoint_1="app1:endpoint", endpoint_2="app2:endpoint"
+            model_name="model-1",
+            endpoint_1="app1:endpoint1",
+            endpoint_2="app2:endpoint2",
         )
         self.k8s_juju_conn.libjuju.offer.assert_not_called()
         self.k8s_juju_conn.libjuju.consume.assert_not_called()
@@ -786,6 +773,24 @@
             "model-2", "app2:endpoint", "saas"
         )
 
+    def test_cmr_relation_different_controller(self):
+        self.k8s_juju_conn._get_libjuju = AsyncMock(
+            return_value=self.k8s_juju_conn.libjuju
+        )
+        relation_endpoint_1 = RelationEndpoint("model-1.app1.0", "vca-id-1", "endpoint")
+        relation_endpoint_2 = RelationEndpoint("model-1.app2.1", "vca-id-2", "endpoint")
+        offer = Offer("admin/model-1.app1")
+        self.k8s_juju_conn.libjuju.offer.return_value = offer
+        self.k8s_juju_conn.libjuju.consume.return_value = "saas"
+        self.loop.run_until_complete(
+            self.k8s_juju_conn.add_relation(relation_endpoint_1, relation_endpoint_2)
+        )
+        self.k8s_juju_conn.libjuju.offer.assert_called_once_with(relation_endpoint_1)
+        self.k8s_juju_conn.libjuju.consume.assert_called_once()
+        self.k8s_juju_conn.libjuju.add_relation.assert_called_once_with(
+            "model-1", "app2:endpoint", "saas"
+        )
+
     def test_relation_exception(self):
         relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint")
         relation_endpoint_2 = RelationEndpoint("model-2.app2.1", None, "endpoint")
diff --git a/n2vc/tests/unit/test_n2vc_juju_conn.py b/n2vc/tests/unit/test_n2vc_juju_conn.py
index 7606b4a..df7be50 100644
--- a/n2vc/tests/unit/test_n2vc_juju_conn.py
+++ b/n2vc/tests/unit/test_n2vc_juju_conn.py
@@ -40,10 +40,7 @@
     @asynctest.mock.patch("n2vc.n2vc_juju_conn.get_connection")
     @asynctest.mock.patch("n2vc.vca.connection_data.base64_to_cacert")
     def setUp(
-        self,
-        mock_base64_to_cacert=None,
-        mock_get_connection=None,
-        mock_store=None,
+        self, mock_base64_to_cacert=None, mock_get_connection=None, mock_store=None
     ):
         self.loop = asyncio.get_event_loop()
         self.db = Mock()
@@ -156,10 +153,7 @@
         "n2vc.n2vc_juju_conn.generate_random_alfanum_string",
         **{"return_value": "random"}
     )
-    def test_success(
-        self,
-        mock_generate_random_alfanum_string,
-    ):
+    def test_success(self, mock_generate_random_alfanum_string):
         self.n2vc.fs.file_exists = MagicMock(create_autospec=True)
         self.n2vc.fs.file_exists.return_value = True
         ee_id = self.loop.run_until_complete(
@@ -258,14 +252,16 @@
         self.n2vc.libjuju.get_controller = AsyncMock()
         self.n2vc.libjuju.consume = AsyncMock()
 
-    def test_standard_relation(self):
-        relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint")
-        relation_endpoint_2 = RelationEndpoint("model-1.app2.1", None, "endpoint")
+    def test_standard_relation_same_model_and_controller(self):
+        relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint1")
+        relation_endpoint_2 = RelationEndpoint("model-1.app2.1", None, "endpoint2")
         self.loop.run_until_complete(
             self.n2vc.add_relation(relation_endpoint_1, relation_endpoint_2)
         )
         self.n2vc.libjuju.add_relation.assert_called_once_with(
-            model_name="model-1", endpoint_1="app1:endpoint", endpoint_2="app2:endpoint"
+            model_name="model-1",
+            endpoint_1="app1:endpoint1",
+            endpoint_2="app2:endpoint2",
         )
         self.n2vc.libjuju.offer.assert_not_called()
         self.n2vc.libjuju.consume.assert_not_called()
@@ -285,6 +281,26 @@
             "model-2", "app2:endpoint", "saas"
         )
 
+    def test_cmr_relation_different_controller(self):
+        self.n2vc._get_libjuju = AsyncMock(return_value=self.n2vc.libjuju)
+        relation_endpoint_1 = RelationEndpoint(
+            "model-1.app1.0", "vca-id-1", "endpoint1"
+        )
+        relation_endpoint_2 = RelationEndpoint(
+            "model-1.app2.1", "vca-id-2", "endpoint2"
+        )
+        offer = Offer("admin/model-1.app1")
+        self.n2vc.libjuju.offer.return_value = offer
+        self.n2vc.libjuju.consume.return_value = "saas"
+        self.loop.run_until_complete(
+            self.n2vc.add_relation(relation_endpoint_1, relation_endpoint_2)
+        )
+        self.n2vc.libjuju.offer.assert_called_once_with(relation_endpoint_1)
+        self.n2vc.libjuju.consume.assert_called_once()
+        self.n2vc.libjuju.add_relation.assert_called_once_with(
+            "model-1", "app2:endpoint2", "saas"
+        )
+
     def test_relation_exception(self):
         relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint")
         relation_endpoint_2 = RelationEndpoint("model-2.app2.1", None, "endpoint")
@@ -469,7 +485,7 @@
                 "ee_id": None,
                 "application": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = ""
         vdu_count = ""
@@ -505,9 +521,7 @@
 
     def test_generate_application_name_vnf_charm(self):
         charm_level = "vnf-level"
-        vnfrs = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        vnfrs = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vca_records = [
             {
                 "target_element": "vnf/vnf1",
@@ -516,7 +530,7 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = "1"
         vdu_count = ""
@@ -639,9 +653,7 @@
         self,
     ):
         charm_level = "vdu-level"
-        vnfrs = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        vnfrs = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vca_records = [
             {
                 "target_element": "vnf/vnf1/mgmtVM",
@@ -654,7 +666,7 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = "2"
         vdu_count = "0"
@@ -671,9 +683,7 @@
 
     def test_generate_application_name_vdu_charm_given_vdu_id_is_none(self):
         charm_level = "vdu-level"
-        vnfrs = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        vnfrs = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vca_records = [
             {
                 "target_element": "vnf/vnf1/mgmtvVM",
@@ -686,7 +696,7 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = "2"
         vdu_count = "0"
@@ -705,9 +715,7 @@
         self,
     ):
         charm_level = "vdu-level"
-        vnfrs = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        vnfrs = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vca_records = [
             {
                 "target_element": "vnf/vnf1/mgmtVM",
@@ -720,7 +728,7 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = "2"
         vdu_count = "0"
@@ -737,9 +745,7 @@
 
     def test_generate_application_name_vdu_charm_vdu_id_in_vca_record_is_none(self):
         charm_level = "vdu-level"
-        vnfrs = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        vnfrs = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vca_records = [
             {
                 "target_element": "vnf/vnf1/mgmtVM",
@@ -752,7 +758,7 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vnf_count = "2"
         vdu_count = "0"
@@ -839,9 +845,9 @@
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         expected_result = [
             {
@@ -855,16 +861,14 @@
                 "ee_descriptor_id": "simple-ee-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vca_records = self.n2vc._get_vca_records(charm_level, db_nsr, db_vnfr)
         self.assertEqual(vca_records, expected_result)
 
     def test_get_vca_records_vnf_charm_member_vnf_index_mismatch(self):
         charm_level = "vnf-level"
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf222-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf222-xxx-yyy-zzz"}
         db_nsr = {
             "_admin": {
                 "deployed": {
@@ -893,9 +897,9 @@
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         expected_result = []
         vca_records = self.n2vc._get_vca_records(charm_level, db_nsr, db_vnfr)
@@ -903,9 +907,7 @@
 
     def test_get_vca_records_ns_charm(self):
         charm_level = "ns-level"
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf222-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf222-xxx-yyy-zzz"}
         db_nsr = {
             "_admin": {
                 "deployed": {
@@ -934,9 +936,9 @@
                             "charm_name": "simple-ns-charm-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         expected_result = [
             {
@@ -950,16 +952,14 @@
                 "ee_descriptor_id": "",
                 "charm_name": "simple-ns-charm-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vca_records = self.n2vc._get_vca_records(charm_level, db_nsr, db_vnfr)
         self.assertEqual(vca_records, expected_result)
 
     def test_get_vca_records_ns_charm_empty_charm_name(self):
         charm_level = "ns-level"
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf222-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf222-xxx-yyy-zzz"}
         db_nsr = {
             "_admin": {
                 "deployed": {
@@ -988,9 +988,9 @@
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         expected_result = [
             {
@@ -1004,7 +1004,7 @@
                 "ee_descriptor_id": "",
                 "charm_name": "",
                 "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-            },
+            }
         ]
         vca_records = self.n2vc._get_vca_records(charm_level, db_nsr, db_vnfr)
         self.assertEqual(vca_records, expected_result)
@@ -1039,14 +1039,12 @@
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vnf_count = "0"
         mock_vnf_count_and_record.return_value = (vnf_count, db_vnfr)
         expected_result = "simple-ee-ab-z0-vnf111-xxx-y-vnf"
@@ -1095,14 +1093,12 @@
                             "ee_descriptor_id": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf111-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf111-xxx-yyy-zzz"}
         vnf_count = "0"
         mock_vnf_count_and_record.return_value = (vnf_count, db_vnfr)
         expected_result = "app-vnf-eb3161eec0-z0-random"
@@ -1146,14 +1142,12 @@
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
-        db_vnfr = {
-            "member-vnf-index-ref": "vnf222-xxx-yyy-zzz",
-        }
+        db_vnfr = {"member-vnf-index-ref": "vnf222-xxx-yyy-zzz"}
         vnf_count = "0"
         mock_vnf_count_and_record.return_value = (vnf_count, db_vnfr)
         with patch.object(self.n2vc, "db", self.db), patch.object(
@@ -1246,16 +1240,13 @@
                             "application": "openldap-ee-z0-openldap-vdu",
                             "model": "82b11965-e580-47c0-9ee0-329f318a305b",
                             "config_sw_installed": True,
-                        },
+                        }
                     ]
                 }
             }
         }
         mock_vnf_count_and_record = MagicMock()
-        db_vnfr = {
-            "member-vnf-index-ref": "openldap",
-            "vdur": {},
-        }
+        db_vnfr = {"member-vnf-index-ref": "openldap", "vdur": {}}
         vnf_count = "0"
         mock_vnf_count_and_record.return_value = (vnf_count, db_vnfr)
         expected_result = "openldap-ee-z0-openldap-ldap-vdu"
@@ -1304,9 +1295,9 @@
                             "ee_descriptor_id": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
                         },
-                    ],
-                },
-            },
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
         db_vnfr = {
@@ -1348,10 +1339,10 @@
                             "ee_descriptor_id": "",
                             "charm_name": "simple-ns-charm-abc-000-rrrr-nnnn-4444-hhh-3333-yyyy-333-hhh-ttt-444",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-                        },
-                    ],
-                },
-            },
+                        }
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
         db_vnfr = {}
@@ -1384,10 +1375,10 @@
                             "ee_descriptor_id": "",
                             "charm_name": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-                        },
-                    ],
-                },
-            },
+                        }
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
         db_vnfr = {}
@@ -1423,10 +1414,10 @@
                             "vdu_name": "",
                             "ee_descriptor_id": "",
                             "model": "dbfbd751-3de4-4e68-bd40-ec5ae0a53898",
-                        },
-                    ],
-                },
-            },
+                        }
+                    ]
+                }
+            }
         }
         mock_vnf_count_and_record = MagicMock()
         db_vnfr = {}
