blob: 689c1fed4913e644707ec58fae4b85429588fe9d [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
16from tempest.common.utils import data_utils
17from 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
25 @test.safe_setup
26 def setUpClass(cls):
27 super(JobBinaryTest, cls).setUpClass()
28 cls.swift_job_binary_with_extra = {
29 'url': 'swift://sahara-container.sahara/example.jar',
30 'description': 'Test job binary',
31 'extra': {
32 'user': cls.os.credentials.username,
33 'password': cls.os.credentials.password
34 }
35 }
36 # Create extra cls.swift_job_binary variable to use for comparison to
37 # job binary response body because response body has no 'extra' field.
38 cls.swift_job_binary = cls.swift_job_binary_with_extra.copy()
39 del cls.swift_job_binary['extra']
40
41 name = data_utils.rand_name('sahara-internal-job-binary')
42 cls.job_binary_data = 'Some script may be data'
43 job_binary_internal = cls.create_job_binary_internal(
44 name, cls.job_binary_data)[1]
45 cls.internal_db_job_binary = {
46 'url': 'internal-db://%s' % job_binary_internal['id'],
47 'description': 'Test job binary',
48 }
49
50 def _create_job_binary(self, binary_body, binary_name=None):
51 """Creates Job Binary with optional name specified.
52
53 It creates a link to data (jar, pig files, etc.) and ensures response
54 status, job binary name and response body. Returns id and name of
55 created job binary. Data may not exist when using Swift
56 as data storage. In other cases data must exist in storage.
57 """
58 if not binary_name:
59 # generate random name if it's not specified
60 binary_name = data_utils.rand_name('sahara-job-binary')
61
62 # create job binary
63 resp, body = self.create_job_binary(binary_name, **binary_body)
64
65 # ensure that binary created successfully
66 self.assertEqual(202, resp.status)
67 self.assertEqual(binary_name, body['name'])
68 if 'swift' in binary_body['url']:
69 binary_body = self.swift_job_binary
70 self.assertDictContainsSubset(binary_body, body)
71
72 return body['id'], binary_name
73
74 @test.attr(type='smoke')
75 def test_swift_job_binary_create(self):
76 self._create_job_binary(self.swift_job_binary_with_extra)
77
78 @test.attr(type='smoke')
79 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
83 resp, binaries = self.client.list_job_binaries()
84 self.assertEqual(200, resp.status)
85 binaries_info = [(binary['id'], binary['name']) for binary in binaries]
86 self.assertIn(binary_info, binaries_info)
87
88 @test.attr(type='smoke')
89 def test_swift_job_binary_get(self):
90 binary_id, binary_name = self._create_job_binary(
91 self.swift_job_binary_with_extra)
92
93 # check job binary fetch by id
94 resp, binary = self.client.get_job_binary(binary_id)
95 self.assertEqual(200, resp.status)
96 self.assertEqual(binary_name, binary['name'])
97 self.assertDictContainsSubset(self.swift_job_binary, binary)
98
99 @test.attr(type='smoke')
100 def test_swift_job_binary_delete(self):
101 binary_id = self._create_job_binary(
102 self.swift_job_binary_with_extra)[0]
103
104 # delete the job binary by id
105 resp = self.client.delete_job_binary(binary_id)[0]
106 self.assertEqual(204, resp.status)
107
108 @test.attr(type='smoke')
109 def test_internal_db_job_binary_create(self):
110 self._create_job_binary(self.internal_db_job_binary)
111
112 @test.attr(type='smoke')
113 def test_internal_db_job_binary_list(self):
114 binary_info = self._create_job_binary(self.internal_db_job_binary)
115
116 # check for job binary in list
117 resp, binaries = self.client.list_job_binaries()
118 self.assertEqual(200, resp.status)
119 binaries_info = [(binary['id'], binary['name']) for binary in binaries]
120 self.assertIn(binary_info, binaries_info)
121
122 @test.attr(type='smoke')
123 def test_internal_db_job_binary_get(self):
124 binary_id, binary_name = self._create_job_binary(
125 self.internal_db_job_binary)
126
127 # check job binary fetch by id
128 resp, binary = self.client.get_job_binary(binary_id)
129 self.assertEqual(200, resp.status)
130 self.assertEqual(binary_name, binary['name'])
131 self.assertDictContainsSubset(self.internal_db_job_binary, binary)
132
133 @test.attr(type='smoke')
134 def test_internal_db_job_binary_delete(self):
135 binary_id = self._create_job_binary(self.internal_db_job_binary)[0]
136
137 # delete the job binary by id
138 resp = self.client.delete_job_binary(binary_id)[0]
139 self.assertEqual(204, resp.status)
140
141 @test.attr(type='smoke')
142 def test_job_binary_get_data(self):
143 binary_id = self._create_job_binary(self.internal_db_job_binary)[0]
144
145 # get data of job binary by id
146 resp, data = self.client.get_job_binary_data(binary_id)
147 self.assertEqual(200, resp.status)
148 self.assertEqual(data, self.job_binary_data)