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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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', '--network=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', '--network=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. yield (check,
  62. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  63. ['--network', 'none'],
  64. ['docker', 'run', '--name=test123', '--network=none', '-d', 'hello-world'])
  65. yield (check,
  66. ['docker', 'run', '--name=test123', '--network=host', '-d', 'hello-world'],
  67. ['--network', 'none'],
  68. ['docker', 'run', '--name=test123', '--network=none', '-d', 'hello-world'])
  69. yield (check,
  70. ['docker', 'run', '--name=test123', '-d', 'hello-world'],
  71. ['--label', 'testLabel'],
  72. ['docker', 'run', '--label=testLabel', '--name=test123', '-d', 'hello-world'])
  73. yield (check,
  74. ['docker', 'run', '--label=test', '--name=test123', '-d', 'hello-world'],
  75. ['--label', 'test2'],
  76. ['docker', 'run', '--label=test', '--label=test2', '--name=test123', '-d', 'hello-world'])
  77. yield (check,
  78. ['docker', 'run', '--label=test=1', '--name=test123', '-d', 'hello-world'],
  79. ['--label', 'test=2'],
  80. ['docker', 'run', '--label=test=2', '--name=test123', '-d', 'hello-world'])
  81. @with_setup(setup_each, teardown_each)
  82. def check(command, args=[], expected=None):
  83. _run(command)
  84. output = StringIO()
  85. docker_rerun.main(['--dry-run', 'test123'] + args, output)
  86. output = output.getvalue().splitlines()
  87. expected = ' '.join(expected or command)
  88. assert output[3] == expected, 'Expected "%s" but got "%s"' % (expected, output[3])