File: test_execute_command.py

package info (click to toggle)
awscli 2.31.35-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 156,692 kB
  • sloc: python: 213,816; xml: 14,082; makefile: 189; sh: 178; javascript: 8
file content (117 lines) | stat: -rw-r--r-- 4,766 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import errno
import json

from awscli.testutils import (
    BaseAWSCommandParamsTest,
    BaseAWSHelpOutputTest,
    mock,
)


class TestExecuteCommand(BaseAWSCommandParamsTest):
    @mock.patch('awscli.customizations.ecs.executecommand.check_call')
    def test_execute_command_success(self, mock_check_call):
        cmdline = (
            'ecs execute-command --cluster someCluster '
            '--task someTaskId '
            '--interactive --command ls '
            '--region us-west-2'
        )
        mock_check_call.return_value = 0
        self.parsed_responses = [
            {
                "containerName": "someContainerName",
                "containerArn": "someContainerArn",
                "taskArn": "someTaskArn",
                "session": {
                    "sessionId": "session-id",
                    "tokenValue": "token-value",
                    "streamUrl": "stream-url",
                },
                "clusterArn": "someCluster",
                "interactive": "true",
            },
            {
                "failures": [],
                "tasks": [
                    {
                        "clusterArn": "ecs/someCLuster",
                        "desiredStatus": "RUNNING",
                        "createdAt": "1611619514.46",
                        "taskArn": "someTaskArn",
                        "containers": [
                            {
                                "containerArn": "ecs/someContainerArn",
                                "taskArn": "ecs/someTaskArn",
                                "name": "someContainerName",
                                "managedAgents": [
                                    {
                                        "reason": "Execute Command Agent started",
                                        "lastStatus": "RUNNING",
                                        "lastStartedAt": "1611619528.272",
                                        "name": "ExecuteCommandAgent",
                                    }
                                ],
                                "runtimeId": "someRuntimeId",
                            },
                            {
                                "containerArn": "ecs/dummyContainerArn",
                                "taskArn": "ecs/someTaskArn",
                                "name": "dummyContainerName",
                                "managedAgents": [
                                    {
                                        "reason": "Execute Command Agent started",
                                        "lastStatus": "RUNNING",
                                        "lastStartedAt": "1611619528.272",
                                        "name": "ExecuteCommandAgent",
                                    }
                                ],
                                "runtimeId": "dummyRuntimeId",
                            },
                        ],
                        "lastStatus": "RUNNING",
                        "enableExecuteCommand": "true",
                    }
                ],
            },
        ]
        self.run_cmd(cmdline, expected_rc=0)
        self.assertEqual(self.operations_called[0][0].name, 'ExecuteCommand')
        actual_response = json.loads(mock_check_call.call_args[0][0][1])
        self.assertEqual(
            {
                "sessionId": "session-id",
                "tokenValue": "token-value",
                "streamUrl": "stream-url",
            },
            actual_response,
        )

    @mock.patch('awscli.customizations.ecs.executecommand.check_call')
    def test_execute_command_fails(self, mock_check_call):
        cmdline = (
            'ecs execute-command --cluster someCluster '
            '--task someTaskId '
            '--interactive --command ls '
            '--region us-west-2'
        )
        mock_check_call.side_effect = OSError(errno.ENOENT, 'some error')
        self.run_cmd(cmdline, expected_rc=255)


class TestHelpOutput(BaseAWSHelpOutputTest):
    def test_execute_command_output(self):
        self.driver.main(['ecs', 'execute-command', 'help'])
        self.assert_contains('Output\n======\n\nNone')