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_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_extract_facts(tmpdir, session): """Test extraction of facts for the current snapshot with a basic config.""" out_dir = tmpdir.join('output') extracted_facts = session.extract_facts(nodes='basic', output_directory=str(out_dir)) written_facts = load_facts(str(out_dir)) expected_facts = load_facts(join(_this_dir, 'facts', 'expected_facts')) assert extracted_facts == expected_facts, 'Extracted facts match expected facts' assert written_facts == expected_facts, 'Facts written to disk match expected facts'
def test_load_facts_bad_dir(tmpdir): """Test load facts when loading from bad directories.""" # Empty input dir should throw ValueError with pytest.raises(ValueError) as e: load_facts(str(tmpdir)) assert "No files present in specified dir" in str(e.value) f = tmpdir.join("file") f.write("foo") # File instead of dir should throw an exception about path not being a directory with pytest.raises(Exception) as e: load_facts(str(f)) assert "Not a directory" in str(e.value)
def test_extract_facts_specific_snapshot(tmpdir, session): """Test extraction of facts for a specific snapshot.""" out_dir = tmpdir.join("output") extracted_facts = session.extract_facts(output_directory=str(out_dir), snapshot=_PREVIOUS_SNAPSHOT) written_facts = load_facts(str(out_dir)) expected_facts = load_facts(join(_this_dir, "facts", "expected_facts2")) assert (validate_facts( expected_facts, extracted_facts) == {}), "Extracted facts match expected facts" assert (validate_facts( expected_facts, written_facts) == {}), "Written facts match expected facts"
def test_extract_facts(tmpdir, session): """Test extraction of facts for the current snapshot with a basic config.""" out_dir = tmpdir.join("output") extracted_facts = session.extract_facts(nodes="basic", output_directory=str(out_dir)) written_facts = load_facts(str(out_dir)) expected_facts = load_facts(join(_this_dir, "facts", "expected_facts")) assert (validate_facts( expected_facts, extracted_facts) == {}), "Extracted facts match expected facts" assert (validate_facts( expected_facts, written_facts) == {}), "Written facts match expected facts"
def test_extract_facts_specific_snapshot(tmpdir, session): """Test extraction of facts for a specific snapshot.""" out_dir = tmpdir.join('output') non_current_snapshot = session.list_snapshots()[-1] extracted_facts = session.extract_facts(output_directory=str(out_dir), snapshot=non_current_snapshot) written_facts = load_facts(str(out_dir)) expected_facts = load_facts(join(_this_dir, 'facts', 'expected_facts2')) assert validate_facts( expected_facts, extracted_facts) == {}, 'Extracted facts match expected facts' assert validate_facts( expected_facts, written_facts) == {}, 'Written facts match expected facts'
def validate_facts(self, expected_facts): # type: (Text) -> Dict[Text, Any] """ Return a dictionary of mismatched facts between the loaded expected facts and the actual facts. :param expected_facts: path to directory to read expected fact YAML files from :type expected_facts: Text :return: facts about the specified nodes on the current network snapshot :rtype: dict """ actual_facts = get_facts(self) expected_facts_ = load_facts(expected_facts) return validate_facts(expected_facts_, actual_facts)
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 validate_facts(self, expected_facts, snapshot=None): # type: (Text, Optional[Text]) -> Dict[Text, Any] """ Return a dictionary of mismatched facts between the loaded expected facts and the actual facts. :param expected_facts: path to directory to read expected fact YAML files from :type expected_facts: Text :param snapshot: name of the snapshot to validate facts for, defaults to the current snapshot :type snapshot: Text :return: facts about the specified nodes on the current network snapshot :rtype: dict """ actual_facts = get_facts(self, snapshot=snapshot) expected_facts_ = load_facts(expected_facts) return validate_facts(expected_facts_, actual_facts)