def test_must_invoke(self): input_event = '"some data"' expected_env_vars = { "var1": "override_value1", "var2": "shell_env_value2" } manager = ContainerManager() local_runtime = LambdaRuntime(manager) runner = LocalLambdaRunner(local_runtime, self.mock_function_provider, self.cwd, self.env_var_overrides, debug_args=None, debug_port=None, aws_profile=None) # Append the real AWS credentials to the expected values. creds = runner.get_aws_creds() # default value for creds is not configured by the test. But coming from a downstream class expected_env_vars["AWS_SECRET_ACCESS_KEY"] = creds.get("secret", "defaultsecret") expected_env_vars["AWS_ACCESS_KEY_ID"] = creds.get("key", "defaultkey") expected_env_vars["AWS_REGION"] = creds.get("region", "us-east-1") stdout_stream = io.BytesIO() stderr_stream = io.BytesIO() runner.invoke(self.function_name, input_event, stdout=stdout_stream, stderr=stderr_stream) # stderr is where the Lambda container runtime logs are available. It usually contains requestId, start time # etc. So it is non-zero in size self.assertGreater(len(stderr_stream.getvalue().strip()), 0, "stderr stream must contain data") # This should contain all the environment variables passed to the function actual_output = json.loads(stdout_stream.getvalue().strip().decode('utf-8')) for key, value in expected_env_vars.items(): self.assertTrue(key in actual_output, "Key '{}' must be in function output".format(key)) self.assertEquals(actual_output.get(key), value)
def test_must_invoke(self): input_event = '"some data"' expected_env_vars = { "var1": "override_value1", "var2": "shell_env_value2" } manager = ContainerManager() layer_downloader = LayerDownloader("./", "./") lambda_image = LambdaImage(layer_downloader, False, False) local_runtime = LambdaRuntime(manager, lambda_image) runner = LocalLambdaRunner(local_runtime, self.mock_function_provider, self.cwd, self.env_var_overrides, debug_context=None) # Append the real AWS credentials to the expected values. creds = runner.get_aws_creds() # default value for creds is not configured by the test. But coming from a downstream class expected_env_vars["AWS_SECRET_ACCESS_KEY"] = creds.get("secret", "defaultsecret") expected_env_vars["AWS_ACCESS_KEY_ID"] = creds.get("key", "defaultkey") expected_env_vars["AWS_REGION"] = creds.get("region", "us-east-1") stdout_stream = io.BytesIO() stderr_stream = io.BytesIO() stdout_stream_writer = StreamWriter(stdout_stream) stderr_stream_writer = StreamWriter(stderr_stream) runner.invoke(self.function_name, input_event, stdout=stdout_stream_writer, stderr=stderr_stream_writer) # stderr is where the Lambda container runtime logs are available. It usually contains requestId, start time # etc. So it is non-zero in size self.assertGreater(len(stderr_stream.getvalue().strip()), 0, "stderr stream must contain data") # This should contain all the environment variables passed to the function actual_output = json.loads(stdout_stream.getvalue().strip().decode('utf-8')) for key, value in expected_env_vars.items(): self.assertTrue(key in actual_output, "Key '{}' must be in function output".format(key)) self.assertEqual(actual_output.get(key), value)
class TestLocalLambda_get_aws_creds(TestCase): def setUp(self): self.region = "region" self.key = "key" self.secret = "secret" self.token = "token" self.runtime_mock = Mock() self.function_provider_mock = Mock() self.cwd = "cwd" self.env_vars_values = {} self.debug_context = None self.aws_profile = "myprofile" self.aws_region = "region" self.local_lambda = LocalLambdaRunner( self.runtime_mock, self.function_provider_mock, self.cwd, env_vars_values=self.env_vars_values, debug_context=self.debug_context, aws_profile=self.aws_profile, aws_region=self.aws_region, ) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_get_from_boto_session(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = {"region": self.region, "key": self.key, "secret": self.secret, "sessiontoken": self.token} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called_with(profile_name=self.aws_profile, region_name=self.aws_region) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_region_name(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() del mock_session.region_name # Ask mock to return AttributeError when 'region_name' is accessed boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = {"key": self.key, "secret": self.secret, "sessiontoken": self.token} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called_with(profile_name=self.aws_profile, region_name=self.aws_region) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_access_key(self, boto3_mock): creds = Mock() del creds.access_key # No access key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = {"region": self.region, "secret": self.secret, "sessiontoken": self.token} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called_with(profile_name=self.aws_profile, region_name=self.aws_region) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_secret_key(self, boto3_mock): creds = Mock() creds.access_key = self.key del creds.secret_key # No secret key creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = {"region": self.region, "key": self.key, "sessiontoken": self.token} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called_with(profile_name=self.aws_profile, region_name=self.aws_region) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_session_token(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret del creds.token # No Token mock_session = Mock() mock_session.region_name = self.region boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = {"region": self.region, "key": self.key, "secret": self.secret} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_credentials(self, boto3_mock): boto3_mock.DEFAULT_SESSION = None mock_session = Mock() boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = None expected = {"region": mock_session.region_name} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_session(self, boto3_mock): boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = None expected = {} actual = self.local_lambda.get_aws_creds() self.assertEqual(expected, actual) boto3_mock.session.Session.assert_called()
class TestLocalLambda_get_aws_creds(TestCase): def setUp(self): self.region = "region" self.key = "key" self.secret = "secret" self.token = "token" self.runtime_mock = Mock() self.function_provider_mock = Mock() self.cwd = "cwd" self.env_vars_values = {} self.debug_context = None self.aws_profile = "myprofile" self.aws_region = "region" self.local_lambda = LocalLambdaRunner(self.runtime_mock, self.function_provider_mock, self.cwd, env_vars_values=self.env_vars_values, debug_context=self.debug_context) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_get_from_boto_session(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.DEFAULT_SESSION = mock_session mock_session.get_credentials.return_value = creds expected = { "region": self.region, "key": self.key, "secret": self.secret, "sessiontoken": self.token } actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_region_name(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() del mock_session.region_name # Ask mock to return AttributeError when 'region_name' is accessed boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = { "key": self.key, "secret": self.secret, "sessiontoken": self.token } actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called_with() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_access_key(self, boto3_mock): creds = Mock() del creds.access_key # No access key creds.secret_key = self.secret creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = { "region": self.region, "secret": self.secret, "sessiontoken": self.token } actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called_with() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_secret_key(self, boto3_mock): creds = Mock() creds.access_key = self.key del creds.secret_key # No secret key creds.token = self.token mock_session = Mock() mock_session.region_name = self.region boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = { "region": self.region, "key": self.key, "sessiontoken": self.token } actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called_with() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_session_token(self, boto3_mock): creds = Mock() creds.access_key = self.key creds.secret_key = self.secret del creds.token # No Token mock_session = Mock() mock_session.region_name = self.region boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = creds expected = { "region": self.region, "key": self.key, "secret": self.secret } actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_credentials(self, boto3_mock): boto3_mock.DEFAULT_SESSION = None mock_session = Mock() boto3_mock.session.Session.return_value = mock_session mock_session.get_credentials.return_value = None expected = {} actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called() @patch("samcli.commands.local.lib.local_lambda.boto3") def test_must_work_with_no_session(self, boto3_mock): boto3_mock.DEFAULT_SESSION = None boto3_mock.session.Session.return_value = None expected = {} actual = self.local_lambda.get_aws_creds() self.assertEquals(expected, actual) boto3_mock.session.Session.assert_called()