def test_api_key_file_from_config_with_lesser_loading_order(self): """Let's say we load the default configuration, and then stormpath.yml file with client.apiKey.file key. Then we provide API key ID and secret through environment variables - which have greater loading order than the stormpath.yml. """ load_strategies = [ # 1. We load the default configuration. LoadFileConfigStrategy('tests/assets/default_config.yml', must_exist=True), LoadAPIKeyConfigStrategy('i-do-not-exist'), # 3. We load stormpath.yml file with client.apiKey.file LoadFileConfigStrategy('tests/assets/apiKeyFile.yml'), LoadAPIKeyConfigStrategy('i-do-not-exist'), LoadFileConfigStrategy('i-do-not-exist'), # 6. We load API key id and secret from environment # variables. LoadEnvConfigStrategy(prefix='STORMPATH'), ExtendConfigStrategy(extend_with={}) ] post_processing_strategies = [LoadAPIKeyFromConfigStrategy()] validation_strategies = [ValidateClientConfigStrategy()] cl = ConfigLoader(load_strategies, post_processing_strategies, validation_strategies) config = cl.load() self.assertEqual(config['client']['apiKey']['id'], 'greater order id') self.assertEqual(config['client']['apiKey']['secret'], 'greater order secret') self.assertFalse('file' in config['client']['apiKey'])
def test_api_key_from_config_with_lesser_loading_order(self): """Similar to the previous test, but with apiKey key. """ client_config = { 'client': { 'apiKey': { 'id': 'CLIENT_CONFIG_API_KEY_ID', 'secret': 'CLIENT_CONFIG_API_KEY_SECRET', } } } load_strategies = [ # 1. We load the default configuration. LoadFileConfigStrategy('tests/assets/default_config.yml', must_exist=True), LoadAPIKeyConfigStrategy('i-do-not-exist'), # 3. We load stormpath.yml file with client.apiKey.file LoadFileConfigStrategy('tests/assets/apiKeyApiKey.json'), LoadAPIKeyConfigStrategy('i-do-not-exist'), LoadFileConfigStrategy('i-do-not-exist'), LoadEnvConfigStrategy(prefix='STORMPATH'), # 7. Configuration provided through the SDK client # constructor. ExtendConfigStrategy(extend_with=client_config) ] post_processing_strategies = [LoadAPIKeyFromConfigStrategy()] validation_strategies = [ValidateClientConfigStrategy()] cl = ConfigLoader(load_strategies, post_processing_strategies, validation_strategies) config = cl.load() self.assertEqual(config['client']['apiKey']['id'], 'CLIENT_CONFIG_API_KEY_ID') self.assertEqual(config['client']['apiKey']['secret'], 'CLIENT_CONFIG_API_KEY_SECRET')
def test_config_extending(self): client_config = { 'client': { 'apiKey': { 'id': 'CLIENT_CONFIG_API_KEY_ID', 'secret': 'CLIENT_CONFIG_API_KEY_SECRET', } } } load_strategies = [ # 1. We load the default configuration. LoadFileConfigStrategy('tests/assets/default_config.yml', must_exist=True), LoadAPIKeyConfigStrategy('i-do-not-exist'), LoadFileConfigStrategy('i-do-not-exist'), LoadAPIKeyConfigStrategy('i-do-not-exist'), LoadFileConfigStrategy('i-do-not-exist'), LoadEnvConfigStrategy(prefix='STORMPATH'), # 7. Configuration provided through the SDK client # constructor. ExtendConfigStrategy(extend_with=client_config) ] post_processing_strategies = [LoadAPIKeyFromConfigStrategy()] validation_strategies = [ValidateClientConfigStrategy()] cl = ConfigLoader(load_strategies, post_processing_strategies, validation_strategies) config = cl.load() self.assertTrue('baseUrl' in config['client'])
def test_load_api_key_config(self): lapcs = LoadAPIKeyConfigStrategy('tests/assets/apiKey.properties') config = lapcs.process() self.assertEqual(config['client']['apiKey']['id'], 'API_KEY_PROPERTIES_ID') self.assertEqual(config['client']['apiKey']['secret'], 'API_KEY_PROPERTIES_SECRET')
def test_empty_api_key_properties_file_after_default_config(self): lfcs = LoadFileConfigStrategy("tests/assets/default_config.yml") config = lfcs.process() lapcs = LoadAPIKeyConfigStrategy("tests/assets/empty_apiKey.properties") returned_config = lapcs.process(config) self.assertEqual(returned_config, config) self.assertEqual(config["client"]["cacheManager"]["defaultTtl"], 300) self.assertIsNone(config["client"]["apiKey"]["id"]) self.assertIsNone(config["client"]["apiKey"]["secret"])
def test_empty_api_key_properties_file_after_default_config(self): lfcs = LoadFileConfigStrategy('tests/assets/default_config.yml') config = lfcs.process() lapcs = LoadAPIKeyConfigStrategy( 'tests/assets/empty_apiKey.properties') returned_config = lapcs.process(config) self.assertEqual(returned_config, config) self.assertEqual(config['client']['cacheManager']['defaultTtl'], 300) self.assertIsNone(config['client']['apiKey']['id']) self.assertIsNone(config['client']['apiKey']['secret'])
def test_load_empty_api_key_config_must_exist_no_home_env(self): path = "~/tests/assets/empty_apiKey.properties" with patch.object(Path, "abspath", return_value=path): lapcs = LoadAPIKeyConfigStrategy(path, must_exist=True) try: lapcs.process() except Exception as e: self.assertEqual(str(e), 'Unable to load "%s". Environment home not set.' % path) else: self.fail("Loading config without environment home didn't throw any exception.")
def setUp(self): client_config = { 'application': { 'name': 'CLIENT_CONFIG_APP', 'href': None }, 'client': { 'apiKey': { 'id': 'CLIENT_CONFIG_API_KEY_ID', 'secret': 'CLIENT_CONFIG_API_KEY_SECRET', } } } self.load_strategies = [ # 1. Default configuration. LoadFileConfigStrategy('tests/assets/default_config.yml', must_exist=True), # 2. apiKey.properties file from ~/.stormpath directory. LoadAPIKeyConfigStrategy('tests/assets/apiKey.properties'), # 3. stormpath.[json or yaml] file from ~/.stormpath # directory. LoadFileConfigStrategy('tests/assets/stormpath.yml'), # 4. apiKey.properties file from application directory. LoadAPIKeyConfigStrategy('tests/assets/no_apiKey.properties'), # 5. stormpath.[json or yaml] file from application # directory. LoadFileConfigStrategy('tests/assets/stormpath.json'), # 6. Environment variables. LoadEnvConfigStrategy(prefix='STORMPATH'), # 7. Configuration provided through the SDK client # constructor. ExtendConfigStrategy(extend_with=client_config) ] self.post_processing_strategies = [ # Post-processing: If the key client.apiKey.file isn't # empty, then a apiKey.properties file should be loaded # from that path. LoadAPIKeyFromConfigStrategy(), ] self.validation_strategies = [ # Post-processing: Validation ValidateClientConfigStrategy() ]
def test_load_empty_api_key_config_must_exist_no_home_env(self): path = '~/tests/assets/empty_apiKey.properties' with patch.object(Path, 'abspath', return_value=path): lapcs = LoadAPIKeyConfigStrategy(path, must_exist=True) try: lapcs.process() except Exception as e: self.assertEqual( str(e), 'Unable to load "%s". Environment home not set.' % path) else: self.fail( 'Loading config without environment home didn\'t throw any exception.' )
def test_load_empty_api_key_config_must_exist(self): lapcs = LoadAPIKeyConfigStrategy( 'tests/assets/empty_apiKey.properties', must_exist=True) with self.assertRaises(Exception): lapcs.process()
def test_load_empty_api_key_config(self): lapcs = LoadAPIKeyConfigStrategy( 'tests/assets/empty_apiKey.properties') config = lapcs.process() self.assertEqual(config, {})
def test_load_api_key_config(self): lapcs = LoadAPIKeyConfigStrategy("tests/assets/apiKey.properties") config = lapcs.process() self.assertEqual(config["client"]["apiKey"]["id"], "API_KEY_PROPERTIES_ID") self.assertEqual(config["client"]["apiKey"]["secret"], "API_KEY_PROPERTIES_SECRET")
def test_load_empty_api_key_config_must_exist(self): lapcs = LoadAPIKeyConfigStrategy("tests/assets/empty_apiKey.properties", must_exist=True) with self.assertRaises(Exception): lapcs.process()
def test_load_empty_api_key_config(self): lapcs = LoadAPIKeyConfigStrategy("tests/assets/empty_apiKey.properties") config = lapcs.process() self.assertEqual(config, {})