def test_basic_operations(subtests, profile_name, prefix): """ Make sure we can do the basics """ with subtests.test("There should be no entries at the start with our prefix."): assert etcd_mod.get_(prefix, recurse=True, profile=profile_name) is None with subtests.test("We should be able to set and retrieve simple values"): etcd_mod.set_("{}/1".format(prefix), "one", profile=profile_name) assert ( etcd_mod.get_("{}/1".format(prefix), recurse=False, profile=profile_name) == "one" ) with subtests.test("We should be able to update and retrieve those values"): updated = { "1": "not one", "2": { "3": "two-three", "4": "two-four", }, } etcd_mod.update(updated, path=prefix, profile=profile_name) assert etcd_mod.get_(prefix, recurse=True, profile=profile_name) == updated with subtests.test("We should be list all top level values at a directory"): expected = { prefix: { "{}/1".format(prefix): "not one", "{}/2/".format(prefix): {}, }, } assert etcd_mod.ls_(path=prefix, profile=profile_name) == expected with subtests.test("We should be able to remove values and get a tree hierarchy"): updated = { "2": { "3": "two-three", "4": "two-four", }, } etcd_mod.rm_("{}/1".format(prefix), profile=profile_name) assert etcd_mod.tree(path=prefix, profile=profile_name) == updated with subtests.test("updates should be able to be caught by waiting in read"): return_list = [] def wait_func(return_list): return_list.append( etcd_mod.watch("{}/1".format(prefix), timeout=30, profile=profile_name) ) wait_thread = threading.Thread(target=wait_func, args=(return_list,)) wait_thread.start() time.sleep(1) etcd_mod.set_("{}/1".format(prefix), "one", profile=profile_name) wait_thread.join() modified = return_list.pop() assert modified["key"] == "{}/1".format(prefix) assert modified["value"] == "one"
def test_rm(self): ''' Test if it delete a key from etcd ''' with patch.dict(etcd_mod.__utils__, {'etcd_util.get_conn': self.EtcdClientMock}): self.instance.rm.return_value = False self.assertFalse(etcd_mod.rm_('dir')) self.instance.rm.assert_called_with('dir', recurse=False) self.instance.rm.return_value = True self.assertTrue(etcd_mod.rm_('dir', recurse=True)) self.instance.rm.assert_called_with('dir', recurse=True) self.instance.rm.side_effect = Exception self.assertRaises(Exception, etcd_mod.rm_, 'err')
def test_rm(etcd_client_mock, instance): """ Test if it delete a key from etcd """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": etcd_client_mock}): instance.rm.return_value = False assert not etcd_mod.rm_("dir") instance.rm.assert_called_with("dir", recurse=False) instance.rm.return_value = True assert etcd_mod.rm_("dir", recurse=True) instance.rm.assert_called_with("dir", recurse=True) instance.rm.side_effect = Exception pytest.raises(Exception, etcd_mod.rm_, "err")
def test_rm(self): """ Test if it delete a key from etcd """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": self.EtcdClientMock}): self.instance.rm.return_value = False self.assertFalse(etcd_mod.rm_("dir")) self.instance.rm.assert_called_with("dir", recurse=False) self.instance.rm.return_value = True self.assertTrue(etcd_mod.rm_("dir", recurse=True)) self.instance.rm.assert_called_with("dir", recurse=True) self.instance.rm.side_effect = Exception self.assertRaises(Exception, etcd_mod.rm_, "err")
def test_with_missing_profile(subtests, prefix, etcd_version, etcd_port): """ Test the correct response when the profile is missing and we can't connect """ if etcd_version in (EtcdVersion.v2, EtcdVersion.v3_v2_mode) and etcd_port != 2379: # Only need to run this once with subtests.test("Test no profile and bad connection in get_"): assert etcd_mod.get_("{}/1".format(prefix)) is None with subtests.test("Test no profile and bad connection in set_"): assert etcd_mod.set_("{}/1".format(prefix), "lol") is None with subtests.test("Test no profile and bad connection in update"): assert etcd_mod.update({"{}/1".format(prefix): "SIUUU"}) is None with subtests.test("Test no profile and bad connection in watch"): assert etcd_mod.watch("{}/1".format(prefix)) is None with subtests.test("Test no profile and bad connection in ls_"): assert etcd_mod.ls_() is None with subtests.test("Test no profile and bad connection in rm"): assert etcd_mod.rm_("{}/1".format(prefix)) is None with subtests.test("Test no profile and bad connection in tree"): assert etcd_mod.tree() is None
def test_rm(self): ''' Test if it delete a key from etcd ''' class MockEtcd(object): """ Mock of etcd """ children = [] def __init__(self): self.key = None self.recursive = None def delete(self, key, recursive): """ Mock of delete method """ self.key = key self.recursive = recursive if key == '': raise KeyError elif key == 'err': raise if recursive: return True else: return False return MockEtcd with patch.object(etcd_util, 'get_conn', MagicMock(return_value=MockEtcd())): self.assertFalse(etcd_mod.rm_('salt')) self.assertTrue(etcd_mod.rm_('salt', recurse=True)) self.assertFalse(etcd_mod.rm_('')) self.assertRaises(Exception, etcd_mod.rm_, 'err')