def test_in_new_origen_proc(): import origen assert "test_in_new_origen_proc" not in origen.users.keys() out = in_new_origen_proc(func__test_users_are_reset) assert out["users"] == [getpass.getuser(), "test_in_new_origen_proc"] assert "test_in_new_origen_proc" not in origen.current_user().datasets out = in_new_origen_proc(func__test_with_config) assert out["datasets"] == ["test_in_new_origen_proc"]
def test_error_on_invalid_auth_method(self, capfd): retn = in_new_origen_proc(mod=mailer_configs) assert retn["server"] == "smtp.origen.org" assert retn["auth_method"] == "None" out = capfd.readouterr().out assert "Invalid auth method 'blah!' found in the mailer configuration" in out assert "Unable to fully configure mailer from config!" in out assert "Forcing no authentication (mailer__auth_method = 'None')" in out
def test_error_message_on_default_data_and_given_hierarchy(self, capfd): ''' As no datasets were given, giving a hierarchy is not allowed ''' retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["__origen__default__"] assert retn["hierarchy"] == ["__origen__default__"] stdout = capfd.readouterr().out assert "Providing config value 'user__data_lookup_hierarchy' without providing 'user__datasets' is not allowed" in stdout assert "Forcing default dataset..." in stdout
def test_error_message_on_default_data_and_empty_hierarchy(self, capfd): ''' Same as the above - cannot give an empty hierarchy either ''' retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["__origen__default__"] assert retn["hierarchy"] == ["__origen__default__"] stdout = capfd.readouterr().out assert "Providing config value 'user__data_lookup_hierarchy' without providing 'user__datasets' is not allowed" in stdout assert "Forcing default dataset..." in stdout
def test_single_dataset_and_explicit_hierarchy(self): ''' Very close to what is already tested, but simple enough to do''' retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["test"] assert retn["hierarchy"] == ["test"] assert retn["first_name_unset"] == None assert retn["first_name_dataset_unset"] == None assert retn["first_name"] == "Corey2" assert retn["first_name_dataset"] == "Corey2"
def test_default_dataset_and_hierarchy(self): ''' No datasets given, nor any hierarchy. Absolute base case ''' retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["__origen__default__"] assert retn["hierarchy"] == ["__origen__default__"] assert retn["first_name_unset"] == None assert retn["first_name_dataset_unset"] == None assert retn["first_name"] == "COREY" assert retn["first_name_dataset"] == "COREY"
def test_single_dataset_and_default_hierarchy(self): ''' Default hierarchy should be the only dataset ''' retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["test"] assert retn["hierarchy"] == ["test"] assert retn["first_name_unset"] == None assert retn["first_name_dataset_unset"] == None assert retn["first_name"] == "Corey" assert retn["first_name_dataset"] == "Corey"
def test_error_on_duplicate_datasets_in_hierarchy(self, capfd): retn = in_new_origen_proc(mod=user_configs) assert retn["data_lookup_hierarchy"] == [] assert set(retn["datasets"]) == set( ['test', 'test2', 'git', 'forumsys', 'backup']) stdout = capfd.readouterr().out assert "dataset 'test' can only appear once in the dataset hierarchy (first appearance at index 0 - duplicate at index 2)" in stdout assert "Forcing empty dataset lookup hierarchy..." in stdout assert f"Data lookup hierarchy for user '{getpass.getuser()}' is empty" in stdout
def test_error_on_invalid_datasets_in_hierarchy(self, capfd): retn = in_new_origen_proc(mod=user_configs) assert retn["data_lookup_hierarchy"] == [] assert set(retn["datasets"]) == set( ['test', 'test2', 'git', 'forumsys', 'backup']) stdout = capfd.readouterr().out assert "'blah' is not a valid dataset and cannot be used in the dataset hierarchy" in stdout assert "Forcing empty dataset lookup hierarchy..." in stdout assert f"Data lookup hierarchy for user '{getpass.getuser()}' is empty" in stdout
def test_single_dataset_and_empty_hierarchy(self): retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["test"] assert retn["hierarchy"] == [] assert isinstance(retn["first_name_unset"], OSError) assert str( retn["first_name_unset"] ) == "Dataset hierarchy is empty! Data lookups must explicitly name the dataset to query" assert retn["first_name_dataset_unset"] == None assert retn["first_name_unset_2"] == None
def test_tls_service_user(self): retn = in_new_origen_proc(mod=mailer_configs) assert retn["server"] == "smtp.origen.org" assert retn["auth_method"] == "TLS" assert retn["service_user"] == "mailer_service_user" assert isinstance(retn["dataset"], OSError) assert "Cannot query the user dataset for the mailer when specifying a service user" in str( retn["dataset"]) assert retn["username"] == "mailer" assert retn["password"] == "test" assert retn["sender"] == "*****@*****.**"
def test_tls_dataset_with_backup(self): retn = in_new_origen_proc(mod=mailer_configs) assert retn["server"] == "smtp.origen.org" assert retn["auth_method"] == "TLS" assert retn["service_user"] == None assert retn["dataset"] == "for_mailer" assert retn["username"] == "mailer_name" assert retn["password"] == "mailer_pw" assert retn["sender"] == "*****@*****.**" assert retn["for_mailer_dataset_email"] == None assert retn["not_mailer_dataset_email"] == "*****@*****.**" assert retn["hierarchy"] == ["not_mailer"]
def test_maillist_toml_ext_overwrite_maillist_ext(self): ''' Confirm that, within the same directory, a .maillist.toml overwrites a .maillist ''' retn = in_new_origen_proc(mod=mailer_configs) ml_file = self.config_tests_maillists_root.joinpath( "ext_overwrite/ext_overwrite.maillist") assert ml_file.exists assert set(retn["maillists"]) == set( [*self.available_maillists, "ext_overwrite"]) ml = retn["ext_overwrite"] assert ml["resolve_recipients"] == ["*****@*****.**"] assert ml["file"] == self.config_tests_maillists_root.joinpath( "ext_overwrite/ext_overwrite.maillist.toml")
def test_error_on_tls_with_invalid_service_user(self, capfd): err = "Invalid service user 'blah' provided in mailer configuration" retn = in_new_origen_proc(mod=mailer_configs) assert retn["server"] == "smtp.origen.org" assert retn["auth_method"] == "TLS" assert isinstance(retn["service_user"], OSError) assert err in str(retn["service_user"]) assert isinstance(retn["username"], OSError) assert err in str(retn["username"]) assert isinstance(retn["password"], OSError) assert err in str(retn["password"]) assert isinstance(retn["test"], OSError) assert err in str(retn["test"]) assert err in capfd.readouterr().out
def test_mailer_minimum(self): retn = in_new_origen_proc(mod=mailer_configs) assert retn["server"] == "smtp_minimum.origen.org" assert retn["port"] == None assert retn["auth_method"] == "None" assert retn["domain"] == None assert retn["timeout"] == 60 assert retn["service_user"] == None assert retn["dataset"] == None assert isinstance(retn["username"], OSError) assert "Cannot retrieve username when using auth method 'None'" in str( retn["username"]) assert isinstance(retn["password"], OSError) assert "Cannot retrieve password when using auth method 'None'" in str( retn["password"]) assert retn["sender"] == "*****@*****.**"
def test_error_message_on_conflicting_audiences(self, capfd): retn = in_new_origen_proc(mod=mailer_configs) def err_msg_regex(f, given_aud, mapped_given_aud, mapped_aud): return f"Maillist at '.*{f}.maillist.*' was given audience '{given_aud}' \\(maps to '{mapped_given_aud}'\\) but conflicts with the named audience '{mapped_aud}'. Maillist not added." stdout = capfd.readouterr().out assert set(retn["maillists"]) == self.available_maillists # Original maillists should be maintained n = "dev" ml = retn[n] f = self.app_ml_base.joinpath("dev.maillist.toml") assert ml["name"] == n assert ml["resolve_recipients"] == ["dev@test_apps.origen.org"] assert ml["audience"] == "development" assert ml["file"] == f assert re.search(err_msg_regex(n, "other", "other", "development"), stdout) n = "develop" ml = retn[n] f = self.app_ml_base.joinpath("develop.maillist") assert ml["name"] == n assert ml["resolve_recipients"] == [ "d1@test_apps.origen.org", "d2@test_apps.origen.org", "d3@test_apps.origen.org", "d4@test_apps.origen.org" ] assert ml["audience"] == "development" assert ml["file"] == f assert re.search(err_msg_regex(n, "prod", "production", "development"), stdout) n = "prod" ml = retn[n] f = self.app_ml_base.joinpath("prod.maillist.toml") assert ml["name"] == n assert ml["resolve_recipients"] == [ 'prod1@test_apps.origen.org', 'prod2@test_apps.origen.org' ] assert ml["audience"] == "production" assert ml["file"] == f assert re.search( err_msg_regex(n, "development", "development", "production"), stdout)
def test_adding_custom_mailist_directories(self): retn = in_new_origen_proc(mod=mailer_configs) assert set(retn["maillists"]) == set( [*self.available_maillists, "custom1", "custom2", "other"]) ml = retn["custom1"] assert ml["name"] == "custom1" assert ml["resolve_recipients"] == ["*****@*****.**", "*****@*****.**"] assert ml["audience"] == None assert ml["file"] == self.config_tests_maillists_root.joinpath( "custom/custom1.maillist") ml = retn["custom2"] assert ml["name"] == "custom2" assert ml["resolve_recipients"] == ["*****@*****.**", "*****@*****.**"] assert ml["audience"] == "development" assert ml["file"] == self.config_tests_maillists_root.joinpath( "custom/custom2.maillist.toml") assert set(retn["dev_maillists"]) == set( [*self.dev_maillists, "other", "custom2"])
def test_redundant_audience_parameter(self): # This should be fine, albeit redundant # prod.toml -> set to release retn = in_new_origen_proc(mod=mailer_configs) # release.toml -> set to develop ml = retn["development"] assert ml["name"] == "development" assert ml["resolve_recipients"] == ["*****@*****.**"] assert ml["audience"] == "development" assert ml["file"] == self.config_tests_maillists_root.joinpath( "redundant_audience/development.maillist.toml") # dev.toml -> set to production ml = retn["release"] assert ml["name"] == "release" assert ml["resolve_recipients"] == ["*****@*****.**"] assert ml["audience"] == "production" assert ml["file"] == self.config_tests_maillists_root.joinpath( "redundant_audience/release.maillist.toml")
def test_error_nessage_on_invalid_toml(self, capfd): retn = in_new_origen_proc(mod=mailer_configs) assert set(retn["maillists"]) == self.available_maillists # The original develop maillist should persist ml = retn["develop"] assert ml["name"] == "develop" assert ml["resolve_recipients"] == [ "d1@test_apps.origen.org", "d2@test_apps.origen.org", "d3@test_apps.origen.org", "d4@test_apps.origen.org", ] stdout = capfd.readouterr().out def err_msg_regex(name): return f"Errors encountered building maillist '{name}' from .*invalid_toml.*{name}.maillist.*: unexpected eof encountered" assert re.search(err_msg_regex("develop"), stdout) assert re.search(err_msg_regex("invalid_toml"), stdout)
def test_mailists_overwrite_lower_priority_ones(self): retn = in_new_origen_proc(mod=mailer_configs) assert set(retn["maillists"]) == set( [*self.available_maillists, "custom1", "custom2"]) ml = retn["custom2"] assert ml["name"] == "custom2" assert ml["resolve_recipients"] == [ "*****@*****.**", "*****@*****.**" ] assert ml["audience"] == None assert ml["file"] == self.config_tests_maillists_root.joinpath( "override/custom2.maillist") ml = retn["develop"] assert ml["name"] == "develop" assert ml["resolve_recipients"] == [ "*****@*****.**", "*****@*****.**" ] assert ml["audience"] == "development" assert ml["file"] == self.config_tests_maillists_root.joinpath( "override/develop.maillist.toml")
def test_error_on_bad_system(self, capfd): err = "Unrecognized mailer system 'blah'" retn = in_new_origen_proc(mod=mailer_configs) assert retn["mailer"] is None assert retn["app_mailer"] is None assert err in capfd.readouterr().err
def test_multi_datasets_and_default_hierarchy(self): ''' Default hierarchy for multiple datasets is empty ''' retn = in_new_origen_proc(mod=user_configs) assert set(retn["datasets"]) == set(["test_1st", "test_2nd"]) assert retn["hierarchy"] == [] assert retn["hierarchy_2"] == ["test_1st", "test_2nd"]
def test_mailer_empty(self, capfd): retn = in_new_origen_proc(mod=mailer_configs) assert retn["mailer"] is None assert retn["app_mailer"] is None assert capfd.readouterr().err == ""
def test_empty_datasets(self): retn = in_new_origen_proc(mod=user_configs) assert retn["datasets"] == ["__origen__default__"] assert retn["hierarchy"] == ["__origen__default__"]
def test_error_on_missing_server(self, capfd): err = "Mailer\'s \'server\' parameter has not been set. Please provide a \'server\' to enable use of the mailer" retn = in_new_origen_proc(mod=mailer_configs) assert retn["mailer"] is None assert retn["app_mailer"] is None assert err in capfd.readouterr().err