mirror of https://github.com/docker/docker-py.git
Unit and integration tests for exec.
This commit is contained in:
parent
fce477243e
commit
f95c8c4dfc
|
@ -12,7 +12,7 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
CURRENT_VERSION = 'v1.12'
|
||||
CURRENT_VERSION = 'v1.15'
|
||||
|
||||
FAKE_CONTAINER_ID = '3cc2351ab11b'
|
||||
FAKE_IMAGE_ID = 'e9aa60c60128'
|
||||
|
@ -225,6 +225,20 @@ def get_fake_export():
|
|||
return status_code, response
|
||||
|
||||
|
||||
def post_fake_execute():
|
||||
status_code = 200
|
||||
response = {'Id': FAKE_CONTAINER_ID}
|
||||
return status_code, response
|
||||
|
||||
|
||||
def post_fake_execute_start():
|
||||
status_code = 200
|
||||
response = (b'\x01\x00\x00\x00\x00\x00\x00\x11bin\nboot\ndev\netc\n'
|
||||
b'\x01\x00\x00\x00\x00\x00\x00\x12lib\nmnt\nproc\nroot\n'
|
||||
b'\x01\x00\x00\x00\x00\x00\x00\x0csbin\nusr\nvar\n')
|
||||
return status_code, response
|
||||
|
||||
|
||||
def post_fake_stop_container():
|
||||
status_code = 200
|
||||
response = {'Id': FAKE_CONTAINER_ID}
|
||||
|
@ -330,6 +344,10 @@ fake_responses = {
|
|||
get_fake_diff,
|
||||
'{1}/{0}/containers/3cc2351ab11b/export'.format(CURRENT_VERSION, prefix):
|
||||
get_fake_export,
|
||||
'{1}/{0}/containers/shell/exec'.format(CURRENT_VERSION, prefix):
|
||||
post_fake_execute,
|
||||
'{1}/{0}/exec/3cc2351ab11b/start'.format(CURRENT_VERSION, prefix):
|
||||
post_fake_execute_start,
|
||||
'{1}/{0}/containers/3cc2351ab11b/stop'.format(CURRENT_VERSION, prefix):
|
||||
post_fake_stop_container,
|
||||
'{1}/{0}/containers/3cc2351ab11b/kill'.format(CURRENT_VERSION, prefix):
|
||||
|
|
|
@ -627,6 +627,34 @@ class TestRestartingContainer(BaseTestCase):
|
|||
res = [x for x in containers if 'Id' in x and x['Id'].startswith(id)]
|
||||
self.assertEqual(len(res), 0)
|
||||
|
||||
|
||||
class TestExecuteCommand(BaseTestCase):
|
||||
def runTest(self):
|
||||
container = self.client.create_container('busybox', ['false'])
|
||||
id = container['Id']
|
||||
self.client.start(id)
|
||||
self.tmp_containers.append(id)
|
||||
|
||||
res = self.client.execute(id, ['echo', 'hello'])
|
||||
expected = b'hello\n' if six.PY3 else 'hello\n'
|
||||
self.assertEqual(res, expected)
|
||||
|
||||
|
||||
class TestExecuteCommandStreaming(BaseTestCase):
|
||||
def runTest(self):
|
||||
container = self.client.create_container('busybox', ['false'])
|
||||
id = container['Id']
|
||||
self.client.start(id)
|
||||
self.tmp_containers.append(id)
|
||||
|
||||
chunks = self.client.execute(id, ['echo', 'hello\nworld'], stream=True)
|
||||
res = b'' if six.PY3 else ''
|
||||
for chunk in chunks:
|
||||
res += chunk
|
||||
expected = b'hello\nworld\n' if six.PY3 else 'hello\nworld\n'
|
||||
self.assertEqual(res, expected)
|
||||
|
||||
|
||||
#################
|
||||
# LINKS TESTS #
|
||||
#################
|
||||
|
|
|
@ -1064,6 +1064,31 @@ class DockerClientTest(Cleanup, unittest.TestCase):
|
|||
timeout=(docker.client.DEFAULT_TIMEOUT_SECONDS + timeout)
|
||||
)
|
||||
|
||||
def test_execute_command(self):
|
||||
try:
|
||||
self.client.execute(fake_api.FAKE_CONTAINER_ID, ['ls', '-1'])
|
||||
except Exception as e:
|
||||
self.fail('Command should not raise exception: {0}'.format(e))
|
||||
|
||||
args = fake_request.call_args
|
||||
self.assertEqual(args[0][0],
|
||||
url_prefix + 'exec/3cc2351ab11b/start')
|
||||
|
||||
self.assertEqual(json.loads(args[1]['data']),
|
||||
json.loads('''{
|
||||
"Tty": false,
|
||||
"AttachStderr": true,
|
||||
"Container": "3cc2351ab11b",
|
||||
"Cmd": ["ls", "-1"],
|
||||
"AttachStdin": false,
|
||||
"User": "",
|
||||
"Detach": false,
|
||||
"Privileged": false,
|
||||
"AttachStdout": true}'''))
|
||||
|
||||
self.assertEqual(args[1]['headers'],
|
||||
{'Content-Type': 'application/json'})
|
||||
|
||||
def test_kill_container(self):
|
||||
try:
|
||||
self.client.kill(fake_api.FAKE_CONTAINER_ID)
|
||||
|
|
Loading…
Reference in New Issue