Add unit tests on v2 client
Partially implements blueprint mistral-client-2.0 Change-Id: I678f2c005645a83b22ffbf2bfd933bcf22a650bd
This commit is contained in:
		@@ -16,8 +16,6 @@ import unittest2
 | 
				
			|||||||
import mock
 | 
					import mock
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from mistralclient.api.v1 import client
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FakeResponse(object):
 | 
					class FakeResponse(object):
 | 
				
			||||||
    """Fake response for testing Mistral Client."""
 | 
					    """Fake response for testing Mistral Client."""
 | 
				
			||||||
@@ -31,13 +29,7 @@ class FakeResponse(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BaseClientTest(unittest2.TestCase):
 | 
					class BaseClientTest(unittest2.TestCase):
 | 
				
			||||||
    def setUp(self):
 | 
					    _client = None
 | 
				
			||||||
        self._client = client.Client(project_name="test",
 | 
					 | 
				
			||||||
                                     mistral_url="test")
 | 
					 | 
				
			||||||
        self.workbooks = self._client.workbooks
 | 
					 | 
				
			||||||
        self.executions = self._client.executions
 | 
					 | 
				
			||||||
        self.tasks = self._client.tasks
 | 
					 | 
				
			||||||
        self.listeners = self._client.listeners
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def mock_http_get(self, content, status_code=200):
 | 
					    def mock_http_get(self, content, status_code=200):
 | 
				
			||||||
        if isinstance(content, dict):
 | 
					        if isinstance(content, dict):
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								mistralclient/tests/unit/v1/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								mistralclient/tests/unit/v1/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										42
									
								
								mistralclient/tests/unit/v1/base.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								mistralclient/tests/unit/v1/base.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					# Copyright 2014 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright 2013 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from mistralclient.api.v1 import client
 | 
				
			||||||
 | 
					from mistralclient.tests.unit import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BaseClientV1Test(base.BaseClientTest):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(BaseClientV1Test, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._client = client.Client(project_name="test",
 | 
				
			||||||
 | 
					                                     mistral_url="test")
 | 
				
			||||||
 | 
					        self.workbooks = self._client.workbooks
 | 
				
			||||||
 | 
					        self.executions = self._client.executions
 | 
				
			||||||
 | 
					        self.tasks = self._client.tasks
 | 
				
			||||||
 | 
					        self.listeners = self._client.listeners
 | 
				
			||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
import unittest2
 | 
					import unittest2
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from mistralclient.tests.unit import base
 | 
					from mistralclient.tests.unit.v1 import base
 | 
				
			||||||
from mistralclient.api.v1.executions import Execution
 | 
					from mistralclient.api.v1.executions import Execution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: Later we need additional tests verifying all the errors etc.
 | 
					# TODO: Later we need additional tests verifying all the errors etc.
 | 
				
			||||||
@@ -41,13 +41,13 @@ URL_TEMPLATE = '/workbooks/%s/executions'
 | 
				
			|||||||
URL_TEMPLATE_ID = '/workbooks/%s/executions/%s'
 | 
					URL_TEMPLATE_ID = '/workbooks/%s/executions/%s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestExecutions(base.BaseClientTest):
 | 
					class TestExecutions(base.BaseClientV1Test):
 | 
				
			||||||
    def test_create(self):
 | 
					    def test_create(self):
 | 
				
			||||||
        mock = self.mock_http_post(content=EXECS[0])
 | 
					        mock = self.mock_http_post(content=EXECS[0])
 | 
				
			||||||
        body = {
 | 
					        body = {
 | 
				
			||||||
 | 
					            'workbook_name': EXECS[0]['workbook_name'],
 | 
				
			||||||
            'task': EXECS[0]['task'],
 | 
					            'task': EXECS[0]['task'],
 | 
				
			||||||
            'context': EXECS[0]['context'],
 | 
					            'context': EXECS[0]['context']
 | 
				
			||||||
            'workbook_name': EXECS[0]['workbook_name']
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ex = self.executions.create(EXECS[0]['workbook_name'],
 | 
					        ex = self.executions.create(EXECS[0]['workbook_name'],
 | 
				
			||||||
@@ -67,8 +67,8 @@ class TestExecutions(base.BaseClientTest):
 | 
				
			|||||||
    def test_create_with_empty_context(self):
 | 
					    def test_create_with_empty_context(self):
 | 
				
			||||||
        mock = self.mock_http_post(content=EXECS[0])
 | 
					        mock = self.mock_http_post(content=EXECS[0])
 | 
				
			||||||
        body = {
 | 
					        body = {
 | 
				
			||||||
            'task': EXECS[0]['task'],
 | 
					            'workbook_name': EXECS[0]['workbook_name'],
 | 
				
			||||||
            'workbook_name': EXECS[0]['workbook_name']
 | 
					            'task': EXECS[0]['task']
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.executions.create(EXECS[0]['workbook_name'],
 | 
					        self.executions.create(EXECS[0]['workbook_name'],
 | 
				
			||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from mistralclient.tests.unit import base
 | 
					from mistralclient.tests.unit.v1 import base
 | 
				
			||||||
from mistralclient.api.v1.listeners import Listener
 | 
					from mistralclient.api.v1.listeners import Listener
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: later we need additional tests verifying all the errors etc.
 | 
					# TODO: later we need additional tests verifying all the errors etc.
 | 
				
			||||||
@@ -32,7 +32,7 @@ URL_TEMPLATE = '/workbooks/%s/listeners'
 | 
				
			|||||||
URL_TEMPLATE_ID = '/workbooks/%s/listeners/%s'
 | 
					URL_TEMPLATE_ID = '/workbooks/%s/listeners/%s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestListeners(base.BaseClientTest):
 | 
					class TestListeners(base.BaseClientV1Test):
 | 
				
			||||||
    def test_create(self):
 | 
					    def test_create(self):
 | 
				
			||||||
        mock = self.mock_http_post(content=LISTENERS[0])
 | 
					        mock = self.mock_http_post(content=LISTENERS[0])
 | 
				
			||||||
        body = {
 | 
					        body = {
 | 
				
			||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from mistralclient.tests.unit import base
 | 
					from mistralclient.tests.unit.v1 import base
 | 
				
			||||||
from mistralclient.api.v1.tasks import Task
 | 
					from mistralclient.api.v1.tasks import Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: later we need additional tests verifying all the errors etc.
 | 
					# TODO: later we need additional tests verifying all the errors etc.
 | 
				
			||||||
@@ -36,7 +36,7 @@ URL_TEMPLATE = '/workbooks/%s/executions/%s/tasks'
 | 
				
			|||||||
URL_TEMPLATE_ID = '/workbooks/%s/executions/%s/tasks/%s'
 | 
					URL_TEMPLATE_ID = '/workbooks/%s/executions/%s/tasks/%s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestTasks(base.BaseClientTest):
 | 
					class TestTasks(base.BaseClientV1Test):
 | 
				
			||||||
    def test_update(self):
 | 
					    def test_update(self):
 | 
				
			||||||
        mock = self.mock_http_put(content=TASKS[0])
 | 
					        mock = self.mock_http_put(content=TASKS[0])
 | 
				
			||||||
        body = {
 | 
					        body = {
 | 
				
			||||||
@@ -14,7 +14,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from mistralclient.tests.unit import base
 | 
					from mistralclient.tests.unit.v1 import base
 | 
				
			||||||
from mistralclient.api.v1.workbooks import Workbook
 | 
					from mistralclient.api.v1.workbooks import Workbook
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO: later we need additional tests verifying all the errors etc.
 | 
					# TODO: later we need additional tests verifying all the errors etc.
 | 
				
			||||||
@@ -57,7 +57,7 @@ URL_TEMPLATE_NAME = '/workbooks/%s'
 | 
				
			|||||||
URL_TEMPLATE_DEFINITION = '/workbooks/%s/definition'
 | 
					URL_TEMPLATE_DEFINITION = '/workbooks/%s/definition'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestWorkbooks(base.BaseClientTest):
 | 
					class TestWorkbooks(base.BaseClientV1Test):
 | 
				
			||||||
    def test_create(self):
 | 
					    def test_create(self):
 | 
				
			||||||
        mock = self.mock_http_post(content=WORKBOOKS[0])
 | 
					        mock = self.mock_http_post(content=WORKBOOKS[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										0
									
								
								mistralclient/tests/unit/v2/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								mistralclient/tests/unit/v2/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										28
									
								
								mistralclient/tests/unit/v2/base.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mistralclient/tests/unit/v2/base.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					# Copyright 2014 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from mistralclient.api.v2 import client
 | 
				
			||||||
 | 
					from mistralclient.tests.unit import base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BaseClientV2Test(base.BaseClientTest):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        super(BaseClientV2Test, self).setUp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._client = client.Client(project_name="test",
 | 
				
			||||||
 | 
					                                     mistral_url="test")
 | 
				
			||||||
 | 
					        self.workbooks = self._client.workbooks
 | 
				
			||||||
 | 
					        self.executions = self._client.executions
 | 
				
			||||||
 | 
					        self.tasks = self._client.tasks
 | 
				
			||||||
 | 
					        self.workflows = self._client.workflows
 | 
				
			||||||
							
								
								
									
										109
									
								
								mistralclient/tests/unit/v2/test_executions.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								mistralclient/tests/unit/v2/test_executions.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
				
			|||||||
 | 
					# Copyright 2014 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import unittest2
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from mistralclient.tests.unit.v2 import base
 | 
				
			||||||
 | 
					from mistralclient.api.v2 import executions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO: Later we need additional tests verifying all the errors etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXEC = {
 | 
				
			||||||
 | 
					    'id': "123",
 | 
				
			||||||
 | 
					    'workflow_name': 'my_wf',
 | 
				
			||||||
 | 
					    'state': 'RUNNING',
 | 
				
			||||||
 | 
					    'workflow_input': """
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "person": {
 | 
				
			||||||
 | 
					                "first_name": "John",
 | 
				
			||||||
 | 
					                "last_name": "Doe"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					URL_TEMPLATE = '/executions'
 | 
				
			||||||
 | 
					URL_TEMPLATE_ID = '/executions/%s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestExecutionsV2(base.BaseClientV2Test):
 | 
				
			||||||
 | 
					    def test_create(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_post(content=EXEC)
 | 
				
			||||||
 | 
					        body = {
 | 
				
			||||||
 | 
					            'workflow_name': EXEC['workflow_name'],
 | 
				
			||||||
 | 
					            'workflow_input': EXEC['workflow_input'],
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ex = self.executions.create(EXEC['workflow_name'],
 | 
				
			||||||
 | 
					                                    EXEC['workflow_input'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(ex)
 | 
				
			||||||
 | 
					        self.assertEqual(executions.Execution(self.executions, EXEC).__dict__,
 | 
				
			||||||
 | 
					                         ex.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE, json.dumps(body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @unittest2.expectedFailure
 | 
				
			||||||
 | 
					    def test_create_failure1(self):
 | 
				
			||||||
 | 
					        self.mock_http_post(content=EXEC)
 | 
				
			||||||
 | 
					        self.executions.create("")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @unittest2.expectedFailure
 | 
				
			||||||
 | 
					    def test_create_failure2(self):
 | 
				
			||||||
 | 
					        self.mock_http_post(content=EXEC)
 | 
				
			||||||
 | 
					        self.executions.create(EXEC['workflow_name'],
 | 
				
			||||||
 | 
					                               list('343', 'sdfsd'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_update(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_put(content=EXEC)
 | 
				
			||||||
 | 
					        body = {
 | 
				
			||||||
 | 
					            'state': EXEC['state']
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ex = self.executions.update(EXEC['id'], EXEC['state'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(ex)
 | 
				
			||||||
 | 
					        self.assertEqual(executions.Execution(self.executions, EXEC).__dict__,
 | 
				
			||||||
 | 
					                         ex.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(
 | 
				
			||||||
 | 
					            URL_TEMPLATE_ID % EXEC['id'], json.dumps(body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_list(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content={'executions': [EXEC]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        execution_list = self.executions.list()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(1, len(execution_list))
 | 
				
			||||||
 | 
					        ex = execution_list[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(executions.Execution(self.executions, EXEC).__dict__,
 | 
				
			||||||
 | 
					                         ex.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content=EXEC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ex = self.executions.get(EXEC['id'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(executions.Execution(self.executions, EXEC).__dict__,
 | 
				
			||||||
 | 
					                         ex.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE_ID % EXEC['id'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_delete(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_delete(status_code=204)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.executions.delete(EXEC['id'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE_ID % EXEC['id'])
 | 
				
			||||||
							
								
								
									
										69
									
								
								mistralclient/tests/unit/v2/test_tasks.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								mistralclient/tests/unit/v2/test_tasks.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					# Copyright 2014 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from mistralclient.tests.unit.v2 import base
 | 
				
			||||||
 | 
					from mistralclient.api.v2 import tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO: later we need additional tests verifying all the errors etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TASK = {
 | 
				
			||||||
 | 
					    'id': "1",
 | 
				
			||||||
 | 
					    'execution_id': '123',
 | 
				
			||||||
 | 
					    'name': 'my_task',
 | 
				
			||||||
 | 
					    'wf_name': 'my_wf',
 | 
				
			||||||
 | 
					    'state': 'RUNNING',
 | 
				
			||||||
 | 
					    'tags': ['deployment', 'demo']
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					URL_TEMPLATE = '/tasks'
 | 
				
			||||||
 | 
					URL_TEMPLATE_ID = '/tasks/%s'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestTasksV2(base.BaseClientV2Test):
 | 
				
			||||||
 | 
					    def test_update(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_put(content=TASK)
 | 
				
			||||||
 | 
					        body = {
 | 
				
			||||||
 | 
					            'state': TASK['state']
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        task = self.tasks.update(TASK['id'],
 | 
				
			||||||
 | 
					                                 TASK['state'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(task)
 | 
				
			||||||
 | 
					        self.assertEqual(tasks.Task(self.tasks, TASK).__dict__, task.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(
 | 
				
			||||||
 | 
					            URL_TEMPLATE_ID % TASK['id'], json.dumps(body))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_list(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content={'tasks': [TASK]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        task_list = self.tasks.list()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(1, len(task_list))
 | 
				
			||||||
 | 
					        task = task_list[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(tasks.Task(self.tasks, TASK).__dict__, task.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content=TASK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        task = self.tasks.get(TASK['id'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(tasks.Task(self.tasks, TASK).__dict__, task.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(
 | 
				
			||||||
 | 
					            URL_TEMPLATE_ID % TASK['id'])
 | 
				
			||||||
							
								
								
									
										115
									
								
								mistralclient/tests/unit/v2/test_workbooks.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								mistralclient/tests/unit/v2/test_workbooks.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					# Copyright 2014 - Mirantis, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					#    you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					#    You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#        http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					#    distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					#    See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					#    limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from mistralclient.tests.unit.v2 import base
 | 
				
			||||||
 | 
					from mistralclient.api.v2 import workbooks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO: later we need additional tests verifying all the errors etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WB_DEF = """
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					Version: 2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Workflows:
 | 
				
			||||||
 | 
					  wf1:
 | 
				
			||||||
 | 
					    type: direct
 | 
				
			||||||
 | 
					    start_task: task1
 | 
				
			||||||
 | 
					    parameters:
 | 
				
			||||||
 | 
					      - param1
 | 
				
			||||||
 | 
					      - param2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tasks:
 | 
				
			||||||
 | 
					      task1:
 | 
				
			||||||
 | 
					        action: std.http url="localhost:8989"
 | 
				
			||||||
 | 
					        on-success: test_subsequent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      test_subsequent:
 | 
				
			||||||
 | 
					        action: std.http url="http://some_url"
 | 
				
			||||||
 | 
					        parameters:
 | 
				
			||||||
 | 
					          server_id: 1
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKBOOK = {
 | 
				
			||||||
 | 
					    'name': "my_workbook",
 | 
				
			||||||
 | 
					    'description': "My cool Mistral workbook",
 | 
				
			||||||
 | 
					    'tags': ['deployment', 'demo'],
 | 
				
			||||||
 | 
					    'definition': WB_DEF
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					URL_TEMPLATE = '/workbooks'
 | 
				
			||||||
 | 
					URL_TEMPLATE_NAME = '/workbooks/%s'
 | 
				
			||||||
 | 
					URL_TEMPLATE_DEFINITION = '/workbooks/%s/definition'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestWorkbooksV2(base.BaseClientV2Test):
 | 
				
			||||||
 | 
					    def test_create(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_post(content=WORKBOOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wb = self.workbooks.create(WORKBOOK['name'],
 | 
				
			||||||
 | 
					                                   WORKBOOK['definition'],
 | 
				
			||||||
 | 
					                                   WORKBOOK['description'],
 | 
				
			||||||
 | 
					                                   WORKBOOK['tags'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(wb)
 | 
				
			||||||
 | 
					        self.assertEqual(workbooks.Workbook(self.workbooks,
 | 
				
			||||||
 | 
					                                            WORKBOOK).__dict__, wb.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_update(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_put(content=WORKBOOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wb = self.workbooks.update(WORKBOOK['name'],
 | 
				
			||||||
 | 
					                                   WORKBOOK['definition'],
 | 
				
			||||||
 | 
					                                   description=WORKBOOK['description'],
 | 
				
			||||||
 | 
					                                   tags=WORKBOOK['tags'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(wb)
 | 
				
			||||||
 | 
					        self.assertEqual(workbooks.Workbook(self.workbooks,
 | 
				
			||||||
 | 
					                                            WORKBOOK).__dict__, wb.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(
 | 
				
			||||||
 | 
					            URL_TEMPLATE_NAME % WORKBOOK['name'],
 | 
				
			||||||
 | 
					            json.dumps(WORKBOOK))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_list(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content={'workbooks': [WORKBOOK]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        workbook_list = self.workbooks.list()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(1, len(workbook_list))
 | 
				
			||||||
 | 
					        wb = workbook_list[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(workbooks.Workbook(self.workbooks,
 | 
				
			||||||
 | 
					                                            WORKBOOK).__dict__, wb.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_get(content=WORKBOOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wb = self.workbooks.get(WORKBOOK['name'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNotNone(wb)
 | 
				
			||||||
 | 
					        self.assertEqual(workbooks.Workbook(self.workbooks,
 | 
				
			||||||
 | 
					                                            WORKBOOK).__dict__, wb.__dict__)
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_delete(self):
 | 
				
			||||||
 | 
					        mock = self.mock_http_delete(status_code=204)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.workbooks.delete(WORKBOOK['name'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
 | 
				
			||||||
		Reference in New Issue
	
	Block a user