diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-11-18 21:02:44 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-11-18 21:07:29 +0100 |
commit | d62b49e35b75bc7afbba98c6725fc45644009e71 (patch) | |
tree | 4b1b95242f4fac0f14a511f58c4e5593505d2a4b | |
parent | ea198d2439bc20994dd787a86e686e1baf8e1c9e (diff) | |
download | ick2-d62b49e35b75bc7afbba98c6725fc45644009e71.tar.gz |
Refactor: move WorkAPI tests to its own module
-rw-r--r-- | ick2/controllerapi_tests.py | 170 | ||||
-rw-r--r-- | ick2/workapi_tests.py | 192 | ||||
-rw-r--r-- | without-tests | 1 |
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 |