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.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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', '--user=root', '-d', 'hello-world', '/hello', 'foobar']
  33. yield check, ['docker', 'run', '--name=test123', '--net=host', '--user=root:root', '-d', 'hello-world']
  34. yield check, ['docker', 'run', '--name=test123', '--volume=/dev/null:/null', '--volume=/dev/urandom:/mnt/random', '-d', 'hello-world']
  35. yield check, ['docker', 'run', '--label=com.example=123 456', '--name=test123', '-d', 'hello-world']
  36. yield check, ['docker', 'run', '--label=com.example.1', '--label=com.example.2=345', '--name=test123', '-d', 'hello-world']
  37. yield check, ['docker', 'run', '--link=testA:bar', '--link=testB', '--name=test123', '-d', 'hello-world']
  38. @with_setup(setup, teardown)
  39. def test_modifiers():
  40. yield (check,
  41. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  42. ['--image', 'tutum/hello-world'],
  43. ['docker', 'run', '--name=test123', '-d', 'tutum/hello-world'])
  44. yield (check,
  45. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  46. ['--image', 'hello-world:latest'],
  47. ['docker', 'run', '--name=test123', '-d', 'hello-world:latest'])
  48. yield (check,
  49. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  50. ['--port', '123:456'],
  51. ['docker', 'run', '--name=test123', '-d', '-p=123:456', 'hello-world'])
  52. yield (check,
  53. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  54. ['--port', '123:456', '-p', '80'],
  55. ['docker', 'run', '--name=test123', '-d', '-p=123:456', '-p=80', 'hello-world'])
  56. yield (check,
  57. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  58. ['--tag', 'latest'],
  59. ['docker', 'run', '--name=test123', '-d', 'hello-world:latest'])
  60. @with_setup(setup_each, teardown_each)
  61. def check(command, args=[], expected=None):
  62. _run(command)
  63. output = StringIO()
  64. docker_rerun.main(['--dry-run', 'test123'] + args, output)
  65. output = output.getvalue().splitlines()
  66. expected = ' '.join(expected or command)
  67. assert output[3] == expected, 'Expected "%s" but got "%s"' % (expected, output[3])