def test_ssm_provider_get_sdk_options_overwrite(mock_name, mock_value, mock_version, config): """ Test SSMProvider.get() with custom SDK options overwritten """ # Create a new provider provider = parameters.SSMProvider(config=config) # Stub the boto3 client stubber = stub.Stubber(provider.client) response = { "Parameter": { "Name": mock_name, "Type": "String", "Value": mock_value, "Version": mock_version, "Selector": f"{mock_name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}", } } expected_params = {"Name": mock_name, "WithDecryption": False} stubber.add_response("get_parameter", response, expected_params) stubber.activate() try: value = provider.get(mock_name, Name="THIS_SHOULD_BE_OVERWRITTEN", WithDecryption=True) assert value == mock_value stubber.assert_no_pending_responses() finally: stubber.deactivate()
def test_ssm_provider_get_default_config(monkeypatch, mock_name, mock_value, mock_version): """ Test SSMProvider.get() without specifying the config """ monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1") # Create a new provider provider = parameters.SSMProvider() # Stub the boto3 client stubber = stub.Stubber(provider.client) response = { "Parameter": { "Name": mock_name, "Type": "String", "Value": mock_value, "Version": mock_version, "Selector": f"{mock_name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}", } } expected_params = {"Name": mock_name, "WithDecryption": False} stubber.add_response("get_parameter", response, expected_params) stubber.activate() try: value = provider.get(mock_name) assert value == mock_value stubber.assert_no_pending_responses() finally: stubber.deactivate()
def test_ssm_provider_get_multiple_sdk_options_overwrite( mock_name, mock_value, mock_version, config): """ Test SSMProvider.get_multiple() with SDK options overwritten """ mock_param_names = ["A", "B", "C"] # Create a new provider provider = parameters.SSMProvider(config=config) # Stub the boto3 client stubber = stub.Stubber(provider.client) response = { "Parameters": [{ "Name": f"{mock_name}/{name}", "Type": "String", "Value": f"{mock_value}/{name}", "Version": mock_version, "Selector": f"{mock_name}/{name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}/{name}", } for name in mock_param_names] } expected_params = { "Path": mock_name, "Recursive": False, "WithDecryption": False } stubber.add_response("get_parameters_by_path", response, expected_params) stubber.activate() try: values = provider.get_multiple( mock_name, Path="THIS_SHOULD_BE_OVERWRITTEN", Recursive=False, WithDecryption=True, ) stubber.assert_no_pending_responses() assert len(values) == len(mock_param_names) for name in mock_param_names: assert name in values assert values[name] == f"{mock_value}/{name}" finally: stubber.deactivate()
def test_ssm_provider_get_cached(mock_name, mock_value, config): """ Test SSMProvider.get() with a cached value """ # Create a new provider provider = parameters.SSMProvider(config=config) # Inject value in the internal store provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() + timedelta(seconds=60)) # Stub the boto3 client stubber = stub.Stubber(provider.client) stubber.activate() try: value = provider.get(mock_name) assert value == mock_value stubber.assert_no_pending_responses() finally: stubber.deactivate()
def test_ssm_provider_get_expired(mock_name, mock_value, mock_version, config): """ Test SSMProvider.get() with a cached but expired value """ # Create a new provider provider = parameters.SSMProvider(config=config) # Inject value in the internal store provider.store[(mock_name, None)] = ExpirableValue( mock_value, datetime.now() - timedelta(seconds=60)) # Stub the boto3 client stubber = stub.Stubber(provider.client) response = { "Parameter": { "Name": mock_name, "Type": "String", "Value": mock_value, "Version": mock_version, "Selector": f"{mock_name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}", } } expected_params = {"Name": mock_name, "WithDecryption": False} stubber.add_response("get_parameter", response, expected_params) stubber.activate() try: value = provider.get(mock_name) assert value == mock_value stubber.assert_no_pending_responses() finally: stubber.deactivate()
def test_ssm_provider_get_multiple_next_token(mock_name, mock_value, mock_version, config): """ Test SSMProvider.get_multiple() with a non-cached path with multiple calls """ mock_param_names = ["A", "B", "C"] # Create a new provider provider = parameters.SSMProvider(config=config) # Stub the boto3 client stubber = stub.Stubber(provider.client) # First call response = { "Parameters": [ { "Name": f"{mock_name}/{name}", "Type": "String", "Value": f"{mock_value}/{name}", "Version": mock_version, "Selector": f"{mock_name}/{name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}/{name}", } for name in mock_param_names[:1] ], "NextToken": "next_token", } expected_params = {"Path": mock_name, "Recursive": False, "WithDecryption": False} stubber.add_response("get_parameters_by_path", response, expected_params) # Second call response = { "Parameters": [ { "Name": f"{mock_name}/{name}", "Type": "String", "Value": f"{mock_value}/{name}", "Version": mock_version, "Selector": f"{mock_name}/{name}:{mock_version}", "SourceResult": "string", "LastModifiedDate": datetime(2015, 1, 1), "ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}/{name}", } for name in mock_param_names[1:] ] } expected_params = {"Path": mock_name, "Recursive": False, "WithDecryption": False, "NextToken": "next_token"} stubber.add_response("get_parameters_by_path", response, expected_params) stubber.activate() try: values = provider.get_multiple(mock_name) stubber.assert_no_pending_responses() assert len(values) == len(mock_param_names) for name in mock_param_names: assert name in values assert values[name] == f"{mock_value}/{name}" finally: stubber.deactivate()