def test_tree(self): ''' Test if it recurses through etcd and return all values ''' with patch.dict(etcd_mod.__utils__, {'etcd_util.get_conn': self.EtcdClientMock}): self.instance.tree.return_value = {} self.assertDictEqual(etcd_mod.tree('/some-dir'), {}) self.instance.tree.assert_called_with('/some-dir') self.assertDictEqual(etcd_mod.tree(), {}) self.instance.tree.assert_called_with('/') self.instance.tree.side_effect = Exception self.assertRaises(Exception, etcd_mod.tree, 'err')
def test_tree(etcd_client_mock, instance): """ Test if it recurses through etcd and return all values """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": etcd_client_mock}): instance.tree.return_value = {} assert etcd_mod.tree("/some-dir") == {} instance.tree.assert_called_with("/some-dir") assert etcd_mod.tree() == {} instance.tree.assert_called_with("/") instance.tree.side_effect = Exception pytest.raises(Exception, etcd_mod.tree, "err")
def test_tree(self): """ Test if it recurses through etcd and return all values """ with patch.dict(etcd_mod.__utils__, {"etcd_util.get_conn": self.EtcdClientMock}): self.instance.tree.return_value = {} self.assertDictEqual(etcd_mod.tree("/some-dir"), {}) self.instance.tree.assert_called_with("/some-dir") self.assertDictEqual(etcd_mod.tree(), {}) self.instance.tree.assert_called_with("/") self.instance.tree.side_effect = Exception self.assertRaises(Exception, etcd_mod.tree, "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
def test_tree(self): ''' Test if it recurse through etcd and return all values ''' class MockEtcd(object): """ Mock of etcd """ children = [] with patch.object(etcd_util, 'get_conn', MagicMock(return_value=MockEtcd())): with patch.object(etcd_util, 'tree', MagicMock(return_value={})): self.assertDictEqual(etcd_mod.tree(), {}) with patch.object(etcd_util, 'tree', MagicMock(side_effect=KeyError)): self.assertDictEqual(etcd_mod.tree(), {}) with patch.object(etcd_util, 'tree', MagicMock(side_effect=Exception)): self.assertRaises(Exception, etcd_mod.tree)