service_test.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from __future__ import unicode_literals
  2. from __future__ import absolute_import
  3. from .. import unittest
  4. from fig import Service
  5. from fig.service import ConfigError, split_port
  6. class ServiceTest(unittest.TestCase):
  7. def test_name_validations(self):
  8. self.assertRaises(ConfigError, lambda: Service(name=''))
  9. self.assertRaises(ConfigError, lambda: Service(name=' '))
  10. self.assertRaises(ConfigError, lambda: Service(name='/'))
  11. self.assertRaises(ConfigError, lambda: Service(name='!'))
  12. self.assertRaises(ConfigError, lambda: Service(name='\xe2'))
  13. self.assertRaises(ConfigError, lambda: Service(name='_'))
  14. self.assertRaises(ConfigError, lambda: Service(name='____'))
  15. self.assertRaises(ConfigError, lambda: Service(name='foo_bar'))
  16. self.assertRaises(ConfigError, lambda: Service(name='__foo_bar__'))
  17. Service('a')
  18. Service('foo')
  19. def test_project_validation(self):
  20. self.assertRaises(ConfigError, lambda: Service(name='foo', project='_'))
  21. Service(name='foo', project='bar')
  22. def test_config_validation(self):
  23. self.assertRaises(ConfigError, lambda: Service(name='foo', port=['8000']))
  24. Service(name='foo', ports=['8000'])
  25. def test_split_port(self):
  26. internal_port, external_port = split_port("127.0.0.1:1000:2000")
  27. self.assertEqual(internal_port, "2000")
  28. self.assertEqual(external_port, ("127.0.0.1", "1000"))
  29. internal_port, external_port = split_port("127.0.0.1::2000")
  30. self.assertEqual(internal_port, "2000")
  31. self.assertEqual(external_port, ("127.0.0.1",))
  32. internal_port, external_port = split_port("1000:2000")
  33. self.assertEqual(internal_port, "2000")
  34. self.assertEqual(external_port, "1000")
  35. def test_split_domainname_none(self):
  36. service = Service('foo',
  37. hostname = 'name',
  38. )
  39. service.next_container_name = lambda x: 'foo'
  40. opts = service._get_container_create_options({})
  41. self.assertEqual(opts['hostname'], 'name', 'hostname')
  42. self.assertFalse('domainname' in opts, 'domainname')
  43. def test_split_domainname_fqdn(self):
  44. service = Service('foo',
  45. hostname = 'name.domain.tld',
  46. )
  47. service.next_container_name = lambda x: 'foo'
  48. opts = service._get_container_create_options({})
  49. self.assertEqual(opts['hostname'], 'name', 'hostname')
  50. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
  51. def test_split_domainname_both(self):
  52. service = Service('foo',
  53. hostname = 'name',
  54. domainname = 'domain.tld',
  55. )
  56. service.next_container_name = lambda x: 'foo'
  57. opts = service._get_container_create_options({})
  58. self.assertEqual(opts['hostname'], 'name', 'hostname')
  59. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
  60. def test_split_domainname_weird(self):
  61. service = Service('foo',
  62. hostname = 'name.sub',
  63. domainname = 'domain.tld',
  64. )
  65. service.next_container_name = lambda x: 'foo'
  66. opts = service._get_container_create_options({})
  67. self.assertEqual(opts['hostname'], 'name.sub', 'hostname')
  68. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')