Skip to content

Commit

Permalink
fix: add pebble log targets and checks to testing plan (#1111)
Browse files Browse the repository at this point in the history
Issue: adding a layer with checks or log-targets isn't reflected
in the plan you obtain when testing through get_plan()

solution: make it reflect
  • Loading branch information
PietroPasotti committed Jan 30, 2024
1 parent dc47640 commit 4678130
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 6 deletions.
26 changes: 20 additions & 6 deletions ops/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2936,18 +2936,32 @@ def _render_services(self) -> Dict[str, pebble.Service]:
for key in sorted(self._layers.keys()):
layer = self._layers[key]
for name, service in layer.services.items():
# TODO: (jam) 2021-04-07 have a way to merge existing services
# TODO: merge existing services https://github.com/canonical/operator/issues/1112
services[name] = service
return services

def _render_checks(self) -> Dict[str, pebble.Check]:
checks: Dict[str, pebble.Check] = {}
for key in sorted(self._layers.keys()):
layer = self._layers[key]
for name, check in layer.checks.items():
checks[name] = check
return checks

def _render_log_targets(self) -> Dict[str, pebble.LogTarget]:
log_targets: Dict[str, pebble.LogTarget] = {}
for key in sorted(self._layers.keys()):
layer = self._layers[key]
for name, log_target in layer.log_targets.items():
log_targets[name] = log_target
return log_targets

def get_plan(self) -> pebble.Plan:
self._check_connection()
plan = pebble.Plan('{}')
services = self._render_services()
if not services:
return plan
for name in sorted(services.keys()):
plan.services[name] = services[name]
plan.services.update(self._render_services())
plan.checks.update(self._render_checks())
plan.log_targets.update(self._render_log_targets())
return plan

def get_services(self, names: Optional[List[str]] = None) -> List[pebble.ServiceInfo]:
Expand Down
33 changes: 33 additions & 0 deletions test/test_testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2798,6 +2798,39 @@ def test_get_pebble_container_plan(self):
harness_plan = harness.get_container_pebble_plan('foo')
self.assertEqual(harness_plan.to_yaml(), plan.to_yaml())

def test_add_layer_with_log_targets_to_plan(self):
layer_yaml = '''\
services:
foo:
override: replace
command: echo foo
checks:
bar:
http:
https://example.com/
log-targets:
baz:
override: replace
type: loki
location: https://example.com:3100/loki/api/v1/push
'''
harness = ops.testing.Harness(ops.CharmBase, meta=yaml.safe_dump(
{'name': 'foo', "containers": {"consumer": {"type": "oci-image"}}}))
harness.begin()
harness.set_can_connect('consumer', True)

container = harness.charm.unit.containers["consumer"]
layer = pebble.Layer(layer_yaml)
container.add_layer('foo', layer)

plan = container.get_plan()

self.assertIsNotNone(plan.services.get('foo'))
self.assertIsNotNone(plan.checks.get('bar'))
self.assertIsNotNone(plan.log_targets.get('baz'))

def test_get_pebble_container_plan_unknown(self):
harness = ops.testing.Harness(ops.CharmBase, meta='''
name: test-app
Expand Down

0 comments on commit 4678130

Please sign in to comment.