def setUpClass(cls): cls.test_db_dir = tempfile.mkdtemp() test_db = os.path.join(cls.test_db_dir, 'test-state.db') unitdata._KV = cls.kv = unitdata.Storage(test_db) cls._log = mock.patch('charmhelpers.core.hookenv.log') cls.log = cls._log.start() cls._charm_dir = mock.patch('charmhelpers.core.hookenv.charm_dir', lambda: 'charm_dir') cls._charm_dir.start() if not hasattr(cls, 'assertItemsEqual'): cls.assertItemsEqual = cls.assertCountEqual
def setUpClass(cls): cls.test_db_dir = tempfile.mkdtemp() test_db = os.path.join(cls.test_db_dir, 'test-state.db') unitdata._KV = cls.kv = unitdata.Storage(test_db) if not hasattr(cls, 'assertItemsEqual'): cls.assertItemsEqual = cls.assertCountEqual
def mock_unit_db(monkeypatch): """Mock the key value store.""" mock_kv = mock.Mock() mock_kv.return_value = unitdata.Storage(path=":memory:") monkeypatch.setattr("libwireguard.unitdata.kv", mock_kv)
def setUp(self): tests_dir = Path(__file__).parent tf = tempfile.NamedTemporaryFile(delete=False) tf.close() self.test_db = Path(tf.name) unitdata._KV = self.kv = unitdata.Storage(str(self.test_db)) self.log_p = mock.patch('charmhelpers.core.hookenv.log') self.log_p.start() self.charm_dir = str(tests_dir / 'data') self.charm_dir_p = mock.patch('charmhelpers.core.hookenv.charm_dir') mcharm_dir = self.charm_dir_p.start() mcharm_dir.side_effect = lambda: self.charm_dir self.hook_name = 'upgrade-charm' self.hook_name_p = mock.patch('charmhelpers.core.hookenv.hook_name') mhook_name = self.hook_name_p.start() mhook_name.side_effect = lambda: self.hook_name self.local_unit_p = mock.patch('charmhelpers.core.hookenv.local_unit', mock.MagicMock(return_value='local/0')) self.local_unit_p.start() self.app_name_p = mock.patch( 'charmhelpers.core.hookenv.application_name', mock.MagicMock(return_value='local')) self.app_name_p.start() self.remote_unit = None self.remote_unit_p = mock.patch( 'charmhelpers.core.hookenv.remote_unit') mremote_unit = self.remote_unit_p.start() mremote_unit.side_effect = lambda: self.remote_unit self.relation_id = None self.relation_id_p = mock.patch( 'charmhelpers.core.hookenv.relation_id') mrelation_id = self.relation_id_p.start() mrelation_id.side_effect = lambda: self.relation_id self.relations = { 'test-endpoint': [ { 'local': { 'app-key': 'value' }, 'local/0': { 'key': 'value' }, 'unit': { 'simple': 'value', 'complex': '[1, 2]' }, 'unit/0': { 'foo': 'yes' }, 'unit/1': {}, }, { 'local': {}, 'local/0': {}, 'unit': {}, 'unit/0': { 'bar': '[1, 2]' }, 'unit/1': { 'foo': 'no' }, }, ], } def _rel(rid): rn, ri = rid.split(':') return self.relations[rn][int(ri)] def _rel_get(attribute=None, unit=None, rid=None, app=None): data = _rel(rid)[unit or app] if attribute is not None: return data[attribute] else: return data self.rel_ids_p = mock.patch('charmhelpers.core.hookenv.relation_ids') rel_ids_m = self.rel_ids_p.start() rel_ids_m.side_effect = lambda endpoint: [ '{}:{}'.format(endpoint, i) for i in range(len(self.relations.get(endpoint, []))) ] self.rel_units_p = mock.patch( 'charmhelpers.core.hookenv.related_units') rel_units_m = self.rel_units_p.start() rel_units_m.side_effect = lambda rid: [ key for key in _rel(rid).keys() if (not key.startswith('local') and '/' in key and # exclude apps not _rel(rid)[key].get('departed')) ] self.rel_get_p = mock.patch('charmhelpers.core.hookenv.relation_get') rel_get_m = self.rel_get_p.start() rel_get_m.side_effect = _rel_get self.rel_set_p = mock.patch('charmhelpers.core.hookenv.relation_set') self.relation_set = self.rel_set_p.start() self.data_changed_p = mock.patch( 'charms.reactive.endpoints.data_changed') self.data_changed = self.data_changed_p.start() self.atexit_p = mock.patch('charmhelpers.core.hookenv.atexit') self.atexit = self.atexit_p.start() self.sysm_p = mock.patch.dict(sys.modules) self.sysm_p.start() self.kv.set('reactive.endpoints.departed.test-endpoint', [ { 'relation': 'test-endpoint:1', 'unit_name': 'unit/3', 'data': { 'departed': 'true' }, }, { 'relation': 'test-endpoint:2', 'unit_name': 'unit/4', 'data': { 'departed': 'true' }, }, ]) discover()
def setUp(self): tests_dir = Path(__file__).parent tf = tempfile.NamedTemporaryFile(delete=False) tf.close() self.test_db = Path(tf.name) unitdata._KV = self.kv = unitdata.Storage(str(self.test_db)) self.log_p = mock.patch('charmhelpers.core.hookenv.log') self.log_p.start() self.charm_dir = str(tests_dir / 'data') self.charm_dir_p = mock.patch('charmhelpers.core.hookenv.charm_dir') mcharm_dir = self.charm_dir_p.start() mcharm_dir.side_effect = lambda: self.charm_dir self.hook_name = 'upgrade-charm' self.hook_name_p = mock.patch('charmhelpers.core.hookenv.hook_name') mhook_name = self.hook_name_p.start() mhook_name.side_effect = lambda: self.hook_name self.local_unit_p = mock.patch('charmhelpers.core.hookenv.local_unit', mock.MagicMock(return_value='local/0')) self.local_unit_p.start() self.relations = { 'test-endpoint': [ { 'local/0': { 'key': 'value' }, 'unit/0': { 'foo': 'yes' }, 'unit/1': {}, }, { 'local/0': {}, 'unit/0': { 'bar': '[1, 2]' }, 'unit/1': { 'foo': 'no' }, }, ], } def _rel(rid): rn, ri = rid.split(':') return self.relations[rn][int(ri)] self.rel_ids_p = mock.patch('charmhelpers.core.hookenv.relation_ids') rel_ids_m = self.rel_ids_p.start() rel_ids_m.side_effect = lambda endpoint: [ '{}:{}'.format(endpoint, i) for i in range(len(self.relations.get(endpoint, []))) ] self.rel_units_p = mock.patch( 'charmhelpers.core.hookenv.related_units') rel_units_m = self.rel_units_p.start() rel_units_m.side_effect = lambda rid: [ key for key in _rel(rid).keys() if not key.startswith('local') ] self.rel_get_p = mock.patch('charmhelpers.core.hookenv.relation_get') rel_get_m = self.rel_get_p.start() rel_get_m.side_effect = lambda unit, rid: _rel(rid)[unit] self.rel_set_p = mock.patch('charmhelpers.core.hookenv.relation_set') self.relation_set = self.rel_set_p.start() self.data_changed_p = mock.patch( 'charms.reactive.endpoints.data_changed') self.data_changed = self.data_changed_p.start() self.atexit_p = mock.patch('charmhelpers.core.hookenv.atexit') self.atexit = self.atexit_p.start() self.sysm_p = mock.patch.dict(sys.modules) self.sysm_p.start() discover()