charmed-lma / charm-k8s-prometheus

Kubernetes Operator for Prometheus
Apache License 2.0
4 stars 2 forks source link

KeyError: 'JUJU_MODEL_NAME' if Harness-backed test is executed #17

Closed exceptorr closed 4 years ago

exceptorr commented 4 years ago

Originally inspired by https://github.com/canonical/operator/issues/309

======================================================================== FAILURES ========================================================================
_____________________________________________ OnConfigChangedHandlerTest.test__it_blocks_until_pod_is_ready ______________________________________________

self = <charm_test.OnConfigChangedHandlerTest testMethod=test__it_blocks_until_pod_is_ready>, mock_pod_spec = <function set_juju_pod_spec at 0x10b794200>
mock_juju_pod_spec = <function build_juju_pod_spec at 0x10b794950>, mock_time = <NonCallableMagicMock name='time' spec_set='module' id='4487497232'>
mock_k8s_mod = <NonCallableMagicMock name='k8s' spec_set='module' id='4482352976'>
mock_build_juju_unit_status_func = <function build_juju_unit_status at 0x10b7a5290>

    @patch('charm.build_juju_unit_status', spec_set=True, autospec=True)
    @patch('charm.k8s', spec_set=True, autospec=True)
    @patch('charm.time', spec_set=True, autospec=True)
    @patch('charm.build_juju_pod_spec', spec_set=True, autospec=True)
    @patch('charm.set_juju_pod_spec', spec_set=True, autospec=True)
    def test__it_blocks_until_pod_is_ready(
            self,
            mock_pod_spec,
            mock_juju_pod_spec,
            mock_time,
            mock_k8s_mod,
            mock_build_juju_unit_status_func):
        # Setup
        mock_fw_adapter_cls = \
            create_autospec(framework.FrameworkAdapter, spec_set=True)
        mock_fw_adapter = mock_fw_adapter_cls.return_value

        mock_juju_unit_states = [
            MaintenanceStatus(str(uuid4())),
            MaintenanceStatus(str(uuid4())),
            ActiveStatus(str(uuid4())),
        ]
        mock_build_juju_unit_status_func.side_effect = mock_juju_unit_states

        mock_event_cls = create_autospec(EventBase, spec_set=True)
        mock_event = mock_event_cls.return_value

        harness = Harness(charm.Charm)
        harness.begin()
        harness.charm._stored.set_default(is_started=False)
>       harness.charm.on.config_changed.emit()

test/charm_test.py:99:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
lib/ops/framework.py:207: in emit
    framework._emit(event)
lib/ops/framework.py:714: in _emit
    self._reemit(event_path)
lib/ops/framework.py:757: in _reemit
    custom_handler(event)
src/charm.py:74: in on_config_changed
    on_config_changed_handler(event, self.fw_adapter, self._stored)
src/charm.py:96: in on_config_changed_handler
    juju_model = fw_adapter.get_model_name()
src/adapters/framework.py:88: in get_model_name
    return os.environ["JUJU_MODEL_NAME"]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = environ({'TMPDIR': '/var/folders/ch/ptmqpg6d4rjbmlgh_6smvrxm0000gn/T/', 'PATH': '/Users/vgrevtsev/Canonical/charm-k8s-...', 'PYTEST_CURRENT_TEST': 'test/charm_test.py::OnConfigChangedHandlerTest::test__it_blocks_until_pod_is_ready (call)'})
key = 'JUJU_MODEL_NAME'

    def __getitem__(self, key):
        try:
            value = self._data[self.encodekey(key)]
        except KeyError:
            # raise KeyError with the original key value
>           raise KeyError(key) from None
E           KeyError: 'JUJU_MODEL_NAME'

/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py:681: KeyError

---------- coverage: platform darwin, python 3.7.7-final-0 -----------
Name                        Stmts   Miss Branch BrPart  Cover
-------------------------------------------------------------
src/adapters/framework.py      58      4      6      0    94%
src/adapters/k8s.py            43      1     10      2    94%
src/charm.py                   73     36     10      1    48%
src/domain.py                 108     10     42      9    87%
src/exceptions.py               5      1      0      0    80%
src/interface_http.py          26      7      2      0    68%
-------------------------------------------------------------
TOTAL                         313     59     70     12    79%
Coverage HTML written to dir coverage-report

================================================================ short test summary info =================================================================
FAILED test/charm_test.py::OnConfigChangedHandlerTest::test__it_blocks_until_pod_is_ready - KeyError: 'JUJU_MODEL_NAME'
exceptorr commented 4 years ago

Resolved with #16