Example #1
0
def decorated_function_test(decorated_function, entry_name, ori_status,
                            max_age_in_seconds):

    test_event = {'event_name': 'test'}
    test_context = LambdaContext()
    new_status = "new"

    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status

    # Update object and download
    upload_object('test_env/test_data/s3_new.json', bucket_name, s3_key)
    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status

    # Wait max_age_in_seconds call again
    time.sleep(max_age_in_seconds)
    return_status = decorated_function(test_event, test_context)
    assert return_status == new_status

    # Revert back to normal
    upload_object('test_env/test_data/s3_old.json', bucket_name, s3_key)
    return_status = decorated_function(test_event, test_context)
    assert return_status == new_status

    time.sleep(max_age_in_seconds)
    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status
Example #2
0
def test_invalid_parameter():

    with pytest.raises(ArgumentTypeNotSupportedError) as e:
        invalid_parameter({}, LambdaContext())
        assert e['Code'] == "ArgumentTypeNotSupportedError"

    with pytest.raises(NoEntryNameError) as e:
        ssm.get_entry(parameter=123, max_age_in_seconds=4)
        assert e['Code'] == "NoEntryNameError"

    with pytest.raises(NoEntryNameError) as e:
        ssm.get_entry(parameter={'dummy': 'dict'}, max_age_in_seconds=2)
        assert e['Code'] == "NoEntryNameError"

    with pytest.raises(ArgumentTypeNotSupportedError) as e:
        ssm.get_entry(parameter=123, max_age_in_seconds=2, entry_name="hello")
        assert e['Code'] == "ArgumentTypeNotSupportedError"

    with pytest.raises(ArgumentTypeNotSupportedError) as e:
        ssm.get_entry(parameter=(123, 123),
                      max_age_in_seconds=2,
                      entry_name="hello")
        assert e['Code'] == "ArgumentTypeNotSupportedError"

    with pytest.raises(NoEntryNameError) as e:
        ssm.get_entry(parameter=['abc', '_'], max_age_in_seconds=2)
        assert e['Code'] == "NoEntryNameError"
Example #3
0
def not_refreshed_test(decorated_function, entry_name, ori_status,
                       max_age_in_seconds):
    """
    Special use-case where file is not updated to get 100% code coverage
    package will only check file's last_modified_date, and not download
    """

    test_event = {'event_name': 'test'}
    test_context = LambdaContext()

    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status

    # Update object and download
    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status

    # Wait max_age_in_seconds call again
    time.sleep(max_age_in_seconds)
    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status

    # Wait max_age_in_seconds call again
    time.sleep(max_age_in_seconds)
    return_status = decorated_function(test_event, test_context)
    assert return_status == ori_status
Example #4
0
def test_non_existing_parameter():

    test_event = {'event_name': 'test'}
    test_context = LambdaContext()
    with pytest.raises(ClientError) as e:
        context = parameter_not_exist_var_handler(test_event, test_context)
        assert e['Error']['Code'] == "ParameterNotFound"
Example #5
0
def decorator_test(name, entry_name, secret_value, decorated_function, ttl=10, secret_type='String'):

    dummy_value = ''.join(random.choices(string.ascii_lowercase, k = 25))
    if secret_type == 'Binary':
        dummy_value = dummy_value.encode('utf-8')
    
    test_event = dict()
    test_context = LambdaContext()

    context = decorated_function(test_event ,test_context)
    assert getattr(context, entry_name) == secret_value
    
    update_secret(name, dummy_value, secret_type=secret_type)
    context = decorated_function(test_event ,test_context)
    assert getattr(context, entry_name) == secret_value
    
    time.sleep(ttl)
    context = decorated_function(test_event ,test_context)
    assert getattr(context, entry_name) == dummy_value

    update_secret(name, secret_value, secret_type=secret_type)
    context = decorated_function(test_event ,test_context)
    assert getattr(context, entry_name) == dummy_value
    
    time.sleep(ttl)
    context = decorated_function(test_event ,test_context)
    assert getattr(context, entry_name) == secret_value
Example #6
0
def decorator_test(decorated_function, parameter_name, entry_name, parameter_value, max_age_in_seconds, param_type='String'):
    
    dummy_value_updated = ''.join(random.choices(string.ascii_lowercase, k = 25))
    dummy_value_returned = dummy_value_updated
    revert_parameter_value = parameter_value
    if param_type == 'StringList':
        dummy_value_updated = ','.join(random.choices(string.ascii_lowercase, k = 5))
        dummy_value_returned = dummy_value_updated.split(',')
        revert_parameter_value = ','.join(parameter_value)
    
    test_event = {'event_name': 'test'}
    test_context = LambdaContext()

    context = decorated_function(test_event, test_context)
    assert getattr(context, entry_name) == parameter_value
    
    # Update parameter but call before max_age_in_seconds
    update_parameter(parameter_name, dummy_value_updated, param_type=param_type)
    context = decorated_function(test_event, test_context)
    assert getattr(context, entry_name) == parameter_value

    # Wait max_age_in_seconds call again
    time.sleep(max_age_in_seconds)
    context = decorated_function(test_event, test_context)
    assert getattr(context, entry_name) == dummy_value_returned

    # Revert back to normal
    update_parameter(parameter_name, revert_parameter_value, param_type=param_type)
    time.sleep(max_age_in_seconds)
    context = decorated_function(test_event, test_context)
    assert getattr(context, entry_name) == parameter_value
