import json import sys sys.path.append('lib') # noqa sys.path.append('src') # noqa from unittest import ( TestCase, ) from ops.framework import Object from ops.charm import CharmBase from ops.testing import Harness import interface_manila_plugin class TestReceiver(Object): def __init__(self, parent, key): super().__init__(parent, key) self.observed_events = [] def on_manila_plugin_ready(self, event): self.observed_events.append(event) class TestManilaPluginProvides(TestCase): def setUp(self): self.harness = Harness(CharmBase, meta=''' name: manila-netapp provides: manila-plugin: interface: manila-plugin scope: container ''') self.addCleanup(self.harness.cleanup) def test_on_changed(self): self.harness.begin() self.harness.charm.manila_plugin = \ interface_manila_plugin.ManilaPluginProvides( self.harness.charm, 'manila-plugin') receiver = TestReceiver(self.harness.framework, 'receiver') self.harness.framework.observe( self.harness.charm.manila_plugin.on.manila_plugin_ready, receiver.on_manila_plugin_ready) rel_id = self.harness.add_relation('manila-plugin', 'manila') self.harness.add_relation_unit(rel_id, 'manila/0') self.harness.update_relation_data( rel_id, 'manila/0', { '_authentication_data': json.dumps({ 'data': 'test-manila-auth-data' }) }) self.assertEqual( self.harness.charm.manila_plugin.authentication_data, 'test-manila-auth-data') self.assertEqual(len(receiver.observed_events), 1) self.assertIsInstance( receiver.observed_events[0], interface_manila_plugin.ManilaPluginReadyEvent) def test_send_backend_config(self): self.harness.begin() self.harness.charm.manila_plugin = \ interface_manila_plugin.ManilaPluginProvides( self.harness.charm, 'manila-plugin') rel_id = self.harness.add_relation('manila-plugin', 'manila') self.harness.add_relation_unit(rel_id, 'manila/0') self.harness.update_relation_data( rel_id, 'manila/0', { '_authentication_data': json.dumps({ 'data': 'test-manila-auth-data' }) }) self.harness.charm.manila_plugin.send_backend_config( 'test-backend-name', 'test-rendered-configs') rel_unit_data = self.harness.get_relation_data( rel_id, self.harness.charm.manila_plugin.this_unit.name) self.assertEqual( rel_unit_data.get('_name'), 'test-backend-name') expected_data = { 'data': { interface_manila_plugin.MANILA_CONF: 'test-rendered-configs' } } self.assertEqual( rel_unit_data.get('_configuration_data'), json.dumps(expected_data))