| # Copyright 2015 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 rewrite_json.""" | |
| import unittest | |
| from tools.build_defs.docker.rewrite_json import _DOCKER_VERSION | |
| from tools.build_defs.docker.rewrite_json import _OPERATING_SYSTEM | |
| from tools.build_defs.docker.rewrite_json import _PROCESSOR_ARCHITECTURE | |
| from tools.build_defs.docker.rewrite_json import MetadataOptions | |
| from tools.build_defs.docker.rewrite_json import RewriteMetadata | |
| class RewriteJsonTest(unittest.TestCase): | |
| """Testing for rewrite_json.""" | |
| def testNewEntrypoint(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| entrypoint = ['/bin/bash'] | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': entrypoint | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, entrypoint=entrypoint, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOverrideEntrypoint(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/sh', 'does', 'not', 'matter'], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| entrypoint = ['/bin/bash'] | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': entrypoint | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, entrypoint=entrypoint, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testNewCmd(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/bash'], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| cmd = ['/bin/bash'] | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/bash'], | |
| 'Cmd': cmd | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, cmd=cmd, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOverrideCmd(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/bash'], | |
| 'Cmd': ['does', 'not', 'matter'], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| cmd = ['does', 'matter'] | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/bash'], | |
| 'Cmd': cmd | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, cmd=cmd, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOverrideBoth(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': ['/bin/sh'], | |
| 'Cmd': ['does', 'not', 'matter'], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| entrypoint = ['/bin/bash', '-c'] | |
| cmd = ['my-command', 'my-arg1', 'my-arg2'] | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Entrypoint': entrypoint, | |
| 'Cmd': cmd | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, entrypoint=entrypoint, cmd=cmd, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOverrideParent(self): | |
| name = 'me!' | |
| parent = 'parent' | |
| # In the typical case, we expect the parent to | |
| # come in as the 'id', and our grandparent to | |
| # be its 'parent'. | |
| in_data = { | |
| 'id': parent, | |
| 'parent': 'grandparent', | |
| } | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': {}, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testNewSize(self): | |
| # Size is one of the few fields that, when omitted, | |
| # should be removed. | |
| in_data = { | |
| 'id': 'you', | |
| 'Size': '124', | |
| } | |
| name = 'me' | |
| parent = 'blah' | |
| size = '4321' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'Size': size, | |
| 'config': {}, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, size=size, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOmitSize(self): | |
| # Size is one of the few fields that, when omitted, | |
| # should be removed. | |
| in_data = { | |
| 'id': 'you', | |
| 'Size': '124', | |
| } | |
| name = 'me' | |
| parent = 'blah' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': {}, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testOmitName(self): | |
| # Name is required. | |
| with self.assertRaises(Exception): | |
| RewriteMetadata({}, MetadataOptions(name=None)) | |
| def testStripContainerConfig(self): | |
| # Size is one of the few fields that, when omitted, | |
| # should be removed. | |
| in_data = { | |
| 'id': 'you', | |
| 'container_config': {}, | |
| } | |
| name = 'me' | |
| parent = 'blah' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': {}, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testEmptyBase(self): | |
| in_data = {} | |
| name = 'deadbeef' | |
| entrypoint = ['/bin/bash', '-c'] | |
| cmd = ['my-command', 'my-arg1', 'my-arg2'] | |
| size = '999' | |
| expected = { | |
| 'id': name, | |
| 'config': { | |
| 'Entrypoint': entrypoint, | |
| 'Cmd': cmd, | |
| 'ExposedPorts': { | |
| '80/tcp': {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| 'Size': size, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, entrypoint=entrypoint, cmd=cmd, size=size, | |
| ports=['80'])) | |
| self.assertEquals(expected, actual) | |
| def testOmitParentWithBase(self): | |
| # Our input data should be empty when parent is omitted | |
| in_data = { | |
| 'id': 'you', | |
| } | |
| with self.assertRaises(Exception): | |
| RewriteMetadata(in_data, MetadataOptions(name='me')) | |
| def testNewPort(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| port = '80' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| port + '/tcp': {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, ports=[port])) | |
| self.assertEquals(expected, actual) | |
| def testAugmentPort(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| '443/tcp': {} | |
| } | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| port = '80' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| '443/tcp': {}, | |
| port + '/tcp': {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, ports=[port])) | |
| self.assertEquals(expected, actual) | |
| def testMultiplePorts(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| port1 = '80' | |
| port2 = '8080' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| port1 + '/tcp': {}, | |
| port2 + '/tcp': {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, ports=[port1, port2])) | |
| self.assertEquals(expected, actual) | |
| def testPortCollision(self): | |
| port = '80' | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| port + '/tcp': {} | |
| } | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| port + '/tcp': {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, ports=[port])) | |
| self.assertEquals(expected, actual) | |
| def testPortWithProtocol(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| port = '80/tcp' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'ExposedPorts': { | |
| port: {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, ports=[port])) | |
| self.assertEquals(expected, actual) | |
| def testNewVolume(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| volume = '/logs' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': { | |
| volume: {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, volumes=[volume])) | |
| self.assertEquals(expected, actual) | |
| def testAugmentVolume(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': { | |
| '/original': {} | |
| } | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| volume = '/data' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': { | |
| '/original': {}, | |
| volume: {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, volumes=[volume])) | |
| self.assertEquals(expected, actual) | |
| def testMultipleVolumes(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| volume1 = '/input' | |
| volume2 = '/output' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': { | |
| volume1: {}, | |
| volume2: {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, volumes=[volume1, volume2])) | |
| self.assertEquals(expected, actual) | |
| def testEnv(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| env = {'baz': 'blah', 'foo': 'bar',} | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Env': [ | |
| 'baz=blah', | |
| 'foo=bar', | |
| ], | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, env=env, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testEnvResolveReplace(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Env': [ | |
| 'foo=bar', | |
| 'baz=blah', | |
| 'blah=still around', | |
| ], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| env = {'baz': 'replacement', 'foo': '$foo:asdf',} | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Env': [ | |
| 'baz=replacement', | |
| 'blah=still around', | |
| 'foo=bar:asdf', | |
| ], | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, env=env, parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testLabel(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor' | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| labels = {'baz': 'blah', 'foo': 'bar',} | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Label': [ | |
| 'baz=blah', | |
| 'foo=bar', | |
| ], | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, | |
| MetadataOptions(name=name, | |
| labels=labels, | |
| parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testAugmentLabel(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Label': [ | |
| 'baz=blah', | |
| 'blah=still around', | |
| ], | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| labels = {'baz': 'replacement', 'foo': 'bar',} | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Label': [ | |
| 'baz=replacement', | |
| 'blah=still around', | |
| 'foo=bar', | |
| ], | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, | |
| MetadataOptions(name=name, | |
| labels=labels, | |
| parent=parent)) | |
| self.assertEquals(expected, actual) | |
| def testAugmentVolumeWithNullInput(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': None, | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| volume = '/data' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'mattmoor', | |
| 'WorkingDir': '/usr/home/mattmoor', | |
| 'Volumes': { | |
| volume: {} | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, volumes=[volume])) | |
| self.assertEquals(expected, actual) | |
| def testSetWorkingDir(self): | |
| in_data = { | |
| 'config': { | |
| 'User': 'bleh', | |
| 'WorkingDir': '/home/bleh', | |
| 'Volumes': { | |
| } | |
| } | |
| } | |
| name = 'deadbeef' | |
| parent = 'blah' | |
| workdir = '/some/path' | |
| expected = { | |
| 'id': name, | |
| 'parent': parent, | |
| 'config': { | |
| 'User': 'bleh', | |
| 'WorkingDir': '/some/path', | |
| 'Volumes': { | |
| } | |
| }, | |
| 'docker_version': _DOCKER_VERSION, | |
| 'architecture': _PROCESSOR_ARCHITECTURE, | |
| 'os': _OPERATING_SYSTEM, | |
| } | |
| actual = RewriteMetadata(in_data, MetadataOptions( | |
| name=name, parent=parent, workdir=workdir)) | |
| self.assertEquals(expected, actual) | |
| if __name__ == '__main__': | |
| unittest.main() |