aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_defs/docker/create_image_config_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build_defs/docker/create_image_config_test.py')
-rw-r--r--tools/build_defs/docker/create_image_config_test.py603
1 files changed, 603 insertions, 0 deletions
diff --git a/tools/build_defs/docker/create_image_config_test.py b/tools/build_defs/docker/create_image_config_test.py
new file mode 100644
index 0000000000..e01a17c398
--- /dev/null
+++ b/tools/build_defs/docker/create_image_config_test.py
@@ -0,0 +1,603 @@
+# Copyright 2016 The Bazel Authors. 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.
+"""Testing for create_image_config."""
+
+import unittest
+
+from tools.build_defs.docker.create_image_config import _OPERATING_SYSTEM
+from tools.build_defs.docker.create_image_config import _PROCESSOR_ARCHITECTURE
+from tools.build_defs.docker.create_image_config import ConfigOptions
+from tools.build_defs.docker.create_image_config import CreateImageConfig
+
+
+class CreateImageConfigTest(unittest.TestCase):
+ """Testing for create_image_config."""
+
+ base_expected = {
+ 'created': '0001-01-01T00:00:00Z',
+ 'author': 'Bazel',
+ 'architecture': _PROCESSOR_ARCHITECTURE,
+ 'os': _OPERATING_SYSTEM,
+ 'config': {},
+ 'rootfs': {'diff_ids': [],
+ 'type': 'layers'},
+ 'history': [{'author': 'Bazel',
+ 'created': '0001-01-01T00:00:00Z',
+ 'created_by': 'bazel build ...'}],
+ }
+
+ def testNewUser(self):
+ in_data = {'config': {'WorkingDir': '/usr/home/mattmoor'}}
+ user = 'mattmoor'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(user=user))
+ self.assertEquals(expected, actual)
+
+ def testOverrideUser(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ }
+ }
+ user = 'mattmoor2'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor2',
+ 'WorkingDir': '/usr/home/mattmoor',
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(user=user))
+ self.assertEquals(expected, actual)
+
+ def testNewEntrypoint(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ entrypoint = ['/bin/bash']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': entrypoint
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(entrypoint=entrypoint))
+ self.assertEquals(expected, actual)
+
+ def testOverrideEntrypoint(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/sh', 'does', 'not', 'matter'],
+ }
+ }
+ entrypoint = ['/bin/bash']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': entrypoint
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(entrypoint=entrypoint))
+ self.assertEquals(expected, actual)
+
+ def testNewCmd(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/bash'],
+ }
+ }
+ cmd = ['/bin/bash']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/bash'],
+ 'Cmd': cmd
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(cmd=cmd))
+ self.assertEquals(expected, actual)
+
+ def testOverrideCmd(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/bash'],
+ 'Cmd': ['does', 'not', 'matter'],
+ }
+ }
+ cmd = ['does', 'matter']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/bash'],
+ 'Cmd': cmd
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(cmd=cmd))
+ self.assertEquals(expected, actual)
+
+ def testOverrideBoth(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': ['/bin/sh'],
+ 'Cmd': ['does', 'not', 'matter'],
+ }
+ }
+ entrypoint = ['/bin/bash', '-c']
+ cmd = ['my-command', 'my-arg1', 'my-arg2']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Entrypoint': entrypoint,
+ 'Cmd': cmd
+ },
+ })
+
+ actual = CreateImageConfig(in_data,
+ ConfigOptions(entrypoint=entrypoint,
+ cmd=cmd))
+ self.assertEquals(expected, actual)
+
+ def testStripContainerConfig(self):
+ in_data = {'container_config': {},}
+ expected = self.base_expected.copy()
+
+ actual = CreateImageConfig(in_data, ConfigOptions())
+ self.assertEquals(expected, actual)
+
+ def testEmptyBase(self):
+ in_data = {}
+ entrypoint = ['/bin/bash', '-c']
+ cmd = ['my-command', 'my-arg1', 'my-arg2']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'Entrypoint': entrypoint,
+ 'Cmd': cmd,
+ 'ExposedPorts': {
+ '80/tcp': {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data,
+ ConfigOptions(entrypoint=entrypoint,
+ cmd=cmd,
+ ports=['80']))
+ self.assertEquals(expected, actual)
+
+ def testNewPort(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ port = '80'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ port + '/tcp': {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(ports=[port]))
+ self.assertEquals(expected, actual)
+
+ def testAugmentPort(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ '443/tcp': {}
+ }
+ }
+ }
+ port = '80'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ '443/tcp': {},
+ port + '/tcp': {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(ports=[port]))
+ self.assertEquals(expected, actual)
+
+ def testMultiplePorts(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ port1 = '80'
+ port2 = '8080'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ port1 + '/tcp': {},
+ port2 + '/tcp': {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(ports=[port1, port2]))
+ self.assertEquals(expected, actual)
+
+ def testPortCollision(self):
+ port = '80'
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ port + '/tcp': {}
+ }
+ }
+ }
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ port + '/tcp': {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(ports=[port]))
+ self.assertEquals(expected, actual)
+
+ def testPortWithProtocol(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ port = '80/tcp'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'ExposedPorts': {
+ port: {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(ports=[port]))
+ self.assertEquals(expected, actual)
+
+ def testNewVolume(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ volume = '/logs'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': {
+ volume: {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(volumes=[volume]))
+ self.assertEquals(expected, actual)
+
+ def testAugmentVolume(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': {
+ '/original': {}
+ }
+ }
+ }
+ volume = '/data'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': {
+ '/original': {},
+ volume: {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(volumes=[volume]))
+ self.assertEquals(expected, actual)
+
+ def testMultipleVolumes(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ volume1 = '/input'
+ volume2 = '/output'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': {
+ volume1: {},
+ volume2: {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data,
+ ConfigOptions(volumes=[volume1, volume2]))
+ self.assertEquals(expected, actual)
+
+ def testEnv(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ env = {'baz': 'blah',
+ 'foo': 'bar',}
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Env': [
+ 'baz=blah',
+ 'foo=bar',
+ ],
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(env=env))
+ self.assertEquals(expected, actual)
+
+ def testEnvResolveReplace(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Env': [
+ 'foo=bar',
+ 'baz=blah',
+ 'blah=still around',
+ ],
+ }
+ }
+ env = {'baz': 'replacement',
+ 'foo': '$foo:asdf',}
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Env': [
+ 'baz=replacement',
+ 'blah=still around',
+ 'foo=bar:asdf',
+ ],
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(env=env))
+ self.assertEquals(expected, actual)
+
+ def testLabel(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor'
+ }
+ }
+ labels = {'baz': 'blah',
+ 'foo': 'bar',}
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Label': [
+ 'baz=blah',
+ 'foo=bar',
+ ],
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(labels=labels))
+ self.assertEquals(expected, actual)
+
+ def testAugmentLabel(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Label': [
+ 'baz=blah',
+ 'blah=still around',
+ ],
+ }
+ }
+ labels = {'baz': 'replacement',
+ 'foo': 'bar',}
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Label': [
+ 'baz=replacement',
+ 'blah=still around',
+ 'foo=bar',
+ ],
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(labels=labels))
+ self.assertEquals(expected, actual)
+
+ def testAugmentVolumeWithNullInput(self):
+ in_data = {
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': None,
+ }
+ }
+ volume = '/data'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'mattmoor',
+ 'WorkingDir': '/usr/home/mattmoor',
+ 'Volumes': {
+ volume: {}
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(volumes=[volume]))
+ self.assertEquals(expected, actual)
+
+ def testSetWorkingDir(self):
+ in_data = {
+ 'config': {
+ 'User': 'bleh',
+ 'WorkingDir': '/home/bleh',
+ 'Volumes': {
+ }
+ }
+ }
+ workdir = '/some/path'
+ expected = self.base_expected.copy()
+ expected.update({
+ 'config': {
+ 'User': 'bleh',
+ 'WorkingDir': '/some/path',
+ 'Volumes': {
+ }
+ },
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(workdir=workdir))
+ self.assertEquals(expected, actual)
+
+ def testLayersAddedToDiffIds(self):
+ initial_diff_ids = [
+ 'sha256:1',
+ 'sha256:2',
+ ]
+ in_data = {
+ 'rootfs': {
+ 'type': 'layers',
+ 'diff_ids': initial_diff_ids,
+ }
+ }
+ layers = ['3', '4']
+ expected = self.base_expected.copy()
+ expected.update({
+ 'rootfs': {
+ 'type': 'layers',
+ 'diff_ids': initial_diff_ids + ['sha256:%s' % l for l in layers],
+ }
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions(layers=layers))
+ self.assertEquals(expected, actual)
+
+ def testHistoryAdded(self):
+ in_data = self.base_expected.copy()
+ expected = self.base_expected.copy()
+ expected.update({
+ 'history': [
+ {
+ 'author': 'Bazel',
+ 'created': '0001-01-01T00:00:00Z',
+ 'created_by': 'bazel build ...'
+ }, {
+ 'author': 'Bazel',
+ 'created': '0001-01-01T00:00:00Z',
+ 'created_by': 'bazel build ...'
+ }
+ ]
+ })
+
+ actual = CreateImageConfig(in_data, ConfigOptions())
+ self.assertEquals(expected, actual)
+
+
+if __name__ == '__main__':
+ unittest.main()