Acceptance tests using different clients concurrently. Environment deployed from packages.
Build: #3231 failed
Job: Spaces basic was successful
user fails to establish dataset on the share root directory[1oz 1op 1oc]: Test case result
The below summarizes the result of the test " user fails to establish dataset on the share root directory[1oz 1op 1oc]" in build 3,231 of Onedata Products - mixed acceptance pkg - Spaces basic.
- Description
- user fails to establish dataset on the share root directory[1oz 1op 1oc]
- Test class
- mixed.scenarios.test_spaces_basic
- Method
- test_user_fails_to_establish_dataset_on_the_share_root_directory[1oz_1op_1oc]
- Jira Issue
-
- Duration
- 13 secs
- Status
- Failed (Existing Failure)
Error Log
AssertionError user = 'user1' users = {'admin': <tests.utils.user_utils.AdminUser object at 0x7fc59906e340>, 'admin2': <tests.utils.user_utils.User object a...s.user_utils.AdminUser object at 0x7fc59906e2e0>, 'user1': <tests.utils.user_utils.User object at 0x7fc59906ee50>, ...} hosts = {'oneclient-1': {'container-id': '05a2c26e078f792ae7aa577fd6a6dc0018bc79c44c68fb2ca5adc49dccd5a1a9', 'ip': '10.244.232...89f54f0d985', 'hostname': 'dev-onezone.default.svc.cluster.local', 'ip': '10.244.232.127', 'name': 'dev-onezone', ...}} host = 'oneprovider-1' dir_id = '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333333966613563683...3538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163' err_msg = 'Established dataset on share root dir, but establishing should have failed' def try_to_establish_dataset_on_special_dir_by_id(user, users, hosts, host, dir_id, err_msg=''): try: > create_dataset_in_op_by_id_rest(user, users, hosts, host, dir_id, '') tests/mixed/steps/rest/onezone/special_dirs.py:262: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ user = 'user1' users = {'admin': <tests.utils.user_utils.AdminUser object at 0x7fc59906e340>, 'admin2': <tests.utils.user_utils.User object a...s.user_utils.AdminUser object at 0x7fc59906e2e0>, 'user1': <tests.utils.user_utils.User object at 0x7fc59906ee50>, ...} hosts = {'oneclient-1': {'container-id': '05a2c26e078f792ae7aa577fd6a6dc0018bc79c44c68fb2ca5adc49dccd5a1a9', 'ip': '10.244.232...89f54f0d985', 'hostname': 'dev-onezone.default.svc.cluster.local', 'ip': '10.244.232.127', 'name': 'dev-onezone', ...}} host = 'oneprovider-1' file_id = '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333333966613563683...3538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163' option = '' def create_dataset_in_op_by_id_rest( user, users, hosts, host, file_id, option): client = login_to_provider(user, users, hosts[host]['hostname']) dataset_api = DatasetApi(client) data = {"rootFileId": f"{file_id}"} flags = get_flags(option) if len(flags) != 0: data["protectionFlags"] = flags > dataset_api.establish_dataset(data) tests/mixed/steps/rest/oneprovider/datasets.py:34: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <tests.mixed.oneprovider_client.api.dataset_api.DatasetApi object at 0x7fc5994097f0> data = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} kwargs = {'_return_http_data_only': True} def establish_dataset(self, data, **kwargs): # noqa: E501 """Establish dataset # noqa: E501 Establishes a dataset with the specified file/directory as the dataset's root. For each file/directory, only one dataset can be established. This operation requires `space_manage_datasets` privilege. ***Example cURL requests*** **Establish dataset** ```bash curl -H \"X-Auth-Token: $TOKEN\" -X POST \"https://$PROVIDER_HOST/api/v3/oneprovider/datasets\" \\ -H \"Content-Type: application/json\" -d '{ \"rootFileId\": \"'$FILE_ID'\", \"protectionFlags\": [\"data_protection\"] }' ``` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True >>> thread = api.establish_dataset(data, async_req=True) >>> result = thread.get() :param async_req bool :param DatasetEstablishRequest data: Dataset properties. (required) :return: InlineResponse2016 If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): return self.establish_dataset_with_http_info(data, **kwargs) # noqa: E501 else: > (data) = self.establish_dataset_with_http_info(data, **kwargs) # noqa: E501 tests/mixed/oneprovider_client/api/dataset_api.py:55: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <tests.mixed.oneprovider_client.api.dataset_api.DatasetApi object at 0x7fc5994097f0> data = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} kwargs = {'_return_http_data_only': True} all_params = ['data', 'async_req', '_return_http_data_only', '_preload_content', '_request_timeout'] params = {'_return_http_data_only': True, 'all_params': ['data', 'async_req', '_return_http_data_only', '_preload_content', '_r...837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'}, ...} key = '_return_http_data_only', val = True, collection_formats = {} path_params = {}, query_params = [] def establish_dataset_with_http_info(self, data, **kwargs): # noqa: E501 """Establish dataset # noqa: E501 Establishes a dataset with the specified file/directory as the dataset's root. For each file/directory, only one dataset can be established. This operation requires `space_manage_datasets` privilege. ***Example cURL requests*** **Establish dataset** ```bash curl -H \"X-Auth-Token: $TOKEN\" -X POST \"https://$PROVIDER_HOST/api/v3/oneprovider/datasets\" \\ -H \"Content-Type: application/json\" -d '{ \"rootFileId\": \"'$FILE_ID'\", \"protectionFlags\": [\"data_protection\"] }' ``` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True >>> thread = api.establish_dataset_with_http_info(data, async_req=True) >>> result = thread.get() :param async_req bool :param DatasetEstablishRequest data: Dataset properties. (required) :return: InlineResponse2016 If the method is called asynchronously, returns the request thread. """ all_params = ['data'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') all_params.append('_request_timeout') params = locals() for key, val in six.iteritems(params['kwargs']): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" " to method establish_dataset" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'data' is set if self.api_client.client_side_validation and ('data' not in params or params['data'] is None): # noqa: E501 raise ValueError("Missing the required parameter `data` when calling `establish_dataset`") # noqa: E501 collection_formats = {} path_params = {} query_params = [] header_params = {} form_params = [] local_var_files = {} body_params = None if 'data' in params: body_params = params['data'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 ['application/json']) # noqa: E501 # Authentication setting auth_settings = ['api_key1', 'api_key2'] # noqa: E501 > return self.api_client.call_api( '/datasets', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, response_type='InlineResponse2016', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), _preload_content=params.get('_preload_content', True), _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) tests/mixed/oneprovider_client/api/dataset_api.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <oneprovider_client.api_client.ApiClient object at 0x7fc599409490> resource_path = '/datasets', method = 'POST', path_params = {} query_params = [] header_params = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'Swagger-Codegen/21.02.6/python', 'X-...GNlZTNjOGNoMWU1ZAowMDFhY2lkIHRpbWUgPCAxNzU3NDQ4ODE4CjAwMmZzaWduYXR1cmUgV3K2f86Wwvoe98QerPsRCiBTm006owkC00gsvAak5LhgQK'} body = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} post_params = [], files = {}, response_type = 'InlineResponse2016' auth_settings = ['api_key1', 'api_key2'], async_req = None _return_http_data_only = True, collection_formats = {}, _preload_content = True _request_timeout = None def call_api(self, resource_path, method, path_params=None, query_params=None, header_params=None, body=None, post_params=None, files=None, response_type=None, auth_settings=None, async_req=None, _return_http_data_only=None, collection_formats=None, _preload_content=True, _request_timeout=None): """Makes the HTTP request (synchronous) and returns deserialized data. To make an async request, set the async_req parameter. :param resource_path: Path to method endpoint. :param method: Method to call. :param path_params: Path parameters in the url. :param query_params: Query parameters in the url. :param header_params: Header parameters to be placed in the request header. :param body: Request body. :param post_params dict: Request post form parameters, for `application/x-www-form-urlencoded`, `multipart/form-data`. :param auth_settings list: Auth Settings names for the request. :param response: Response data type. :param files dict: key -> filename, value -> filepath, for `multipart/form-data`. :param async_req bool: execute request asynchronously :param _return_http_data_only: response data without head status code and headers :param collection_formats: dict of collection formats for path, query, header, and post parameters. :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without reading/decoding response data. Default is True. :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of (connection, read) timeouts. :return: If async_req parameter is True, the request will be called asynchronously. The method will return the request thread. If parameter async_req is False or missing, then the method will return the response directly. """ if not async_req: > return self.__call_api(resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, _return_http_data_only, collection_formats, _preload_content, _request_timeout) tests/mixed/oneprovider_client/api_client.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <oneprovider_client.api_client.ApiClient object at 0x7fc599409490> resource_path = '/datasets', method = 'POST', path_params = {} query_params = [] header_params = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'Swagger-Codegen/21.02.6/python', 'X-...GNlZTNjOGNoMWU1ZAowMDFhY2lkIHRpbWUgPCAxNzU3NDQ4ODE4CjAwMmZzaWduYXR1cmUgV3K2f86Wwvoe98QerPsRCiBTm006owkC00gsvAak5LhgQK'} body = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} post_params = [], files = {}, response_type = 'InlineResponse2016' auth_settings = ['api_key1', 'api_key2'], _return_http_data_only = True collection_formats = {}, _preload_content = True, _request_timeout = None def __call_api( self, resource_path, method, path_params=None, query_params=None, header_params=None, body=None, post_params=None, files=None, response_type=None, auth_settings=None, _return_http_data_only=None, collection_formats=None, _preload_content=True, _request_timeout=None): config = self.configuration # header parameters header_params = header_params or {} header_params.update(self.default_headers) if self.cookie: header_params['Cookie'] = self.cookie if header_params: header_params = self.sanitize_for_serialization(header_params) header_params = dict(self.parameters_to_tuples(header_params, collection_formats)) # path parameters if path_params: path_params = self.sanitize_for_serialization(path_params) path_params = self.parameters_to_tuples(path_params, collection_formats) for k, v in path_params: # specified safe chars, encode everything resource_path = resource_path.replace( '{%s}' % k, quote(str(v), safe=config.safe_chars_for_path_param) ) # query parameters if query_params: query_params = self.sanitize_for_serialization(query_params) query_params = self.parameters_to_tuples(query_params, collection_formats) # post parameters if post_params or files: post_params = self.prepare_post_parameters(post_params, files) post_params = self.sanitize_for_serialization(post_params) post_params = self.parameters_to_tuples(post_params, collection_formats) # auth setting self.update_params_for_auth(header_params, query_params, auth_settings) # body if body: body = self.sanitize_for_serialization(body) # request url url = self.configuration.host + resource_path # perform request and return response > response_data = self.request( method, url, query_params=query_params, headers=header_params, post_params=post_params, body=body, _preload_content=_preload_content, _request_timeout=_request_timeout) tests/mixed/oneprovider_client/api_client.py:158: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <oneprovider_client.api_client.ApiClient object at 0x7fc599409490> method = 'POST' url = 'https://dev-oneprovider-krakow.default.svc.cluster.local:443/api/v3/oneprovider/datasets' query_params = [] headers = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'Swagger-Codegen/21.02.6/python', 'X-...GNlZTNjOGNoMWU1ZAowMDFhY2lkIHRpbWUgPCAxNzU3NDQ4ODE4CjAwMmZzaWduYXR1cmUgV3K2f86Wwvoe98QerPsRCiBTm006owkC00gsvAak5LhgQK'} post_params = [] body = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} _preload_content = True, _request_timeout = None def request(self, method, url, query_params=None, headers=None, post_params=None, body=None, _preload_content=True, _request_timeout=None): """Makes the HTTP request using RESTClient.""" if method == "GET": return self.rest_client.GET(url, query_params=query_params, _preload_content=_preload_content, _request_timeout=_request_timeout, headers=headers) elif method == "HEAD": return self.rest_client.HEAD(url, query_params=query_params, _preload_content=_preload_content, _request_timeout=_request_timeout, headers=headers) elif method == "OPTIONS": return self.rest_client.OPTIONS(url, query_params=query_params, headers=headers, post_params=post_params, _preload_content=_preload_content, _request_timeout=_request_timeout, body=body) elif method == "POST": > return self.rest_client.POST(url, query_params=query_params, headers=headers, post_params=post_params, _preload_content=_preload_content, _request_timeout=_request_timeout, tests/mixed/oneprovider_client/api_client.py:368: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <oneprovider_client.rest.RESTClientObject object at 0x7fc599409f10> url = 'https://dev-oneprovider-krakow.default.svc.cluster.local:443/api/v3/oneprovider/datasets' headers = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'Swagger-Codegen/21.02.6/python', 'X-...GNlZTNjOGNoMWU1ZAowMDFhY2lkIHRpbWUgPCAxNzU3NDQ4ODE4CjAwMmZzaWduYXR1cmUgV3K2f86Wwvoe98QerPsRCiBTm006owkC00gsvAak5LhgQK'} query_params = [], post_params = [] body = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} _preload_content = True, _request_timeout = None def POST(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True, _request_timeout=None): > return self.request("POST", url, headers=headers, query_params=query_params, post_params=post_params, _preload_content=_preload_content, _request_timeout=_request_timeout, body=body) tests/mixed/oneprovider_client/rest.py:269: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <oneprovider_client.rest.RESTClientObject object at 0x7fc599409f10> method = 'POST' url = 'https://dev-oneprovider-krakow.default.svc.cluster.local:443/api/v3/oneprovider/datasets' query_params = [] headers = {'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'Swagger-Codegen/21.02.6/python', 'X-...GNlZTNjOGNoMWU1ZAowMDFhY2lkIHRpbWUgPCAxNzU3NDQ4ODE4CjAwMmZzaWduYXR1cmUgV3K2f86Wwvoe98QerPsRCiBTm006owkC00gsvAak5LhgQK'} body = {'rootFileId': '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333...538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163'} post_params = {}, _preload_content = True, _request_timeout = None def request(self, method, url, query_params=None, headers=None, body=None, post_params=None, _preload_content=True, _request_timeout=None): """Perform requests. :param method: http request method :param url: http request url :param query_params: query parameters in the url :param headers: http request headers :param body: request json body, for `application/json` :param post_params: request post parameters, `application/x-www-form-urlencoded` and `multipart/form-data` :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without reading/decoding response data. Default is True. :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of (connection, read) timeouts. """ method = method.upper() assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS'] if post_params and body: raise ValueError( "body parameter cannot be used with post_params parameter." ) post_params = post_params or {} headers = headers or {} timeout = None if _request_timeout: if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821 timeout = urllib3.Timeout(total=_request_timeout) elif (isinstance(_request_timeout, tuple) and len(_request_timeout) == 2): timeout = urllib3.Timeout( connect=_request_timeout[0], read=_request_timeout[1]) if 'Content-Type' not in headers: headers['Content-Type'] = 'application/json' try: # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: if query_params: url += '?' + urlencode(query_params) if re.search('json', headers['Content-Type'], re.IGNORECASE): request_body = '{}' if body is not None: request_body = json.dumps(body) r = self.pool_manager.request( method, url, body=request_body, preload_content=_preload_content, timeout=timeout, headers=headers) elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 r = self.pool_manager.request( method, url, fields=post_params, encode_multipart=False, preload_content=_preload_content, timeout=timeout, headers=headers) elif headers['Content-Type'] == 'multipart/form-data': # must del headers['Content-Type'], or the correct # Content-Type which generated by urllib3 will be # overwritten. del headers['Content-Type'] r = self.pool_manager.request( method, url, fields=post_params, encode_multipart=True, preload_content=_preload_content, timeout=timeout, headers=headers) # Pass a `string` parameter directly in the body to support # other content types than Json when `body` argument is # provided in serialized form elif isinstance(body, str): request_body = body r = self.pool_manager.request( method, url, body=request_body, preload_content=_preload_content, timeout=timeout, headers=headers) else: # Cannot generate the request from given parameters msg = """Cannot prepare a request message for provided arguments. Please check that your arguments match declared content type.""" raise ApiException(status=0, reason=msg) # For `GET`, `HEAD` else: r = self.pool_manager.request(method, url, fields=query_params, preload_content=_preload_content, timeout=timeout, headers=headers) except urllib3.exceptions.SSLError as e: msg = "{0}\n{1}".format(type(e).__name__, str(e)) raise ApiException(status=0, reason=msg) if _preload_content: r = RESTResponse(r) # In the python 3, the response.data is bytes. # we need to decode it to string. if six.PY3: r.data = r.data.decode('utf8') # log response body logger.debug("response body: %s", r.data) if not 200 <= r.status <= 299: > raise ApiException(http_resp=r) E oneprovider_client.rest.ApiException: (400) E Reason: Bad Request E HTTP response headers: HTTPHeaderDict({'access-control-allow-origin': '*', 'content-length': '110', 'content-type': 'application/json', 'date': 'Mon, 09 Sep 2024 20:13:44 GMT', 'server': 'Cowboy'}) E HTTP response body: {"error":{"id":"posix","details":{"errno":"eperm"},"description":"Operation failed with POSIX error: eperm."}} tests/mixed/oneprovider_client/rest.py:228: ApiException During handling of the above exception, another exception occurred: request = <FixtureRequest for <Function 'test_user_fails_to_establish_dataset_on_the_share_root_directory[1oz_1op_1oc]'>> @pytest.mark.usefixtures(*function_args) def scenario_wrapper(request): > _execute_scenario(feature, scenario, request, encoding) /usr/local/lib/python3.8/dist-packages/pytest_bdd/scenario.py:227: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/local/lib/python3.8/dist-packages/pytest_bdd/scenario.py:189: in _execute_scenario _execute_step_function(request, scenario, step, step_func) /usr/local/lib/python3.8/dist-packages/pytest_bdd/scenario.py:130: in _execute_step_function step_func(**kwargs) tests/utils/bdd_utils.py:78: in wrapper return fun(*ba.args, **ba.kwargs) tests/mixed/steps/rest/onezone/special_dirs.py:253: in try_to_establish_dataset_on_special_dir try_to_establish_dataset_on_special_dir_by_id( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ user = 'user1' users = {'admin': <tests.utils.user_utils.AdminUser object at 0x7fc59906e340>, 'admin2': <tests.utils.user_utils.User object a...s.user_utils.AdminUser object at 0x7fc59906e2e0>, 'user1': <tests.utils.user_utils.User object at 0x7fc59906ee50>, ...} hosts = {'oneclient-1': {'container-id': '05a2c26e078f792ae7aa577fd6a6dc0018bc79c44c68fb2ca5adc49dccd5a1a9', 'ip': '10.244.232...89f54f0d985', 'hostname': 'dev-onezone.default.svc.cluster.local', 'ip': '10.244.232.127', 'name': 'dev-onezone', ...}} host = 'oneprovider-1' dir_id = '0000000000840B667368617265477569642373706163655F653631626364633033303831373439666363353837383761386333333966613563683...3538373837613863333339666135636830323736233937353039346630646539366366643362346261636366613262333961386330636837366163' err_msg = 'Established dataset on share root dir, but establishing should have failed' def try_to_establish_dataset_on_special_dir_by_id(user, users, hosts, host, dir_id, err_msg=''): try: create_dataset_in_op_by_id_rest(user, users, hosts, host, dir_id, '') raise Exception(err_msg) except ApiException as e: ex_err_msg = 'You are not authorized to perform this operation.' > assert ex_err_msg in str(e) E AssertionError tests/mixed/steps/rest/onezone/special_dirs.py:267: AssertionError