Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_update_relation_no_local_app_change_event(self):
# language=YAML
harness = Harness(CharmBase, meta='''
name: my-charm
requires:
db:
interface: pgsql
''')
self.addCleanup(harness.cleanup)
harness.begin()
harness.set_leader(False)
helper = DBRelationChangedHelper(harness.charm, "helper")
rel_id = harness.add_relation('db', 'postgresql')
# TODO: remove this as soon as https://github.com/canonical/operator/issues/175 is fixed.
harness.add_relation_unit(rel_id, 'postgresql/0')
self.assertEqual(helper.changes, [])
harness.update_relation_data(rel_id, 'my-charm', {'new': 'value'})
rel = harness.charm.model.get_relation('db')
def test_relation_set_deletes(self):
harness = Harness(CharmBase, meta='''
name: test-charm
requires:
db:
interface: pgsql
''')
self.addCleanup(harness.cleanup)
harness.begin()
harness.set_leader(False)
rel_id = harness.add_relation('db', 'postgresql')
harness.update_relation_data(rel_id, 'test-charm/0', {'foo': 'bar'})
harness.add_relation_unit(rel_id, 'postgresql/0')
rel = harness.charm.model.get_relation('db', rel_id)
del rel.data[harness.charm.model.unit]['foo']
self.assertEqual({}, harness.get_relation_data(rel_id, 'test-charm/0'))
def test_add_relation_and_unit(self):
harness = Harness(CharmBase, meta='''
name: test-app
requires:
db:
interface: pgsql
''')
self.addCleanup(harness.cleanup)
rel_id = harness.add_relation('db', 'postgresql')
self.assertIsInstance(rel_id, int)
harness.add_relation_unit(rel_id, 'postgresql/0')
harness.update_relation_data(rel_id, 'postgresql/0', {'foo': 'bar'})
backend = harness._backend
self.assertEqual(backend.relation_ids('db'), [rel_id])
self.assertEqual(backend.relation_list(rel_id), ['postgresql/0'])
self.assertEqual(
backend.relation_get(rel_id, 'postgresql/0', is_app=False),
{'foo': 'bar'})
def test_status_set_get_app(self):
harness = Harness(CharmBase, meta='''
name: app
''')
self.addCleanup(harness.cleanup)
backend = harness._backend
backend.status_set('blocked', 'message', is_app=True)
self.assertEqual(
backend.status_get(is_app=True),
{'status': 'blocked', 'message': 'message'})
self.assertEqual(
backend.status_get(is_app=False),
{'status': 'maintenance', 'message': ''})
def test_add_resource_but_oci(self):
harness = Harness(CharmBase, meta='''
name: test-app
resources:
image:
type: oci-image
description: "Image to deploy."
''')
self.addCleanup(harness.cleanup)
with self.assertRaises(RuntimeError):
harness.add_resource('image', 'content')
def test_relation_list_unknown_relation_id(self):
harness = Harness(CharmBase, meta='''
name: test-charm
''')
self.addCleanup(harness.cleanup)
backend = harness._backend
with self.assertRaises(RelationNotFoundError):
backend.relation_list(1234)
def test_add_resource_unknown(self):
harness = Harness(CharmBase, meta='''
name: test-app
resources:
image:
type: file
description: "Image to deploy."
''')
self.addCleanup(harness.cleanup)
with self.assertRaises(RuntimeError):
harness.add_resource('unknown', 'content')
def test_set_model_name_after_begin(self):
harness = Harness(CharmBase, meta='''
name: test-charm
''')
self.addCleanup(harness.cleanup)
harness.set_model_name('bar')
harness.begin()
with self.assertRaises(RuntimeError):
harness.set_model_name('foo')
self.assertEqual(harness.model.name, 'bar')
def test_add_resource_unknown_filename(self):
harness = Harness(CharmBase, meta='''
name: test-app
resources:
image:
type: file
description: "Image to deploy."
''')
self.addCleanup(harness.cleanup)
harness.add_resource('image', 'foo contents\n')
path = harness.model.resources.fetch('image')
self.assertTrue(
str(path).endswith('/image/image'),
msg='expected {} to end with /image/image')
def test_add_resource_string(self):
harness = Harness(CharmBase, meta='''
name: test-app
resources:
image:
type: file
filename: foo.txt
description: "Image to deploy."
''')
self.addCleanup(harness.cleanup)
harness.add_resource('image', 'foo contents\n')
path = harness.model.resources.fetch('image')
self.assertTrue(
str(path).endswith('/image/foo.txt'),
msg='expected {} to end with /image/foo.zip')
with path.open('rt') as f:
self.assertEqual('foo contents\n', f.read())