summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-18 21:02:44 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-18 21:07:29 +0100
commitd62b49e35b75bc7afbba98c6725fc45644009e71 (patch)
tree4b1b95242f4fac0f14a511f58c4e5593505d2a4b
parentea198d2439bc20994dd787a86e686e1baf8e1c9e (diff)
downloadick2-d62b49e35b75bc7afbba98c6725fc45644009e71.tar.gz
Refactor: move WorkAPI tests to its own module
-rw-r--r--ick2/controllerapi_tests.py170
-rw-r--r--ick2/workapi_tests.py192
-rw-r--r--without-tests1
3 files changed, 192 insertions, 171 deletions
diff --git a/ick2/controllerapi_tests.py b/ick2/controllerapi_tests.py
index 53ded05..8f9fdcb 100644
--- a/ick2/controllerapi_tests.py
+++ b/ick2/controllerapi_tests.py
@@ -212,173 +212,3 @@ class ProjectAPITests(unittest.TestCase):
api.create(project)
with self.assertRaises(ick2.NotFound):
api.set_pipeline('idle', 'foo', 'build')
-
-
-class WorkAPITests(unittest.TestCase):
-
- def setUp(self):
- self.tempdir = tempfile.mkdtemp()
- self.statedir = os.path.join(self.tempdir, 'state/dir')
- self.state = ick2.ControllerState()
- self.state.set_state_directory(self.statedir)
-
- def tearDown(self):
- shutil.rmtree(self.tempdir)
-
- def create_project_api(self):
- project = {
- 'project': 'foo',
- 'pipelines': [
- {
- 'name': 'build',
- 'actions': [
- {
- 'shell': 'step-1',
- },
- {
- 'shell': 'step-2',
- },
- ],
- },
- ],
- }
- api = ick2.ProjectAPI(self.state)
- api.create(project)
- return api
-
- def create_worker_api(self):
- worker = {
- 'worker': 'asterix',
- }
- api = ick2.WorkerAPI(self.state)
- api.create(worker)
- return api
-
- def create_work_api(self):
- return ick2.WorkAPI(self.state)
-
- def test_worker_gets_no_work_when_no_pipeline_is_triggered(self):
- self.create_project_api()
- self.create_worker_api()
- work = self.create_work_api()
- self.assertEqual(work.get_work('asterix'), {})
-
- def test_worker_gets_work_when_a_pipeline_is_triggered(self):
- projects = self.create_project_api()
- projects.set_pipeline('triggered', 'foo', 'build')
- self.create_worker_api()
- work = self.create_work_api()
- expected = {
- 'build_id': 1,
- 'worker': 'asterix',
- 'project': 'foo',
- 'pipeline': 'build',
- 'step': {
- 'shell': 'step-1',
- },
- 'step_index': 0,
- 'log': '/logs/1',
- }
- self.assertEqual(work.get_work('asterix'), expected)
-
- # Check we get the same thing twice.
- self.assertEqual(work.get_work('asterix'), expected)
-
- def test_worker_manager_posts_work_updates(self):
- projects = self.create_project_api()
- projects.set_pipeline('triggered', 'foo', 'build')
- self.create_worker_api()
- work = self.create_work_api()
-
- # Ask for some work.
- expected = {
- 'build_id': 1,
- 'worker': 'asterix',
- 'project': 'foo',
- 'pipeline': 'build',
- 'step': {
- 'shell': 'step-1',
- },
- 'step_index': 0,
- 'log': '/logs/1',
- }
- self.assertEqual(work.get_work('asterix'), expected)
-
- # Post a partial update.
- done = {
- 'build_id': 1,
- 'worker': 'asterix',
- 'project': 'foo',
- 'pipeline': 'build',
- 'exit_code': None,
- 'stdout': 'out',
- 'stderr': 'err',
- 'timestamp': '2000-01-01T00:00:00',
- }
- work.update_work(done)
-
- # Ask for work again. We didn't finish the previous step, so
- # should get same thing.
- self.assertEqual(work.get_work('asterix'), expected)
-
- # Finish the step.
- done['exit_code'] = 0
- work.update_work(done)
-
- # We should get the next step now.
- expected['step'] = {'shell': 'step-2'}
- expected['step_index'] = 1
- self.assertEqual(work.get_work('asterix'), expected)
-
- # Finish the step.
- done['exit_code'] = 0
- work.update_work(done)
-
- # We now get nothing further to do.
- self.assertEqual(work.get_work('asterix'), {})
-
- # An pipeline status has changed.
- self.assertEqual(
- projects.get_pipeline('foo', 'build'),
- {'status': 'idle'})
-
- def test_worker_manager_posts_failure(self):
- projects = self.create_project_api()
- projects.set_pipeline('triggered', 'foo', 'build')
- self.create_worker_api()
- work = self.create_work_api()
-
- # Ask for some work.
- expected = {
- 'build_id': 1,
- 'worker': 'asterix',
- 'project': 'foo',
- 'pipeline': 'build',
- 'step': {
- 'shell': 'step-1',
- },
- 'step_index': 0,
- 'log': '/logs/1',
- }
- self.assertEqual(work.get_work('asterix'), expected)
-
- # Post a partial update.
- done = {
- 'build_id': 1,
- 'worker': 'asterix',
- 'project': 'foo',
- 'pipeline': 'build',
- 'exit_code': 1,
- 'stdout': 'out',
- 'stderr': 'err',
- 'timestamp': '2000-01-01T00:00:00',
- }
- work.update_work(done)
-
- # Ask for work again.
- self.assertEqual(work.get_work('asterix'), {})
-
- # An pipeline status has changed.
- self.assertEqual(
- projects.get_pipeline('foo', 'build'),
- {'status': 'idle'})
diff --git a/ick2/workapi_tests.py b/ick2/workapi_tests.py
new file mode 100644
index 0000000..03b25e7
--- /dev/null
+++ b/ick2/workapi_tests.py
@@ -0,0 +1,192 @@
+# Copyright (C) 2017 Lars Wirzenius
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import os
+import shutil
+import tempfile
+import unittest
+
+
+import ick2
+
+
+class WorkAPITests(unittest.TestCase):
+
+ def setUp(self):
+ self.tempdir = tempfile.mkdtemp()
+ self.statedir = os.path.join(self.tempdir, 'state/dir')
+ self.state = ick2.ControllerState()
+ self.state.set_state_directory(self.statedir)
+
+ def tearDown(self):
+ shutil.rmtree(self.tempdir)
+
+ def create_project_api(self):
+ project = {
+ 'project': 'foo',
+ 'pipelines': [
+ {
+ 'name': 'build',
+ 'actions': [
+ {
+ 'shell': 'step-1',
+ },
+ {
+ 'shell': 'step-2',
+ },
+ ],
+ },
+ ],
+ }
+ api = ick2.ProjectAPI(self.state)
+ api.create(project)
+ return api
+
+ def create_worker_api(self):
+ worker = {
+ 'worker': 'asterix',
+ }
+ api = ick2.WorkerAPI(self.state)
+ api.create(worker)
+ return api
+
+ def create_work_api(self):
+ return ick2.WorkAPI(self.state)
+
+ def test_worker_gets_no_work_when_no_pipeline_is_triggered(self):
+ self.create_project_api()
+ self.create_worker_api()
+ work = self.create_work_api()
+ self.assertEqual(work.get_work('asterix'), {})
+
+ def test_worker_gets_work_when_a_pipeline_is_triggered(self):
+ projects = self.create_project_api()
+ projects.set_pipeline('triggered', 'foo', 'build')
+ self.create_worker_api()
+ work = self.create_work_api()
+ expected = {
+ 'build_id': 1,
+ 'worker': 'asterix',
+ 'project': 'foo',
+ 'pipeline': 'build',
+ 'step': {
+ 'shell': 'step-1',
+ },
+ 'step_index': 0,
+ 'log': '/logs/1',
+ }
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ # Check we get the same thing twice.
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ def test_worker_manager_posts_work_updates(self):
+ projects = self.create_project_api()
+ projects.set_pipeline('triggered', 'foo', 'build')
+ self.create_worker_api()
+ work = self.create_work_api()
+
+ # Ask for some work.
+ expected = {
+ 'build_id': 1,
+ 'worker': 'asterix',
+ 'project': 'foo',
+ 'pipeline': 'build',
+ 'step': {
+ 'shell': 'step-1',
+ },
+ 'step_index': 0,
+ 'log': '/logs/1',
+ }
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ # Post a partial update.
+ done = {
+ 'build_id': 1,
+ 'worker': 'asterix',
+ 'project': 'foo',
+ 'pipeline': 'build',
+ 'exit_code': None,
+ 'stdout': 'out',
+ 'stderr': 'err',
+ 'timestamp': '2000-01-01T00:00:00',
+ }
+ work.update_work(done)
+
+ # Ask for work again. We didn't finish the previous step, so
+ # should get same thing.
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ # Finish the step.
+ done['exit_code'] = 0
+ work.update_work(done)
+
+ # We should get the next step now.
+ expected['step'] = {'shell': 'step-2'}
+ expected['step_index'] = 1
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ # Finish the step.
+ done['exit_code'] = 0
+ work.update_work(done)
+
+ # We now get nothing further to do.
+ self.assertEqual(work.get_work('asterix'), {})
+
+ # An pipeline status has changed.
+ self.assertEqual(
+ projects.get_pipeline('foo', 'build'),
+ {'status': 'idle'})
+
+ def test_worker_manager_posts_failure(self):
+ projects = self.create_project_api()
+ projects.set_pipeline('triggered', 'foo', 'build')
+ self.create_worker_api()
+ work = self.create_work_api()
+
+ # Ask for some work.
+ expected = {
+ 'build_id': 1,
+ 'worker': 'asterix',
+ 'project': 'foo',
+ 'pipeline': 'build',
+ 'step': {
+ 'shell': 'step-1',
+ },
+ 'step_index': 0,
+ 'log': '/logs/1',
+ }
+ self.assertEqual(work.get_work('asterix'), expected)
+
+ # Post a partial update.
+ done = {
+ 'build_id': 1,
+ 'worker': 'asterix',
+ 'project': 'foo',
+ 'pipeline': 'build',
+ 'exit_code': 1,
+ 'stdout': 'out',
+ 'stderr': 'err',
+ 'timestamp': '2000-01-01T00:00:00',
+ }
+ work.update_work(done)
+
+ # Ask for work again.
+ self.assertEqual(work.get_work('asterix'), {})
+
+ # An pipeline status has changed.
+ self.assertEqual(
+ projects.get_pipeline('foo', 'build'),
+ {'status': 'idle'})
diff --git a/without-tests b/without-tests
index 61419a0..cfe0b60 100644
--- a/without-tests
+++ b/without-tests
@@ -7,5 +7,4 @@ ick2/logging.py
ick2/projectapi.py
ick2/responses.py
ick2/version.py
-ick2/workapi.py
ick2/workerapi.py