service_test.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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:1000:2000/udp")
  30. self.assertEqual(internal_port, "2000/udp")
  31. self.assertEqual(external_port, ("127.0.0.1", "1000"))
  32. internal_port, external_port = split_port("127.0.0.1::2000")
  33. self.assertEqual(internal_port, "2000")
  34. self.assertEqual(external_port, ("127.0.0.1",))
  35. internal_port, external_port = split_port("1000:2000")
  36. self.assertEqual(internal_port, "2000")
  37. self.assertEqual(external_port, "1000")
  38. def test_split_domainname_none(self):
  39. service = Service('foo',
  40. hostname = 'name',
  41. )
  42. service.next_container_name = lambda x: 'foo'
  43. opts = service._get_container_create_options({})
  44. self.assertEqual(opts['hostname'], 'name', 'hostname')
  45. self.assertFalse('domainname' in opts, 'domainname')
  46. def test_split_domainname_fqdn(self):
  47. service = Service('foo',
  48. hostname = 'name.domain.tld',
  49. )
  50. service.next_container_name = lambda x: 'foo'
  51. opts = service._get_container_create_options({})
  52. self.assertEqual(opts['hostname'], 'name', 'hostname')
  53. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
  54. def test_split_domainname_both(self):
  55. service = Service('foo',
  56. hostname = 'name',
  57. domainname = 'domain.tld',
  58. )
  59. service.next_container_name = lambda x: 'foo'
  60. opts = service._get_container_create_options({})
  61. self.assertEqual(opts['hostname'], 'name', 'hostname')
  62. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
  63. def test_split_domainname_weird(self):
  64. service = Service('foo',
  65. hostname = 'name.sub',
  66. domainname = 'domain.tld',
  67. )
  68. service.next_container_name = lambda x: 'foo'
  69. opts = service._get_container_create_options({})
  70. self.assertEqual(opts['hostname'], 'name.sub', 'hostname')
  71. self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')