def test_ls(self): ''' Test if it return all keys and dirs inside a specific path ''' class MockEtcd(object): """ Mock of etcd """ children = [] def __init__(self): self.path = None def get(self, path): """ Mock of get method """ self.path = path if path == '': raise KeyError elif path == 'err': raise return MockEtcd with patch.object(etcd_util, 'get_conn', MagicMock(return_value=MockEtcd())): self.assertDictEqual(etcd_mod.ls_(), {'/': {}}) self.assertDictEqual(etcd_mod.ls_(''), {}) self.assertRaises(Exception, etcd_mod.ls_, 'err')
def test_ls(self): ''' Test if it return all keys and dirs inside a specific path ''' with patch.dict(etcd_mod.__utils__, {'etcd_util.get_conn': self.EtcdClientMock}): self.instance.ls.return_value = {'/some-dir': {}} self.assertDictEqual(etcd_mod.ls_('/some-dir'), {'/some-dir': {}}) self.instance.ls.assert_called_with('/some-dir') self.instance.ls.return_value = {'/': {}} self.assertDictEqual(etcd_mod.ls_(), {'/': {}}) self.instance.ls.assert_called_with('/') self.instance.ls.side_effect = Exception self.assertRaises(Exception, etcd_mod.ls_, 'err')
def test_ls(etcd_client_mock, instance): """ Test if it return all keys and dirs inside a specific path """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": etcd_client_mock}): instance.ls.return_value = {"/some-dir": {}} assert etcd_mod.ls_("/some-dir") == {"/some-dir": {}} instance.ls.assert_called_with("/some-dir") instance.ls.return_value = {"/": {}} assert etcd_mod.ls_() == {"/": {}} instance.ls.assert_called_with("/") instance.ls.side_effect = Exception pytest.raises(Exception, etcd_mod.ls_, "err")
def test_ls(self): """ Test if it return all keys and dirs inside a specific path """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": self.EtcdClientMock}): self.instance.ls.return_value = {"/some-dir": {}} self.assertDictEqual(etcd_mod.ls_("/some-dir"), {"/some-dir": {}}) self.instance.ls.assert_called_with("/some-dir") self.instance.ls.return_value = {"/": {}} self.assertDictEqual(etcd_mod.ls_(), {"/": {}}) self.instance.ls.assert_called_with("/") self.instance.ls.side_effect = Exception self.assertRaises(Exception, etcd_mod.ls_, "err")
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_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