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
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"
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
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"
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
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
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
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
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
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