+
+
+class AddRelationTest(N2VCJujuConnTestCase):
+ def setUp(self):
+ super(AddRelationTest, self).setUp()
+ self.n2vc.libjuju.add_relation = AsyncMock()
+ self.n2vc.libjuju.offer = AsyncMock()
+ 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")
+ 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"
+ )
+ self.n2vc.libjuju.offer.assert_not_called()
+ self.n2vc.libjuju.consume.assert_not_called()
+
+ def test_cmr_relation_same_controller(self):
+ relation_endpoint_1 = RelationEndpoint("model-1.app1.0", None, "endpoint")
+ relation_endpoint_2 = RelationEndpoint("model-2.app2.1", None, "endpoint")
+ 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-2", "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")
+ self.n2vc.libjuju.offer.side_effect = Exception()
+ with self.assertRaises(N2VCException):
+ self.loop.run_until_complete(
+ self.n2vc.add_relation(relation_endpoint_1, relation_endpoint_2)
+ )
+
+
+class UpgradeCharmTest(N2VCJujuConnTestCase):
+ def setUp(self):
+ super(UpgradeCharmTest, self).setUp()
+ self.n2vc._get_libjuju = AsyncMock(return_value=self.n2vc.libjuju)
+ N2VCJujuConnector._get_ee_id_components = Mock()
+ self.n2vc.libjuju.upgrade_charm = AsyncMock()
+
+ def test_empty_ee_id(self):
+ with self.assertRaises(N2VCBadArgumentsException):
+ self.loop.run_until_complete(
+ self.n2vc.upgrade_charm(
+ "", "/sample_charm_path", "sample_charm_id", "native-charm", None
+ )
+ )
+ self.n2vc._get_libjuju.assert_called()
+ self.n2vc._get_ee_id_components.assert_not_called()
+ self.n2vc.libjuju.upgrade_charm.assert_not_called()
+
+ def test_wrong_ee_id(self):
+ N2VCJujuConnector._get_ee_id_components.side_effect = Exception
+ with self.assertRaises(N2VCBadArgumentsException):
+ self.loop.run_until_complete(
+ self.n2vc.upgrade_charm(
+ "ns-id-k8s.app-vnf-vnf-id-vdu-vdu-random.k8s",
+ "/sample_charm_path",
+ "sample_charm_id",
+ "native-charm",
+ 500,
+ )
+ )
+ self.n2vc._get_libjuju.assert_called()
+ self.n2vc._get_ee_id_components.assert_called()
+ self.n2vc.libjuju.upgrade_charm.assert_not_called()
+
+ def test_charm_upgrade_succeded(self):
+ N2VCJujuConnector._get_ee_id_components.return_value = (
+ "sample_model",
+ "sample_app",
+ "sample_machine_id",
+ )
+ self.loop.run_until_complete(
+ self.n2vc.upgrade_charm(
+ "ns-id-k8s.app-vnf-vnf-id-vdu-vdu-random.k8s",
+ "/sample_charm_path",
+ "sample_charm_id",
+ "native-charm",
+ 500,
+ )
+ )
+ self.n2vc._get_libjuju.assert_called()
+ self.n2vc._get_ee_id_components.assert_called()
+ self.n2vc.libjuju.upgrade_charm.assert_called_with(
+ application_name="sample_app",
+ path="/sample_charm_path",
+ model_name="sample_model",
+ total_timeout=500,
+ )
+
+ def test_charm_upgrade_failed(self):
+ N2VCJujuConnector._get_ee_id_components.return_value = (
+ "sample_model",
+ "sample_app",
+ "sample_machine_id",
+ )
+ self.n2vc.libjuju.upgrade_charm.side_effect = JujuApplicationNotFound
+ with self.assertRaises(N2VCException):
+ self.loop.run_until_complete(
+ self.n2vc.upgrade_charm(
+ "ns-id-k8s.app-vnf-vnf-id-vdu-vdu-random.k8s",
+ "/sample_charm_path",
+ "sample_charm_id",
+ "native-charm",
+ None,
+ )
+ )
+ self.n2vc._get_libjuju.assert_called()
+ self.n2vc._get_ee_id_components.assert_called()
+ self.n2vc.libjuju.upgrade_charm.assert_called_with(
+ application_name="sample_app",
+ path="/sample_charm_path",
+ model_name="sample_model",
+ total_timeout=None,
+ )