diff options
| author | Joshua Harlow <jxharlow@godaddy.com> | 2016-05-25 18:53:11 -0700 |
|---|---|---|
| committer | Joshua Harlow <jxharlow@godaddy.com> | 2016-06-02 11:21:09 -0700 |
| commit | e78ae9bc618dff1ed38db1f5013d7f1735124790 (patch) | |
| tree | 32c137a23a011a7d7c93b493747c2416ba010052 /kolla/tests | |
| parent | 23d566a5e326185f98ddd76c0496ab182bf32751 (diff) | |
| download | kolla-e78ae9bc618dff1ed38db1f5013d7f1735124790.tar.gz kolla-e78ae9bc618dff1ed38db1f5013d7f1735124790.zip | |
Use a task model and dumb workers
Instead of having smart workers that need to know
about the full logic of how they operate and what
they will do which makes it hard to reuse parts of
those workers switch the model so that workers are
dumb and they just run tasks which themselves can
request additional tasks to run when succesful.
This makes it more consistent when tasks are to
be retried and also makes it easier to know which
task is running and when.
Less specialized workers == good.
Closes-Bug: #1586474
Change-Id: Ie7b7303b8bf2a80b3e26b6d4ffc27787f8c794d6
Diffstat (limited to 'kolla/tests')
| -rw-r--r-- | kolla/tests/test_build.py | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index cc55bd48a..d92906ced 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -31,29 +31,36 @@ FAKE_IMAGE = { } -class WorkerThreadTest(base.TestCase): +class TasksTest(base.TestCase): def setUp(self): - super(WorkerThreadTest, self).setUp() + super(TasksTest, self).setUp() self.image = FAKE_IMAGE.copy() # NOTE(jeffrey4l): use a real, temporary dir self.image['path'] = self.useFixture(fixtures.TempDir()).path @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.Client') + def test_push_image(self, mock_client): + pusher = build.PushTask(self.conf, self.image) + pusher.run() + mock_client().push.assert_called_once_with( + self.image['fullname'], stream=True, insecure_registry=True) + + @mock.patch.dict(os.environ, clear=True) + @mock.patch('docker.Client') def test_build_image(self, mock_client): - queue = mock.Mock() push_queue = mock.Mock() - worker = build.WorkerThread(queue, - push_queue, - self.conf) - worker.builder(self.image) + builder = build.BuildTask(self.conf, self.image, push_queue) + builder.run() mock_client().build.assert_called_once_with( path=self.image['path'], tag=self.image['fullname'], nocache=False, rm=True, pull=True, forcerm=True, buildargs=None) + self.assertTrue(builder.success) + @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.Client') def test_build_image_with_build_arg(self, mock_client): @@ -62,33 +69,35 @@ class WorkerThreadTest(base.TestCase): 'NO_PROXY': '127.0.0.1' } self.conf.set_override('build_args', build_args) - worker = build.WorkerThread(mock.Mock(), - mock.Mock(), - self.conf) - worker.builder(self.image) + push_queue = mock.Mock() + builder = build.BuildTask(self.conf, self.image, push_queue) + builder.run() mock_client().build.assert_called_once_with( path=self.image['path'], tag=self.image['fullname'], nocache=False, rm=True, pull=True, forcerm=True, buildargs=build_args) + self.assertTrue(builder.success) + @mock.patch.dict(os.environ, {'http_proxy': 'http://FROM_ENV:8080'}, clear=True) @mock.patch('docker.Client') def test_build_arg_from_env(self, mock_client): + push_queue = mock.Mock() build_args = { 'http_proxy': 'http://FROM_ENV:8080', } - worker = build.WorkerThread(mock.Mock(), - mock.Mock(), - self.conf) - worker.builder(self.image) + builder = build.BuildTask(self.conf, self.image, push_queue) + builder.run() mock_client().build.assert_called_once_with( path=self.image['path'], tag=self.image['fullname'], nocache=False, rm=True, pull=True, forcerm=True, buildargs=build_args) + self.assertTrue(builder.success) + @mock.patch.dict(os.environ, {'http_proxy': 'http://FROM_ENV:8080'}, clear=True) @mock.patch('docker.Client') @@ -97,30 +106,30 @@ class WorkerThreadTest(base.TestCase): 'http_proxy': 'http://localhost:8080', } self.conf.set_override('build_args', build_args) - worker = build.WorkerThread(mock.Mock(), - mock.Mock(), - self.conf) - worker.builder(self.image) + + push_queue = mock.Mock() + builder = build.BuildTask(self.conf, self.image, push_queue) + builder.run() mock_client().build.assert_called_once_with( path=self.image['path'], tag=self.image['fullname'], nocache=False, rm=True, pull=True, forcerm=True, buildargs=build_args) + self.assertTrue(builder.success) + @mock.patch('docker.Client') @mock.patch('requests.get') def test_requests_get_timeout(self, mock_get, mock_client): - worker = build.WorkerThread(mock.Mock(), - mock.Mock(), - self.conf) self.image['source'] = { 'source': 'http://fake/source', 'type': 'url', 'name': 'fake-image-base' } + push_queue = mock.Mock() + builder = build.BuildTask(self.conf, self.image, push_queue) mock_get.side_effect = requests.exceptions.Timeout - get_result = worker.process_source(self.image, - self.image['source']) + get_result = builder.process_source(self.image, self.image['source']) self.assertIsNone(get_result) self.assertEqual(self.image['status'], 'error') @@ -128,6 +137,8 @@ class WorkerThreadTest(base.TestCase): mock_get.assert_called_once_with(self.image['source']['source'], timeout=120) + self.assertFalse(builder.success) + class KollaWorkerTest(base.TestCase): |
