blob: 98b7e245a706f41c90f8a5d8485a9018132e11a5 [file] [log] [blame]
Yaroslav Lobankov72876772014-06-11 16:18:19 +04001# Copyright (c) 2014 Mirantis Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15from tempest.api.data_processing import base as dp_base
Fei Long Wangd39431f2015-05-14 11:30:48 +120016from tempest.common.utils import data_utils
Yaroslav Lobankov72876772014-06-11 16:18:19 +040017from tempest import test
18
19
20class JobBinaryTest(dp_base.BaseDataProcessingTest):
21 """Link to the API documentation is http://docs.openstack.org/developer/
22 sahara/restapi/rest_api_v1.1_EDP.html#job-binaries
23 """
24 @classmethod
Andrea Frittoli581c3932014-09-15 13:14:53 +010025 def resource_setup(cls):
26 super(JobBinaryTest, cls).resource_setup()
Yaroslav Lobankov72876772014-06-11 16:18:19 +040027 cls.swift_job_binary_with_extra = {
28 'url': 'swift://sahara-container.sahara/example.jar',
29 'description': 'Test job binary',
30 'extra': {
31 'user': cls.os.credentials.username,
32 'password': cls.os.credentials.password
33 }
34 }
35 # Create extra cls.swift_job_binary variable to use for comparison to
36 # job binary response body because response body has no 'extra' field.
37 cls.swift_job_binary = cls.swift_job_binary_with_extra.copy()
38 del cls.swift_job_binary['extra']
39
40 name = data_utils.rand_name('sahara-internal-job-binary')
41 cls.job_binary_data = 'Some script may be data'
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040042 job_binary_internal = (
43 cls.create_job_binary_internal(name, cls.job_binary_data))
Yaroslav Lobankov72876772014-06-11 16:18:19 +040044 cls.internal_db_job_binary = {
45 'url': 'internal-db://%s' % job_binary_internal['id'],
46 'description': 'Test job binary',
47 }
48
49 def _create_job_binary(self, binary_body, binary_name=None):
50 """Creates Job Binary with optional name specified.
51
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040052 It creates a link to data (jar, pig files, etc.), ensures job binary
53 name and response body. Returns id and name of created job binary.
54 Data may not exist when using Swift as data storage.
55 In other cases data must exist in storage.
Yaroslav Lobankov72876772014-06-11 16:18:19 +040056 """
57 if not binary_name:
58 # generate random name if it's not specified
59 binary_name = data_utils.rand_name('sahara-job-binary')
60
61 # create job binary
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040062 resp_body = self.create_job_binary(binary_name, **binary_body)
Yaroslav Lobankov72876772014-06-11 16:18:19 +040063
64 # ensure that binary created successfully
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040065 self.assertEqual(binary_name, resp_body['name'])
Yaroslav Lobankov72876772014-06-11 16:18:19 +040066 if 'swift' in binary_body['url']:
67 binary_body = self.swift_job_binary
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040068 self.assertDictContainsSubset(binary_body, resp_body)
Yaroslav Lobankov72876772014-06-11 16:18:19 +040069
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040070 return resp_body['id'], binary_name
Yaroslav Lobankov72876772014-06-11 16:18:19 +040071
72 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080073 @test.idempotent_id('c00d43f8-4360-45f8-b280-af1a201b12d3')
Yaroslav Lobankov72876772014-06-11 16:18:19 +040074 def test_swift_job_binary_create(self):
75 self._create_job_binary(self.swift_job_binary_with_extra)
76
77 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080078 @test.idempotent_id('f8809352-e79d-4748-9359-ce1efce89f2a')
Yaroslav Lobankov72876772014-06-11 16:18:19 +040079 def test_swift_job_binary_list(self):
80 binary_info = self._create_job_binary(self.swift_job_binary_with_extra)
81
82 # check for job binary in list
Yaroslav Lobankov1662b0e2015-08-10 16:48:07 +030083 binaries = self.client.list_job_binaries()['binaries']
Yaroslav Lobankov72876772014-06-11 16:18:19 +040084 binaries_info = [(binary['id'], binary['name']) for binary in binaries]
85 self.assertIn(binary_info, binaries_info)
86
87 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080088 @test.idempotent_id('2d4a670f-e8f1-413c-b5ac-50c1bfe9e1b1')
Yaroslav Lobankov72876772014-06-11 16:18:19 +040089 def test_swift_job_binary_get(self):
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +040090 binary_id, binary_name = (
91 self._create_job_binary(self.swift_job_binary_with_extra))
Yaroslav Lobankov72876772014-06-11 16:18:19 +040092
93 # check job binary fetch by id
Yaroslav Lobankov1662b0e2015-08-10 16:48:07 +030094 binary = self.client.get_job_binary(binary_id)['job_binary']
Yaroslav Lobankov72876772014-06-11 16:18:19 +040095 self.assertEqual(binary_name, binary['name'])
96 self.assertDictContainsSubset(self.swift_job_binary, binary)
97
98 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080099 @test.idempotent_id('9b0e8f38-04f3-4616-b399-cfa7eb2677ed')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400100 def test_swift_job_binary_delete(self):
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400101 binary_id, _ = (
102 self._create_job_binary(self.swift_job_binary_with_extra))
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400103
104 # delete the job binary by id
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400105 self.client.delete_job_binary(binary_id)
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400106
107 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800108 @test.idempotent_id('63662f6d-8291-407e-a6fc-f654522ebab6')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400109 def test_internal_db_job_binary_create(self):
110 self._create_job_binary(self.internal_db_job_binary)
111
112 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800113 @test.idempotent_id('38731e7b-6d9d-4ffa-8fd1-193c453e88b1')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400114 def test_internal_db_job_binary_list(self):
115 binary_info = self._create_job_binary(self.internal_db_job_binary)
116
117 # check for job binary in list
Yaroslav Lobankov1662b0e2015-08-10 16:48:07 +0300118 binaries = self.client.list_job_binaries()['binaries']
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400119 binaries_info = [(binary['id'], binary['name']) for binary in binaries]
120 self.assertIn(binary_info, binaries_info)
121
122 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800123 @test.idempotent_id('1b32199b-c3f5-43e1-a37a-3797e57b7066')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400124 def test_internal_db_job_binary_get(self):
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400125 binary_id, binary_name = (
126 self._create_job_binary(self.internal_db_job_binary))
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400127
128 # check job binary fetch by id
Yaroslav Lobankov1662b0e2015-08-10 16:48:07 +0300129 binary = self.client.get_job_binary(binary_id)['job_binary']
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400130 self.assertEqual(binary_name, binary['name'])
131 self.assertDictContainsSubset(self.internal_db_job_binary, binary)
132
133 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800134 @test.idempotent_id('3c42b0c3-3e03-46a5-adf0-df0650271a4e')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400135 def test_internal_db_job_binary_delete(self):
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400136 binary_id, _ = self._create_job_binary(self.internal_db_job_binary)
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400137
138 # delete the job binary by id
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400139 self.client.delete_job_binary(binary_id)
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400140
141 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800142 @test.idempotent_id('d5d47659-7e2c-4ea7-b292-5b3e559e8587')
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400143 def test_job_binary_get_data(self):
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400144 binary_id, _ = self._create_job_binary(self.internal_db_job_binary)
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400145
146 # get data of job binary by id
Yaroslav Lobankov2f8525e2014-07-21 16:40:23 +0400147 _, data = self.client.get_job_binary_data(binary_id)
Yaroslav Lobankov72876772014-06-11 16:18:19 +0400148 self.assertEqual(data, self.job_binary_data)