Utility to re-run a docker container with slightly different arguments
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test.py 3.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/python3
  2. import docker_rerun
  3. import subprocess
  4. from io import StringIO
  5. from nose.tools import with_setup
  6. def _run(cmd):
  7. subprocess.call(cmd,
  8. stdout=subprocess.DEVNULL,
  9. stderr=subprocess.DEVNULL)
  10. def setup():
  11. _run(['docker', 'run', '--name=testA', '-d', 'hello-world'])
  12. _run(['docker', 'run', '--name=testB', '-d', 'hello-world'])
  13. def teardown():
  14. _run(['docker', 'rm', '-f', 'testA'])
  15. _run(['docker', 'rm', '-f', 'testB'])
  16. def setup_each():
  17. _run(['docker', 'rm', '-f', 'test123'])
  18. def teardown_each():
  19. _run(['docker', 'rm', '-f', 'test123'])
  20. @with_setup(setup, teardown)
  21. def test_command_matches():
  22. yield check, ['docker', 'run', '--name=test123', '-d', 'hello-world']
  23. yield check, ['docker', 'run', '--name=test123', '-d', 'hello-world:latest']
  24. yield check, ['docker', 'run', '--name=test123', '-d', 'hello-world', '/hello', 'world...']
  25. yield check, ['docker', 'run', '--env=PATH=/root', '--env=Z=X', '--name=test123', '-d', 'hello-world']
  26. yield check, ['docker', 'run', '--env=FOO=bar baz', '--name=test123', '-d', 'hello-world']
  27. yield check, ['docker', 'run', '--name=test123', '--restart=always', '-d', 'hello-world']
  28. yield check, ['docker', 'run', '--name=test123', '--restart=on-failure:10', '-d', 'hello-world']
  29. yield check, ['docker', 'run', '--name=test123', '--net=host', '-d', 'hello-world']
  30. yield check, ['docker', 'run', '--name=test123', '-d', '-p=127.0.0.1:443:443', '-p=127.0.0.1::1336/udp', 'hello-world']
  31. yield check, ['docker', 'run', '--name=test123', '-d', '-p=443', 'hello-world']
  32. yield check, ['docker', 'run', '--name=test123', '-d', '-p=80:80', '-p=90', 'hello-world']
  33. yield check, ['docker', 'run', '--name=test123', '--user=root', '-d', 'hello-world', '/hello', 'foobar']
  34. yield check, ['docker', 'run', '--name=test123', '--net=host', '--user=root:root', '-d', 'hello-world']
  35. yield check, ['docker', 'run', '--name=test123', '--volume=/dev/null:/null', '--volume=/dev/urandom:/mnt/random', '-d', 'hello-world']
  36. yield check, ['docker', 'run', '--label=com.example=123 456', '--name=test123', '-d', 'hello-world']
  37. yield check, ['docker', 'run', '--label=com.example.1', '--label=com.example.2=345', '--name=test123', '-d', 'hello-world']
  38. yield check, ['docker', 'run', '--link=testA:bar', '--link=testB', '--name=test123', '-d', 'hello-world']
  39. @with_setup(setup, teardown)
  40. def test_modifiers():
  41. yield (check,
  42. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  43. ['--image', 'tutum/hello-world'],
  44. ['docker', 'run', '--name=test123', '-d', 'tutum/hello-world'])
  45. yield (check,
  46. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  47. ['--image', 'hello-world:latest'],
  48. ['docker', 'run', '--name=test123', '-d', 'hello-world:latest'])
  49. yield (check,
  50. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  51. ['--port', '123:456'],
  52. ['docker', 'run', '--name=test123', '-d', '-p=123:456', 'hello-world'])
  53. yield (check,
  54. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  55. ['--port', '123:456', '-p', '80'],
  56. ['docker', 'run', '--name=test123', '-d', '-p=123:456', '-p=80', 'hello-world'])
  57. yield (check,
  58. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  59. ['--tag', 'latest'],
  60. ['docker', 'run', '--name=test123', '-d', 'hello-world:latest'])
  61. @with_setup(setup_each, teardown_each)
  62. def check(command, args=[], expected=None):
  63. _run(command)
  64. output = StringIO()
  65. docker_rerun.main(['--dry-run', 'test123'] + args, output)
  66. output = output.getvalue().splitlines()
  67. expected = ' '.join(expected or command)
  68. assert output[3] == expected, 'Expected "%s" but got "%s"' % (expected, output[3])