summaryrefslogtreecommitdiff
path: root/ick2/workapi_tests.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@exolobe1>2018-05-13 15:30:23 +0300
committerLars Wirzenius <liw@liw.fi>2018-05-17 21:44:59 +0300
commitb11d31ef23c5dfee6bfa54afbec47fc8b8bab7b1 (patch)
tree2e6b085f8fb023d53c8ac20a97aef2c7d1c11d4b /ick2/workapi_tests.py
parent531dd2c50bfdfcf50bb37f57cf9fc2b69787adcf (diff)
downloadick2-b11d31ef23c5dfee6bfa54afbec47fc8b8bab7b1.tar.gz
Change: how controller stores persistent data
Replace old State class with new FilePersistentState and TransactionalState classes. Use new Resource class instead of raw dicts. Use context managers for creating, updating resources, to avoid mistakes from accidentally not saving changes. Overall persistence should now be rather simpler. This should open up a possibility for changing the controller to insert more actions into the build graph, to trigger notifcations via the workers.
Diffstat (limited to 'ick2/workapi_tests.py')
-rw-r--r--ick2/workapi_tests.py35
1 files changed, 16 insertions, 19 deletions
diff --git a/ick2/workapi_tests.py b/ick2/workapi_tests.py
index 1c08a61..05e91a0 100644
--- a/ick2/workapi_tests.py
+++ b/ick2/workapi_tests.py
@@ -27,8 +27,8 @@ 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)
+ self.state = ick2.FilePersistentState()
+ self.state.set_directory(self.statedir)
def tearDown(self):
shutil.rmtree(self.tempdir)
@@ -58,7 +58,7 @@ class WorkAPITests(unittest.TestCase):
def create_worker_api(self):
worker = {
- 'this': 'that',
+ 'doing': {},
}
claims = {
'aud': 'asterix',
@@ -70,16 +70,16 @@ class WorkAPITests(unittest.TestCase):
def create_work_api(self):
return ick2.WorkAPI(self.state)
- def test_worker_gets_no_work_when_no_pipeline_is_triggered(self):
+ def test_worker_gets_no_work_when_no_builds_have_been_triggered(self):
self.create_project_api()
self.create_worker_api()
work = self.create_work_api()
claims = {'aud': 'asterix'}
self.assertEqual(work.get_work(claims=claims), {})
- def test_worker_gets_work_when_a_pipeline_is_triggered(self):
+ def test_worker_gets_work_when_a_build_has_been_triggered(self):
projects = self.create_project_api()
- projects.set_status('foo', 'triggered')
+ projects.trigger_project('foo')
self.create_worker_api()
work = self.create_work_api()
expected = {
@@ -105,10 +105,16 @@ class WorkAPITests(unittest.TestCase):
def test_worker_manager_posts_work_updates(self):
projects = self.create_project_api()
- projects.set_status('foo', 'triggered')
self.create_worker_api()
work = self.create_work_api()
+ # No builds have been triggered, nothing to do.
+ claims = {'aud': 'asterix'}
+ self.assertEqual(work.get_work(claims=claims), {})
+
+ # Trigger a build.
+ projects.trigger_project('foo')
+
# Ask for some work.
expected = {
'build_id': 'foo/1',
@@ -149,8 +155,9 @@ class WorkAPITests(unittest.TestCase):
work.update_work(done)
# We should get the next step now.
+ got = work.get_work(claims=claims)
expected['step'] = {'shell': 'step-1', 'where': 'host'}
- self.assertEqual(work.get_work(claims=claims), expected)
+ self.assertEqual(got, expected)
# Finish the step.
done['exit_code'] = 0
@@ -167,14 +174,9 @@ class WorkAPITests(unittest.TestCase):
# We now get nothing further to do.
self.assertEqual(work.get_work(claims=claims), {})
- # An pipeline status has changed.
- self.assertEqual(
- projects.get_status('foo'),
- {'status': 'idle'})
-
def test_worker_manager_posts_failure(self):
projects = self.create_project_api()
- projects.set_status('foo', 'triggered')
+ projects.trigger_project('foo')
self.create_worker_api()
work = self.create_work_api()
@@ -211,8 +213,3 @@ class WorkAPITests(unittest.TestCase):
# Ask for work again.
claims = {'aud': 'asterix'}
self.assertEqual(work.get_work(claims=claims), {})
-
- # And project status has changed.
- self.assertEqual(
- projects.get_status('foo'),
- {'status': 'idle'})