def test_get_merged_key_renamed(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we renamed some keys. """ old2new = { "hello_world": "cli_testing", } given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) for old, new in old2new.items(): given_local[old] = copy.deepcopy(given_local[new]) del given_local[new] config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config expected["hello_world"] = self.our_config["cli_testing"] actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_set_upstream_config_return(self) -> None: """ Tests the response of the method which let us set the upstream configuration to work with. """ given = copy.deepcopy(self.our_config) config_comparison = ConfigComparison() actual = config_comparison.set_upstream_config(given) self.assertIsInstance(actual, ConfigComparison)
def test_set_local_config_return(self) -> None: """ Tests the response of the method which let us set the local configuration to work with. """ given = self.our_config config_comparison = ConfigComparison() actual = config_comparison.set_local_config(given) self.assertIsInstance(actual, ConfigComparison)
def test_set_upstream_config_not_dict(self) -> None: """ Tests the method which let us set the upstream configuration to work with for the case that the given upstream configuration is not a dict. """ given = ["Hello", "World"] config_comparison = ConfigComparison() self.assertRaises(TypeError, lambda: config_comparison.set_upstream_config(given))
def test_set_local_config_method(self) -> None: """ Tests the method which let us set the local configuration to work with. """ given = self.our_config expected = self.our_config config_comparison = ConfigComparison() config_comparison.set_local_config(given) actual = config_comparison.local_config self.assertEqual(expected, actual)
def test_get_merged_no_changed(self) -> None: """ Tests the method which let us get the (clean) merged configuration. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_is_local_identical(self) -> None: """ Tests the method which let us check if the given local configuration is identical to the upstream one. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = True actual = config_comparison.is_local_identical() self.assertEqual(expected, actual)
def test_set_upstream_config_attribute(self) -> None: """ Tests the method which let us set the upstream configuraiton to work with. In this case, we try to overwrite the attribute. """ given = self.our_config expected = self.our_config config_comparison = ConfigComparison() config_comparison.upstream_config = given actual = config_comparison.upstream_config self.assertEqual(expected, actual)
def test_get_merged_empty_local(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that the given local configuration is empty -- which should never happens. """ given_local = dict() # pylint: disable=use-dict-literal given_upstream = copy.deepcopy(self.our_config) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_wrong_user_agent(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we still have the old user agent format. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) given_local["user_agent"] = "Hello, World!" config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_3_x_dns_over_tcp(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we still have the old dns_over_tcp index. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) given_local["dns_lookup_over_tcp"] = True config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config expected["dns"]["protocol"] = "TCP" actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_3_x_http_codes(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we still have some of the old http_codes indexes. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) given_local["http_codes"]["active"] = True given_local["http_codes"]["not_found_default"] = "XXXX" config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_3_x_json2csv(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we still have the old db type index. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) # Just to trigger the merge. given_local["http_codes"]["not_found_default"] = "XXXX" given_local["cli_testing"]["db_type"] = "json" config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_is_local_identical_missing_key(self) -> None: """ Tests the method which let us check if the given local configuration is identical to the upstream one for the case that a key is missing. """ given_upstream = copy.deepcopy(self.our_config) to_delete = ["links", "http_codes", "user_agent"] for index in to_delete: given_local = copy.deepcopy(self.our_config) del given_local[index] config_comparison = ConfigComparison( local_config=given_local, upstream_config=given_upstream) expected = False actual = config_comparison.is_local_identical() self.assertEqual(expected, actual)
def get_config_file_content(self) -> dict: """ Provides the content of the configuration file or the one already loaded. """ def is_3_x_version(config: dict) -> bool: """ Checks if the given configuration is an old one. :param config: The config to work with. """ return config and "days_between_inactive_db_clean" in config if not self.is_already_loaded(): self.install_missing_infrastructure_files() self.download_dynamic_infrastructure_files() try: config = self.dict_helper.from_yaml_file(self.path_to_config) except ConstructorError: self.file_helper.set_path(self.path_to_default_config).copy( self.path_to_config ) config = self.dict_helper.from_yaml_file(self.path_to_config) if ( not config or self.merge_upstream or is_3_x_version(config) ): # pragma: no cover ## Testing the underlying comparison method is sufficent config = ConfigComparison( local_config=config, upstream_config=self.dict_helper.from_yaml_file( self.path_to_default_config ), ).get_merged() self.dict_helper.set_subject(config).to_yaml_file(self.path_to_config) if self.file_helper.set_path(self.path_to_overwrite_config).exists(): overwrite_data = self.dict_helper.from_yaml_file( self.path_to_overwrite_config ) if overwrite_data: config = Merge( self.dict_helper.from_yaml_file(self.path_to_overwrite_config) ).into(config) else: # pragma: no cover ## Just make it visible to end-user. self.file_helper.write("") return config
def test_is_local_identical_uneeded_links_key(self) -> None: """ Tests the method which let us check if the given local configuration is identical to the upstream one for the case that a unneeded key inside the list of links is given. """ given_upstream = copy.deepcopy(self.our_config) given_local = copy.deepcopy(self.our_config) given_local["links"].update({ "config": "https://example.org/PyFunceble_config.yaml", "iana": "https://example.org/iana-db.json", }) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = False actual = config_comparison.is_local_identical() self.assertEqual(expected, actual)
def test_get_merged_3_x_old_to_new_nagated(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we want to convert old keys to the new layout. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) # Just to trigger the merge. given_local["http_codes"]["not_found_default"] = "XXXX" given_local["no_special"] = True config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config expected["lookup"]["special"] = False actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_undeeded_links(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that we have some uneeded links. """ uneeded_links = { "config": "https://example.org/PyFunceble_config.yaml", "iana": "https://example.org/iana-db.json", } given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) given_local["links"].update(uneeded_links) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_get_merged_http_code_not_self_managed(self) -> None: """ Tests the method which let us get the (clean) merged configuration for the case that the end-user is not managing the status code. """ given_local = copy.deepcopy(self.our_config) given_upstream = copy.deepcopy(self.our_config) # Just to trigger the merge. given_local["http_codes"]["list"]["up"] = copy.deepcopy( self.our_config["http_codes"]["list"]["up"]) # Assume end-user added this before getting away from self management. given_local["http_codes"]["list"]["up"].append(403) config_comparison = ConfigComparison(local_config=given_local, upstream_config=given_upstream) expected = self.our_config actual = config_comparison.get_merged() self.assertEqual(expected, actual)
def test_set_local_config_through_init(self) -> None: """ Tests the method which let us set the local configuraiton to work with. In this case, we try to overwrite the attribute through the constructor. """ given = self.our_config expected = self.our_config config_comparison = ConfigComparison(local_config=given) actual = config_comparison.local_config self.assertEqual(expected, actual)