Example #7
0
def test_invalidate_cache():
    
    updated_value = 'Dummy Value NEW!!'
    test_event = {}
    test_context = LambdaContext()
    refresh_event = {'refresh': True}

    context = invalidate_cache({}, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
    
    # Update parameter and test within 5 seconds
    update_parameter(ssm_parameter, updated_value)
    time.sleep(5)
    context = invalidate_cache({}, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value

    # Wait 5 seconds call again, parameter should be refreshed
    time.sleep(5)
    context = invalidate_cache({}, test_context)
    assert getattr(context, ssm_parameter_default_name) == updated_value

    # Update parameter back to ssm_parameter_value, but call with invalidated cache
    update_parameter(ssm_parameter, ssm_parameter_value)
    context = invalidate_cache(refresh_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
Example #8
0
def test_var_handlers():

    test_event = {'event_name': 'test'}
    test_context = LambdaContext()

    context = single_var_handler(test_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
    
    context = double_var_handler(test_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
    assert getattr(context, ssm_parameter_2_default_name) == ssm_parameter_2_value

    context = long_name_var_handler(test_event, test_context)
    assert getattr(context, long_name_default_name) == long_name_value
Example #9
0
def test_no_cache():
    test_event = {'event_name': 'test'}
    test_context = LambdaContext()
    new_value = "New Value"

    context = no_cache(test_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
    
    update_parameter(ssm_parameter, new_value)
    context = no_cache(test_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == new_value

    update_parameter(ssm_parameter, ssm_parameter_value)
    context = no_cache(test_event, test_context)
    assert getattr(context, ssm_parameter_default_name) == ssm_parameter_value
Example #10
0
def test_multi_parameters():

    dummy_string = "__"
    dummy_list = "-,--,---"
    test_event = {}
    test_context = LambdaContext()

    context = multi_parameters(test_event, test_context)
    assert getattr(context, default_entry_name).get(
        ssm_parameter_default_name) == ssm_parameter_value
    assert getattr(context, default_entry_name).get(
        ssm_parameter_2_default_name) == ssm_parameter_2_value
    assert getattr(context, default_entry_name).get(
        string_list_default_name) == string_list_value.split(',')
    assert getattr(context, default_entry_name).get(
        secure_parameter_default_name) == secure_parameter_value

    update_parameter(ssm_parameter, dummy_string)
    update_parameter(ssm_parameter_2, dummy_string)
    update_parameter(secure_parameter, dummy_string, param_type='SecureString')
    update_parameter(string_list_parameter,
                     dummy_list,
                     param_type='StringList')
    context = multi_parameters(test_event, test_context)
    assert getattr(context, default_entry_name).get(
        ssm_parameter_default_name) == ssm_parameter_value
    assert getattr(context, default_entry_name).get(
        ssm_parameter_2_default_name) == ssm_parameter_2_value
    assert getattr(context, default_entry_name).get(
        string_list_default_name) == string_list_value.split(',')
    assert getattr(context, default_entry_name).get(
        secure_parameter_default_name) == secure_parameter_value

    time.sleep(10)
    context = multi_parameters(test_event, test_context)
    assert getattr(
        context,
        default_entry_name).get(ssm_parameter_default_name) == dummy_string
    assert getattr(
        context,
        default_entry_name).get(ssm_parameter_2_default_name) == dummy_string
    assert getattr(context, default_entry_name).get(
        string_list_default_name) == dummy_list.split(',')
    assert getattr(
        context,
        default_entry_name).get(secure_parameter_default_name) == dummy_string

    test_initialize()
    context = multi_parameters(test_event, test_context)
    assert getattr(
        context,
        default_entry_name).get(ssm_parameter_default_name) == dummy_string
    assert getattr(
        context,
        default_entry_name).get(ssm_parameter_2_default_name) == dummy_string
    assert getattr(context, default_entry_name).get(
        string_list_default_name) == dummy_list.split(',')
    assert getattr(
        context,
        default_entry_name).get(secure_parameter_default_name) == dummy_string

    time.sleep(10)
    context = multi_parameters(test_event, test_context)
    assert getattr(context, default_entry_name).get(
        ssm_parameter_default_name) == ssm_parameter_value
    assert getattr(context, default_entry_name).get(
        ssm_parameter_2_default_name) == ssm_parameter_2_value
    assert getattr(context, default_entry_name).get(
        string_list_default_name) == string_list_value.split(',')
    assert getattr(context, default_entry_name).get(
        secure_parameter_default_name) == secure_parameter_value