test_host_create.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #
  2. #
  3. # SPDX-License-Identifier: Apache-2.0
  4. #
  5. from unittest.mock import patch
  6. from flask_testing import TestCase
  7. import sys
  8. import os
  9. import logging
  10. import json
  11. sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'src'))
  12. from dashboard import app
  13. from common import log_handler, LOG_LEVEL
  14. logger = logging.getLogger(__name__)
  15. logger.setLevel(LOG_LEVEL)
  16. logger.addHandler(log_handler)
  17. MOCK_HOST="1.1.1.1:1111"
  18. def check_daemon_stub(worker_api, timeout=5):
  19. return True
  20. def docker_stub(worker_api):
  21. return "docker"
  22. def swarm_stub(worker_api):
  23. return "swarm"
  24. def setup_container_host_stub(*args, **kargs):
  25. return True
  26. def cleanup_stub(*args, **kargs):
  27. return True
  28. @patch("agent.docker.host.check_daemon", check_daemon_stub)
  29. @patch("agent.docker.host.setup_container_host", check_daemon_stub)
  30. @patch("agent.docker.host.cleanup_host", cleanup_stub)
  31. class HostCreateTest(TestCase):
  32. def create_app(self):
  33. """
  34. Create a flask web app
  35. :return: flask web app object
  36. """
  37. app.config['TESTING'] = True
  38. app.config['LOGIN_DISABLED'] = True
  39. app.config['PRESERVE_CONTEXT_ON_EXCEPTION'] = False
  40. return app
  41. def _remove_all_hosts(self):
  42. res = self.client.get('/api/hosts')
  43. hosts = res.data.decode('utf-8')
  44. hosts = json.loads(hosts)
  45. for h in hosts['data']:
  46. self.client.delete('/api/host', data=dict(id=h['id']))
  47. @patch("resources.host_api.detect_daemon_type", swarm_stub)
  48. @patch("agent.docker.host.detect_daemon_type", swarm_stub)
  49. def test_swarm_host_create_on_swarm(self):
  50. '''
  51. create a swarm host successfully if it's really a swarm host
  52. '''
  53. self._remove_all_hosts()
  54. res = self._test_host_create("swarm")
  55. self.assert200(res, "create {} swarm host test failed".format("swarm"))
  56. @patch("resources.host_api.detect_daemon_type", docker_stub)
  57. @patch("agent.docker.host.detect_daemon_type", docker_stub)
  58. def test_swarm_host_create_on_docker(self):
  59. '''
  60. create a swarm host failed if it's a docker host
  61. '''
  62. self._remove_all_hosts()
  63. res = self._test_host_create("swarm")
  64. self.assert400(res, "create {} swarm host should failed if it's a docker host".format("swarm"))
  65. @patch("resources.host_api.detect_daemon_type", docker_stub)
  66. @patch("agent.docker.host.detect_daemon_type", docker_stub)
  67. def test_docker_host_create_docker(self):
  68. '''
  69. create a docker host successfully if it's really a docker host
  70. '''
  71. self._remove_all_hosts()
  72. res = self._test_host_create("docker")
  73. self.assert200(res, "create {} docker host test failed".format("docker"))
  74. @patch("resources.host_api.detect_daemon_type", swarm_stub)
  75. @patch("agent.docker.host.detect_daemon_type", swarm_stub)
  76. def test_docker_host_create_on_swarm(self):
  77. '''
  78. create a docker host failed if it's a swarm host
  79. '''
  80. self._remove_all_hosts()
  81. res = self._test_host_create("docker")
  82. self.assert400(res, "create {} docker host should failed if it's a swarm host".format("docker"))
  83. @patch("resources.host_api.detect_daemon_type", docker_stub)
  84. @patch("agent.docker.host.detect_daemon_type", docker_stub)
  85. def test_docker_host_create_auto_detect(self):
  86. '''
  87. create a docker host and do not specify the host_type
  88. '''
  89. self._remove_all_hosts()
  90. res = self._test_host_create("docker")
  91. self.assert200(res, "create {} host test without host_type specified failed".format("docker"))
  92. def _test_host_create(self, host_type):
  93. """
  94. Test create a host with host_type
  95. """
  96. return self.client.post("/api/host",
  97. data=dict(
  98. name="test_host",
  99. worker_api=MOCK_HOST,
  100. capacity=5,
  101. log_type="local",
  102. log_server="",
  103. log_level="INFO",
  104. host_type=host_type
  105. ),
  106. follow_redirects=True)