def test_validate_facts_not_matching_data(): """Test that fact validation works for mismatched facts.""" expected = { 'node1': {'foo': 1, 'bar': 1, 'baz': 1}, 'node2': {'foo': 2}, } actual = { 'node1': {'foo': 0, 'bar': 1}, # 'foo' doesn't match expected # also missing 'baz': 1 'node2': {'foo': 2}, 'node3': {'foo': 3}, } version = 'version' res = validate_facts(_encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version)) # Result should identify the mismatched value and the missing key assert res == { 'node1': { 'foo': { 'expected': 1, 'actual': 0, }, 'baz': { 'expected': 1, 'key_present': False, } } }
def test_validate_facts_not_matching_data(): """Test that fact validation works for mismatched facts.""" expected = {"node1": {"foo": 1, "bar": 1, "baz": 1}, "node2": {"foo": 2}} actual = { "node1": { "foo": 0, "bar": 1 }, # 'foo' doesn't match expected # also missing 'baz': 1 "node2": { "foo": 2 }, "node3": { "foo": 3 }, } version = "version" res = validate_facts( _encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version), ) # Result should identify the mismatched value and the missing key assert res == { "node1": { "foo": { "expected": 1, "actual": 0 }, "baz": { "expected": 1, "key_present": False }, } }
def test_validate_facts_not_matching_version(): """Test that fact validation detects mismatched versions.""" expected = { 'node1': {'foo': 1}, 'node2': {'foo': 2}, } actual = { 'node1': {'foo': 1}, 'node2': {'foo': 2}, 'node3': {'foo': 3}, } version_expected = 'correct_version' version_actual = 'fake_version' res = validate_facts(_encapsulate_nodes_facts(expected, version_expected), _encapsulate_nodes_facts(actual, version_actual)) # One result per expected node for mismatched version assert len(res) == len(expected) for node in expected: # Make sure version mismatch details are in results details assert res[node] == { 'Version': { 'actual': version_actual, 'expected': version_expected, } }
def test_validate_facts(): """Test that fact validation works for matching facts.""" expected = { 'node1': { 'foo': 1 }, 'node2': { 'foo': 2 }, } actual = { 'node1': { 'foo': 1 }, 'node2': { 'foo': 2 }, 'node3': { 'foo': 3 }, } version = 'fake_version' res = validate_facts(_encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version)) # No results from matching (subset) expected and actual assert len(res) == 0
def test_validate_facts(): """Test that fact validation works for matching facts.""" expected = {"node1": {"foo": 1}, "node2": {"foo": 2}} actual = {"node1": {"foo": 1}, "node2": {"foo": 2}, "node3": {"foo": 3}} version = "fake_version" res = validate_facts( _encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version), ) # No results from matching (subset) expected and actual assert len(res) == 0
def test_load_facts_mismatch_version(tmpdir): """Test load facts when loaded nodes have different format versions.""" version1 = "version1" node1 = {"node1": "foo"} version2 = "version2" node2 = {"node2": "foo"} tmpdir.join("node1.yml").write(_encapsulate_nodes_facts(node1, version1)) tmpdir.join("node2.yml").write(_encapsulate_nodes_facts(node2, version2)) with pytest.raises(ValueError) as e: load_facts(str(tmpdir)) assert "Input file version mismatch" in str(e.value)
def test_load_facts_mismatch_version(tmpdir): """Test load facts when loaded nodes have different format versions.""" version1 = 'version1' node1 = {'node1': 'foo'} version2 = 'version2' node2 = {'node2': 'foo'} tmpdir.join('node1.yml').write(_encapsulate_nodes_facts(node1, version1)) tmpdir.join('node2.yml').write(_encapsulate_nodes_facts(node2, version2)) with pytest.raises(ValueError) as e: load_facts(str(tmpdir)) assert 'Input file version mismatch' in str(e)
def test_validate_facts_verbose(): """Test that fact validation returns both matching and mismatched facts when running in verbose mode.""" expected = { 'node1': { 'foo': 1, 'bar': 1, 'baz': 1 }, 'node2': { 'foo': 2 }, } actual = { 'node1': { 'foo': 0, 'bar': 1 }, # 'foo' doesn't match expected # also missing 'baz': 1 'node2': { 'foo': 2 }, 'node3': { 'foo': 3 }, } version = 'version' res = validate_facts(_encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version), verbose=True) # Verbose validation should return both matching and mismatched facts assert res == { 'node1': { 'foo': { 'expected': 1, 'actual': 0, }, 'bar': { 'expected': 1, 'actual': 1, }, 'baz': { 'expected': 1, 'key_present': False, } }, 'node2': { 'foo': { 'expected': 2, 'actual': 2, }, } }
def test_load_facts(tmpdir): """Test that load_facts correctly loads facts from a fact directory.""" version = "fake_version" node1 = {"node1": "foo"} node2 = {"node2": "foo"} tmpdir.join("node1.yml").write(_encapsulate_nodes_facts(node1, version)) tmpdir.join("node2.yml").write(_encapsulate_nodes_facts(node2, version)) facts = load_facts(str(tmpdir)) # Confirm facts were loaded from both files assert facts == _encapsulate_nodes_facts({ "node1": "foo", "node2": "foo" }, version)
def test_load_facts(tmpdir): """Test that load_facts correctly loads facts from a fact directory.""" version = 'fake_version' node1 = {'node1': 'foo'} node2 = {'node2': 'foo'} tmpdir.join('node1.yml').write(_encapsulate_nodes_facts(node1, version)) tmpdir.join('node2.yml').write(_encapsulate_nodes_facts(node2, version)) facts = load_facts(str(tmpdir)) # Confirm facts were loaded from both files assert facts == _encapsulate_nodes_facts({ 'node1': 'foo', 'node2': 'foo' }, version)
def test_validate_facts_verbose(): """Test that fact validation returns both matching and mismatched facts when running in verbose mode.""" expected = {"node1": {"foo": 1, "bar": 1, "baz": 1}, "node2": {"foo": 2}} actual = { "node1": { "foo": 0, "bar": 1 }, # 'foo' doesn't match expected # also missing 'baz': 1 "node2": { "foo": 2 }, "node3": { "foo": 3 }, } version = "version" res = validate_facts( _encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version), verbose=True, ) # Verbose validation should return both matching and mismatched facts assert res == { "node1": { "foo": { "expected": 1, "actual": 0 }, "bar": { "expected": 1, "actual": 1 }, "baz": { "expected": 1, "key_present": False }, }, "node2": { "foo": { "expected": 2, "actual": 2 } }, }
def test_validate_facts_no_matching_node(): """Test that fact validation works when actual facts are missing expected node.""" expected = {"node1": {"foo": 1, "bar": 1, "baz": 1}, "node2": {"foo": 2}} actual = { "node1": { "foo": 1, "bar": 1, "baz": 1 }, # missing node2 } version = "version" res = validate_facts( _encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version), ) # Result should identify the missing node assert res == {"node2": {"foo": {"expected": 2, "key_present": False}}}
def test_validate_facts_not_matching_version(): """Test that fact validation detects mismatched versions.""" expected = {"node1": {"foo": 1}, "node2": {"foo": 2}} actual = {"node1": {"foo": 1}, "node2": {"foo": 2}, "node3": {"foo": 3}} version_expected = "correct_version" version_actual = "fake_version" res = validate_facts( _encapsulate_nodes_facts(expected, version_expected), _encapsulate_nodes_facts(actual, version_actual), ) # One result per expected node for mismatched version assert len(res) == len(expected) for node in expected: # Make sure version mismatch details are in results details assert res[node] == { "Version": { "actual": version_actual, "expected": version_expected } }
def test_validate_facts_no_matching_node(): """Test that fact validation works when actual facts are missing expected node.""" expected = { 'node1': {'foo': 1, 'bar': 1, 'baz': 1}, 'node2': {'foo': 2}, } actual = { 'node1': {'foo': 1, 'bar': 1, 'baz': 1}, # missing node2 } version = 'version' res = validate_facts(_encapsulate_nodes_facts(expected, version), _encapsulate_nodes_facts(actual, version)) # Result should identify the missing node assert res == { 'node2': { 'foo': { 'expected': 2, 'key_present': False, }, } }
def test_write_facts(tmpdir): """Test that writing facts writes nodes' facts to individual files.""" nodes = {"node1": "foo", "node2": "bar"} version = "version" facts = _encapsulate_nodes_facts(nodes, version) write_facts(str(tmpdir), facts) for node in nodes: filename = node + ".yml" file_path = str(tmpdir.join(filename)) assert os.path.isfile(file_path) with open(file_path) as f: node_facts_raw = yaml.safe_load(f.read()) node_facts, node_version = _unencapsulate_facts(node_facts_raw) assert version == node_version, "Each file has the correct version" assert (node_facts.get(node) == nodes[node] ), "Each file has the correct facts"
def test_write_facts(tmpdir): """Test that writing facts writes nodes' facts to individual files.""" nodes = {'node1': 'foo', 'node2': 'bar'} version = 'version' facts = _encapsulate_nodes_facts(nodes, version) write_facts(str(tmpdir), facts) for node in nodes: filename = node + '.yml' file_path = str(tmpdir.join(filename)) assert os.path.isfile(file_path) with open(file_path) as f: node_facts_raw = yaml.safe_load(f.read()) node_facts, node_version = _unencapsulate_facts(node_facts_raw) assert version == node_version, 'Each file has the correct version' assert node_facts.get(node) == nodes[ node], 'Each file has the correct facts'