84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
#
|
|
# Copyright (c) 2013 Docker, Inc.
|
|
# 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. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License 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 random
|
|
import string
|
|
|
|
|
|
class APIError(Exception):
|
|
pass
|
|
|
|
|
|
class FakeDockerClient(object):
|
|
|
|
def __init__(self, endpoint=None):
|
|
self._endpoint = endpoint
|
|
self._containers = {}
|
|
|
|
def _generate_string(self, n=32):
|
|
return ''.join(random.choice(string.lowercase) for i in range(n))
|
|
|
|
def _check_exists(self, container_id):
|
|
if container_id not in self._containers:
|
|
raise APIError('404 Client Error: Not Found ("No such container: '
|
|
'{0}")'.format(container_id))
|
|
|
|
def _set_running(self, container_id, running):
|
|
self._check_exists(container_id)
|
|
self._containers[container_id] = running
|
|
|
|
def inspect_container(self, container_id):
|
|
self._check_exists(container_id)
|
|
info = {
|
|
'Id': container_id,
|
|
'NetworkSettings': {
|
|
'Bridge': 'docker0',
|
|
'Gateway': '172.17.42.1',
|
|
'IPAddress': '172.17.0.3',
|
|
'IPPrefixLen': 16,
|
|
'Ports': {
|
|
'80/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '1080'}]
|
|
}
|
|
},
|
|
'State': {
|
|
'Running': self._containers[container_id]
|
|
}
|
|
}
|
|
return info
|
|
|
|
def logs(self, container_id):
|
|
logs = ['---logs_begin---']
|
|
for i in range(random.randint(1, 20)):
|
|
logs.append(self._generate_string(random.randint(5, 42)))
|
|
logs.append('---logs_end---')
|
|
return '\n'.join(logs)
|
|
|
|
def create_container(self, *args, **kwargs):
|
|
container_id = self._generate_string()
|
|
self._containers[container_id] = None
|
|
self._set_running(container_id, False)
|
|
return self.inspect_container(container_id)
|
|
|
|
def start(self, container_id):
|
|
self._set_running(container_id, True)
|
|
|
|
def stop(self, container_id):
|
|
self._set_running(container_id, False)
|
|
|
|
def kill(self, container_id):
|
|
self._set_running(container_id, False)
|