def test_secrets_provider_get_expired(mock_name, mock_value, config): """ Test SecretsProvider.get() with a cached but expired value """ # Create a new provider provider = parameters.SecretsProvider(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 = { "ARN": f"arn:aws:secretsmanager:us-east-1:132456789012:secret/{mock_name}", "Name": mock_name, "VersionId": "7a9155b8-2dc9-466e-b4f6-5bc46516c84d", "SecretString": mock_value, "CreatedDate": datetime(2015, 1, 1), } expected_params = {"SecretId": mock_name} stubber.add_response("get_secret_value", 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_dynamodb_provider_get_cached(mock_name, mock_value, config): """ Test DynamoDBProvider.get() with a cached value """ table_name = "TEST_TABLE" # Create a new provider provider = parameters.DynamoDBProvider(table_name, 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.table.meta.client) stubber.activate() try: value = provider.get(mock_name) assert value == mock_value stubber.assert_no_pending_responses() finally: stubber.deactivate()
def test_dynamodb_provider_get_expired(mock_name, mock_value, config): """ Test DynamoDBProvider.get() with a cached but expired value """ table_name = "TEST_TABLE" # Create a new provider provider = parameters.DynamoDBProvider(table_name, 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.table.meta.client) response = {"Item": {"id": {"S": mock_name}, "value": {"S": mock_value}}} expected_params = {"TableName": table_name, "Key": {"id": mock_name}} stubber.add_response("get_item", 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_base_provider_get_multiple_cached(mock_name, mock_value): """ Test BaseProvider.get_multiple() with cached values """ class TestProvider(BaseProvider): def _get(self, name: str, **kwargs) -> str: raise NotImplementedError() def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]: raise NotImplementedError() provider = TestProvider() provider.store[(mock_name, None)] = ExpirableValue({"A": mock_value}, datetime.now() + timedelta(seconds=60)) value = provider.get_multiple(mock_name) assert isinstance(value, dict) assert value["A"] == mock_value
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()