Skip to content

Commit 40a7f37

Browse files
committed
Merge branch 'mnowster-remove-driver-types'
2 parents d60cb31 + e7a9ae0 commit 40a7f37

File tree

3 files changed

+82
-44
lines changed

3 files changed

+82
-44
lines changed

docker/utils/types.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,15 @@ class LogConfig(DictType):
2323
types = LogConfigTypesEnum
2424

2525
def __init__(self, **kwargs):
26-
type_ = kwargs.get('type', kwargs.get('Type'))
27-
config = kwargs.get('config', kwargs.get('Config'))
28-
if type_ not in self.types._values:
29-
raise ValueError("LogConfig.type must be one of ({0})".format(
30-
', '.join(self.types._values)
31-
))
26+
log_driver_type = kwargs.get('type', kwargs.get('Type'))
27+
config = kwargs.get('config', kwargs.get('Config')) or {}
28+
3229
if config and not isinstance(config, dict):
3330
raise ValueError("LogConfig.config must be a dictionary")
3431

3532
super(LogConfig, self).__init__({
36-
'Type': type_,
37-
'Config': config or {}
33+
'Type': log_driver_type,
34+
'Config': config
3835
})
3936

4037
@property
@@ -43,10 +40,6 @@ def type(self):
4340

4441
@type.setter
4542
def type(self, value):
46-
if value not in self.types._values:
47-
raise ValueError("LogConfig.type must be one of {0}".format(
48-
', '.join(self.types._values)
49-
))
5043
self['Type'] = value
5144

5245
@property

tests/integration_test.py

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from six.moves import socketserver
3535

3636
from .test import Cleanup
37+
from docker.errors import APIError
3738

3839
# FIXME: missing tests for
3940
# export; history; insert; port; push; tag; get; load; stats
@@ -245,30 +246,80 @@ def runTest(self):
245246
self.assertFalse(inspect_data['VolumesRW'][mount_dest])
246247

247248

248-
@unittest.skipIf(NOT_ON_HOST, 'Tests running inside a container; no syslog')
249-
class TestCreateContainerWithLogConfig(BaseTestCase):
250-
def runTest(self):
251-
config = docker.utils.LogConfig(
252-
type=docker.utils.LogConfig.types.SYSLOG,
253-
config={'key1': 'val1'}
249+
class CreateContainerWithLogConfigTest(BaseTestCase):
250+
def test_valid_log_driver_and_log_opt(self):
251+
log_config = docker.utils.LogConfig(
252+
type='json-file',
253+
config={'max-file': '100'}
254254
)
255-
ctnr = self.client.create_container(
255+
256+
container = self.client.create_container(
256257
'busybox', ['true'],
257-
host_config=self.client.create_host_config(log_config=config)
258+
host_config=self.client.create_host_config(log_config=log_config)
258259
)
259-
self.assertIn('Id', ctnr)
260-
self.tmp_containers.append(ctnr['Id'])
261-
self.client.start(ctnr)
262-
info = self.client.inspect_container(ctnr)
263-
self.assertIn('HostConfig', info)
264-
host_config = info['HostConfig']
265-
self.assertIn('LogConfig', host_config)
266-
log_config = host_config['LogConfig']
267-
self.assertIn('Type', log_config)
268-
self.assertEqual(log_config['Type'], config.type)
269-
self.assertIn('Config', log_config)
270-
self.assertEqual(type(log_config['Config']), dict)
271-
self.assertEqual(log_config['Config'], config.config)
260+
self.tmp_containers.append(container['Id'])
261+
self.client.start(container)
262+
263+
info = self.client.inspect_container(container)
264+
container_log_config = info['HostConfig']['LogConfig']
265+
266+
self.assertEqual(container_log_config['Type'], log_config.type)
267+
self.assertEqual(container_log_config['Config'], log_config.config)
268+
269+
def test_invalid_log_driver_raises_exception(self):
270+
log_config = docker.utils.LogConfig(
271+
type='asdf-nope',
272+
config={}
273+
)
274+
275+
container = self.client.create_container(
276+
'busybox', ['true'],
277+
host_config=self.client.create_host_config(log_config=log_config)
278+
)
279+
280+
expected_msg = "logger: no log driver named 'asdf-nope' is registered"
281+
with self.assertRaisesRegexp(APIError, expected_msg):
282+
# raises an internal server error 500
283+
self.client.start(container)
284+
285+
@unittest.skip("Reason: https://github.com/docker/docker/issues/15633")
286+
def test_valid_no_log_driver_specified(self):
287+
log_config = docker.utils.LogConfig(
288+
type="",
289+
config={'max-file': '100'}
290+
)
291+
292+
container = self.client.create_container(
293+
'busybox', ['true'],
294+
host_config=self.client.create_host_config(log_config=log_config)
295+
)
296+
self.tmp_containers.append(container['Id'])
297+
self.client.start(container)
298+
299+
info = self.client.inspect_container(container)
300+
container_log_config = info['HostConfig']['LogConfig']
301+
302+
self.assertEqual(container_log_config['Type'], "json-file")
303+
self.assertEqual(container_log_config['Config'], log_config.config)
304+
305+
def test_valid_no_config_specified(self):
306+
log_config = docker.utils.LogConfig(
307+
type="json-file",
308+
config=None
309+
)
310+
311+
container = self.client.create_container(
312+
'busybox', ['true'],
313+
host_config=self.client.create_host_config(log_config=log_config)
314+
)
315+
self.tmp_containers.append(container['Id'])
316+
self.client.start(container)
317+
318+
info = self.client.inspect_container(container)
319+
container_log_config = info['HostConfig']['LogConfig']
320+
321+
self.assertEqual(container_log_config['Type'], "json-file")
322+
self.assertEqual(container_log_config['Config'], {})
272323

273324

274325
@unittest.skipIf(not EXEC_DRIVER_IS_NATIVE, 'Exec driver not native')

tests/utils_test.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,27 +193,21 @@ def test_ulimit_invalid_type(self):
193193

194194
def test_create_host_config_dict_logconfig(self):
195195
dct = {'type': LogConfig.types.SYSLOG, 'config': {'key1': 'val1'}}
196-
config = create_host_config(
197-
log_config=dct, version=DEFAULT_DOCKER_API_VERSION
198-
)
196+
config = create_host_config(log_config=dct)
199197
self.assertIn('LogConfig', config)
200198
self.assertTrue(isinstance(config['LogConfig'], LogConfig))
201199
self.assertEqual(dct['type'], config['LogConfig'].type)
202200

203201
def test_create_host_config_obj_logconfig(self):
204202
obj = LogConfig(type=LogConfig.types.SYSLOG, config={'key1': 'val1'})
205-
config = create_host_config(
206-
log_config=obj, version=DEFAULT_DOCKER_API_VERSION
207-
)
203+
config = create_host_config(log_config=obj)
208204
self.assertIn('LogConfig', config)
209205
self.assertTrue(isinstance(config['LogConfig'], LogConfig))
210206
self.assertEqual(obj, config['LogConfig'])
211207

212-
def test_logconfig_invalid_type(self):
213-
self.assertRaises(ValueError, lambda: LogConfig(type='xxx', config={}))
214-
self.assertRaises(ValueError, lambda: LogConfig(
215-
type=LogConfig.types.JSON, config='helloworld'
216-
))
208+
def test_logconfig_invalid_config_type(self):
209+
with pytest.raises(ValueError):
210+
LogConfig(type=LogConfig.types.JSON, config='helloworld')
217211

218212
def test_resolve_repository_name(self):
219213
# docker hub library image

0 commit comments

Comments
 (0)