示例#1
0
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,
            }
        }
    }
示例#2
0
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
            },
        }
    }
示例#3
0
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,
            }
        }
示例#4
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
示例#5
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
示例#6
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)
示例#7
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)
示例#8
0
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,
            },
        }
    }
示例#9
0
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)
示例#10
0
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)
示例#11
0
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
            }
        },
    }
示例#12
0
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}}}
示例#13
0
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
            }
        }
示例#14
0
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,
            },
        }
    }
示例#15
0
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"
示例#16
0
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'