|
15 | 15 |
|
16 | 16 | from awscli.testutils import BaseAWSCommandParamsTest
|
17 | 17 | from awscli.testutils import BaseAWSHelpOutputTest
|
18 |
| -from awscli.testutils import mock |
| 18 | +from awscli.testutils import mock |
19 | 19 |
|
20 |
| -class TestSessionManager(BaseAWSCommandParamsTest): |
21 | 20 |
|
| 21 | +class TestSessionManager(BaseAWSCommandParamsTest): |
22 | 22 | @mock.patch('awscli.customizations.sessionmanager.check_call')
|
23 |
| - def test_start_session_success(self, mock_check_call): |
| 23 | + @mock.patch("awscli.customizations.sessionmanager.check_output") |
| 24 | + def test_start_session_success(self, mock_check_output, mock_check_call): |
24 | 25 | cmdline = 'ssm start-session --target instance-id'
|
25 | 26 | mock_check_call.return_value = 0
|
26 |
| - self.parsed_responses = [{ |
| 27 | + mock_check_output.return_value = "1.2.0.0\n" |
| 28 | + expected_response = { |
27 | 29 | "SessionId": "session-id",
|
28 | 30 | "TokenValue": "token-value",
|
29 |
| - "StreamUrl": "stream-url" |
30 |
| - }] |
| 31 | + "StreamUrl": "stream-url", |
| 32 | + } |
| 33 | + self.parsed_responses = [expected_response] |
| 34 | + start_session_params = {"Target": "instance-id"} |
| 35 | + |
| 36 | + self.run_cmd(cmdline, expected_rc=0) |
| 37 | + |
| 38 | + mock_check_call.assert_called_once_with( |
| 39 | + [ |
| 40 | + "session-manager-plugin", |
| 41 | + json.dumps(expected_response), |
| 42 | + mock.ANY, |
| 43 | + "StartSession", |
| 44 | + mock.ANY, |
| 45 | + json.dumps(start_session_params), |
| 46 | + mock.ANY, |
| 47 | + ], |
| 48 | + env=self.environ, |
| 49 | + ) |
| 50 | + |
| 51 | + @mock.patch("awscli.customizations.sessionmanager.check_call") |
| 52 | + @mock.patch("awscli.customizations.sessionmanager.check_output") |
| 53 | + def test_start_session_with_new_version_plugin_success( |
| 54 | + self, mock_check_output, mock_check_call |
| 55 | + ): |
| 56 | + cmdline = "ssm start-session --target instance-id" |
| 57 | + mock_check_call.return_value = 0 |
| 58 | + mock_check_output.return_value = "1.2.500.0\n" |
| 59 | + expected_response = { |
| 60 | + "SessionId": "session-id", |
| 61 | + "TokenValue": "token-value", |
| 62 | + "StreamUrl": "stream-url", |
| 63 | + } |
| 64 | + self.parsed_responses = [expected_response] |
| 65 | + |
| 66 | + ssm_env_name = "AWS_SSM_START_SESSION_RESPONSE" |
| 67 | + start_session_params = {"Target": "instance-id"} |
| 68 | + expected_env = self.environ.copy() |
| 69 | + expected_env.update({ssm_env_name: json.dumps(expected_response)}) |
| 70 | + |
31 | 71 | self.run_cmd(cmdline, expected_rc=0)
|
32 | 72 | self.assertEqual(self.operations_called[0][0].name,
|
33 | 73 | 'StartSession')
|
34 | 74 | self.assertEqual(self.operations_called[0][1],
|
35 | 75 | {'Target': 'instance-id'})
|
36 |
| - actual_response = json.loads(mock_check_call.call_args[0][0][1]) |
37 |
| - self.assertEqual( |
38 |
| - {"SessionId": "session-id", |
39 |
| - "TokenValue": "token-value", |
40 |
| - "StreamUrl": "stream-url"}, |
41 |
| - actual_response) |
| 76 | + |
| 77 | + mock_check_call.assert_called_once_with( |
| 78 | + [ |
| 79 | + "session-manager-plugin", |
| 80 | + ssm_env_name, |
| 81 | + mock.ANY, |
| 82 | + "StartSession", |
| 83 | + mock.ANY, |
| 84 | + json.dumps(start_session_params), |
| 85 | + mock.ANY, |
| 86 | + ], |
| 87 | + env=expected_env, |
| 88 | + ) |
42 | 89 |
|
43 | 90 | @mock.patch('awscli.customizations.sessionmanager.check_call')
|
44 |
| - def test_start_session_fails(self, mock_check_call): |
| 91 | + @mock.patch("awscli.customizations.sessionmanager.check_output") |
| 92 | + def test_start_session_fails(self, mock_check_output, mock_check_call): |
| 93 | + cmdline = "ssm start-session --target instance-id" |
| 94 | + mock_check_output.return_value = "1.2.500.0\n" |
| 95 | + mock_check_call.side_effect = OSError(errno.ENOENT, "some error") |
| 96 | + self.parsed_responses = [ |
| 97 | + { |
| 98 | + "SessionId": "session-id", |
| 99 | + "TokenValue": "token-value", |
| 100 | + "StreamUrl": "stream-url", |
| 101 | + } |
| 102 | + ] |
| 103 | + self.run_cmd(cmdline, expected_rc=255) |
| 104 | + self.assertEqual( |
| 105 | + self.operations_called[0][0].name, "StartSession" |
| 106 | + ) |
| 107 | + self.assertEqual( |
| 108 | + self.operations_called[0][1], {"Target": "instance-id"} |
| 109 | + ) |
| 110 | + self.assertEqual( |
| 111 | + self.operations_called[1][0].name, "TerminateSession" |
| 112 | + ) |
| 113 | + self.assertEqual( |
| 114 | + self.operations_called[1][1], {"SessionId": "session-id"} |
| 115 | + ) |
| 116 | + |
| 117 | + @mock.patch("awscli.customizations.sessionmanager.check_call") |
| 118 | + @mock.patch("awscli.customizations.sessionmanager.check_output") |
| 119 | + def test_start_session_when_get_plugin_version_fails( |
| 120 | + self, mock_check_output, mock_check_call |
| 121 | + ): |
45 | 122 | cmdline = 'ssm start-session --target instance-id'
|
46 |
| - mock_check_call.side_effect = OSError(errno.ENOENT, 'some error') |
47 |
| - self.parsed_responses = [{ |
48 |
| - "SessionId": "session-id" |
49 |
| - }] |
| 123 | + mock_check_output.side_effect = OSError(errno.ENOENT, 'some error') |
| 124 | + self.parsed_responses = [ |
| 125 | + { |
| 126 | + "SessionId": "session-id", |
| 127 | + "TokenValue": "token-value", |
| 128 | + "StreamUrl": "stream-url", |
| 129 | + } |
| 130 | + ] |
50 | 131 | self.run_cmd(cmdline, expected_rc=255)
|
51 | 132 | self.assertEqual(self.operations_called[0][0].name,
|
52 | 133 | 'StartSession')
|
|
0 commit comments