67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
# Copyright 2021 James Page
|
|
# See LICENSE file for licensing details.
|
|
#
|
|
# Learn more about testing at: https://juju.is/docs/sdk/testing
|
|
|
|
import unittest
|
|
from unittest.mock import Mock
|
|
|
|
from charm import CharmCinderOperatorCharm
|
|
from ops.model import ActiveStatus
|
|
from ops.testing import Harness
|
|
|
|
|
|
class TestCharm(unittest.TestCase):
|
|
def setUp(self):
|
|
self.harness = Harness(CharmCinderOperatorCharm)
|
|
self.addCleanup(self.harness.cleanup)
|
|
self.harness.begin()
|
|
|
|
def test_config_changed(self):
|
|
self.assertEqual(list(self.harness.charm._stored.things), [])
|
|
self.harness.update_config({"thing": "foo"})
|
|
self.assertEqual(list(self.harness.charm._stored.things), ["foo"])
|
|
|
|
def test_action(self):
|
|
# the harness doesn't (yet!) help much with actions themselves
|
|
action_event = Mock(params={"fail": ""})
|
|
self.harness.charm._on_fortune_action(action_event)
|
|
|
|
self.assertTrue(action_event.set_results.called)
|
|
|
|
def test_action_fail(self):
|
|
action_event = Mock(params={"fail": "fail this"})
|
|
self.harness.charm._on_fortune_action(action_event)
|
|
|
|
self.assertEqual(action_event.fail.call_args, [("fail this",)])
|
|
|
|
def test_httpbin_pebble_ready(self):
|
|
# Check the initial Pebble plan is empty
|
|
initial_plan = self.harness.get_container_pebble_plan("httpbin")
|
|
self.assertEqual(initial_plan.to_yaml(), "{}\n")
|
|
# Expected plan after Pebble ready with default config
|
|
expected_plan = {
|
|
"services": {
|
|
"httpbin": {
|
|
"override": "replace",
|
|
"summary": "httpbin",
|
|
"command": "gunicorn -b 0.0.0.0:80 httpbin:app -k gevent",
|
|
"startup": "enabled",
|
|
"environment": {"thing": "🎁"},
|
|
}
|
|
},
|
|
}
|
|
# Get the httpbin container from the model
|
|
container = self.harness.model.unit.get_container("httpbin")
|
|
# Emit the PebbleReadyEvent carrying the httpbin container
|
|
self.harness.charm.on.httpbin_pebble_ready.emit(container)
|
|
# Get the plan now we've run PebbleReady
|
|
updated_plan = self.harness.get_container_pebble_plan("httpbin").to_dict()
|
|
# Check we've got the plan we expected
|
|
self.assertEqual(expected_plan, updated_plan)
|
|
# Check the service was started
|
|
service = self.harness.model.unit.get_container("httpbin").get_service("httpbin")
|
|
self.assertTrue(service.is_running())
|
|
# Ensure we set an ActiveStatus with no message
|
|
self.assertEqual(self.harness.model.unit.status, ActiveStatus())
|