+ def test_on_keystone_app_relation_changed(self) -> NoReturn:
+ """Test to see if keystone relation is updated."""
+ self.harness.update_config({"auth_backend": "keystone"})
+
+ self.harness.charm.on.start.emit()
+
+ self.assertIsNone(self.harness.charm.state.keystone_host)
+ self.assertIsNone(self.harness.charm.state.keystone_port)
+ self.assertIsNone(self.harness.charm.state.keystone_user_domain_name)
+ self.assertIsNone(self.harness.charm.state.keystone_project_domain_name)
+ self.assertIsNone(self.harness.charm.state.keystone_username)
+ self.assertIsNone(self.harness.charm.state.keystone_password)
+ self.assertIsNone(self.harness.charm.state.keystone_service)
+
+ relation_id = self.harness.add_relation("keystone", "keystone")
+ self.harness.add_relation_unit(relation_id, "keystone/0")
+ self.harness.update_relation_data(
+ relation_id,
+ "keystone",
+ {
+ "host": "keystone",
+ "port": 5000,
+ "user_domain_name": "default",
+ "project_domain_name": "default",
+ "username": "nbi",
+ "password": "nbi",
+ "service": "service",
+ },
+ )
+
+ self.assertEqual(self.harness.charm.state.keystone_host, "keystone")
+ self.assertEqual(self.harness.charm.state.keystone_port, 5000)
+ self.assertEqual(self.harness.charm.state.keystone_user_domain_name, "default")
+ self.assertEqual(
+ self.harness.charm.state.keystone_project_domain_name, "default"
+ )
+ self.assertEqual(self.harness.charm.state.keystone_username, "nbi")
+ self.assertEqual(self.harness.charm.state.keystone_password, "nbi")
+ self.assertEqual(self.harness.charm.state.keystone_service, "service")
+
+ # Verifying status
+ self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
+
+ # Verifying status message
+ self.assertGreater(len(self.harness.charm.unit.status.message), 0)
+ self.assertTrue(
+ self.harness.charm.unit.status.message.startswith("Waiting for ")
+ )
+ self.assertIn("kafka", self.harness.charm.unit.status.message)
+ self.assertIn("mongodb", self.harness.charm.unit.status.message)
+ self.assertIn("prometheus", self.harness.charm.unit.status.message)
+ self.assertNotIn("keystone", self.harness.charm.unit.status.message)
+ self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
+