Acceptance tests using different clients concurrently. Environment deployed from packages.

Build: #1554 failed

Job: Permission POSIX multi failed

user1 creates file using client0 and user2 fails to change its permission using client2[1oz 1op 2oc-web GUi-RESt-oneclient1]: Test case result

The below summarizes the result of the test " user1 creates file using client0 and user2 fails to change its permission using client2[1oz 1op 2oc-web GUi-RESt-oneclient1]" in build 1,554 of Onedata Products - mixed acceptance pkg - Chrome permission POSIX multi tests.
Description
user1 creates file using client0 and user2 fails to change its permission using client2[1oz 1op 2oc-web GUi-RESt-oneclient1]
Test class
mixed.scenarios.test_permission_posix_multi
Method
test_user1_creates_file_using_client0_and_user2_fails_to_change_its_permission_using_client2[1oz_1op_2oc-web GUI-REST-oneclient1]
Duration
3 mins
Status
Failed (New Failure)

Error Log

RuntimeError: no  with "Files" text found in Space in DataPage in Onezone page
selenium = {'browser': <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9eecea1e7")>, 'user1': <se...fba9eecea1e7")>, 'user2': <selenium.webdriver.chrome.webdriver.WebDriver (session="79208555a13601f258041349a3dd198f")>}
browser_id = 'user1', space = 'space1', path = 'file1', perm = '664'
oz_page = <class 'tests.gui.utils.onezone.OZLoggedIn'>
op_container = <class 'tests.gui.utils.oneprovider.OPLoggedIn'>
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})
modals = <class 'tests.gui.utils.common.modals.Modals'>

    @repeat_failed(timeout=WAIT_BACKEND)
    def assert_posix_permissions_in_op_gui(selenium, browser_id, space, path, perm,
                                           oz_page, op_container, tmp_memory,
                                           modals):
        try:
            wt_click_on_confirmation_btn_in_modal(selenium, browser_id, "Cancel",
>                                                 tmp_memory)

tests/gui/meta_steps/oneprovider/permissions.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = ({'browser': <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9eecea1e7")>, 'user1': <s...': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))
kwargs = {}
ba = <BoundArguments (selenium={'user1': <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9e...: None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))>
param = <Parameter "tmp_memory">, ann = <class 'inspect._empty'>

    @wraps(fun)
    def wrapper(*args, **kwargs):
        ba = sig.bind(*args, **kwargs)
        ba.apply_defaults()
    
        for param in parameters.values():
            ann = param.annotation
            if ann is not inspect.Parameter.empty:
                value = ba.arguments[param.name]
                try:
                    if not isinstance(value, ann):
                        ba.arguments[param.name] = ann(value)
                except Exception as ex:
                    msg = f"Cannot cast '{param.name}' <{value}> to {ann}"
                    raise ValueError(msg) from ex
    
>       return fun(*ba.args, **ba.kwargs)

tests/utils/bdd_utils.py:77: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

selenium = {'browser': <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9eecea1e7")>, 'user1': <se...fba9eecea1e7")>, 'user2': <selenium.webdriver.chrome.webdriver.WebDriver (session="79208555a13601f258041349a3dd198f")>}
browser_id = 'user1', button_name = 'Cancel'
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})

    @wt(parsers.re(r'user of (?P<browser_id>\w+) clicks "(?P<button_name>.*)" '
                   '(confirmation )?button in displayed modal'))
    def wt_click_on_confirmation_btn_in_modal(selenium, browser_id, button_name,
                                              tmp_memory):
        driver = selenium[browser_id]
        _click_on_confirmation_btn_in_modal(driver, browser_id, button_name,
>                                           tmp_memory)

tests/gui/steps/modal.py:157: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

driver = <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9eecea1e7")>
browser_id = 'user1', button_name = 'cancel'
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})

    def _click_on_confirmation_btn_in_modal(driver, browser_id, button_name,
                                            tmp_memory):
        @repeat_failed(attempts=WAIT_BACKEND, timeout=True)
        def click_on_btn(d, elem, msg):
            click_on_web_elem(d, elem, msg)
    
        button_name = button_name.lower()
        modal = tmp_memory[browser_id]['window']['modal']
>       buttons = modal.find_elements_by_css_selector('button')
E       AttributeError: 'NoneType' object has no attribute 'find_elements_by_css_selector'

tests/gui/steps/modal.py:141: AttributeError

During handling of the above exception, another exception occurred:

selenium = {'browser': <selenium.webdriver.chrome.webdriver.WebDriver (session="c3559aa549ec7fa35658fba9eecea1e7")>, 'user1': <se...fba9eecea1e7")>, 'user2': <selenium.webdriver.chrome.webdriver.WebDriver (session="79208555a13601f258041349a3dd198f")>}
browser_id = 'user1', path = 'file1', space = 'space1'
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})
oz_page = <class 'tests.gui.utils.onezone.OZLoggedIn'>
op_container = <class 'tests.gui.utils.oneprovider.OPLoggedIn'>

    def _click_menu_for_elem_somewhere_in_file_browser(selenium, browser_id, path,
                                                       space, tmp_memory, oz_page,
                                                       op_container):
        item_name, _ = get_item_name_and_containing_dir_path(path)
    
        try:
            go_to_path_without_last_elem(browser_id, tmp_memory, path)
>           click_menu_for_elem_in_file_browser(browser_id, item_name, tmp_memory)

tests/gui/meta_steps/oneprovider/data.py:37: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = ('user1', 'file1', defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz...': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))
kwargs = {}
ba = <BoundArguments (browser_id='user1', item_name='file1', tmp_memory=defaultdict(<class 'dict'>, {'user1': {'shares': {}...: None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))>
param = <Parameter "tmp_memory">, ann = <class 'inspect._empty'>

    @wraps(fun)
    def wrapper(*args, **kwargs):
        ba = sig.bind(*args, **kwargs)
        ba.apply_defaults()
    
        for param in parameters.values():
            ann = param.annotation
            if ann is not inspect.Parameter.empty:
                value = ba.arguments[param.name]
                try:
                    if not isinstance(value, ann):
                        ba.arguments[param.name] = ann(value)
                except Exception as ex:
                    msg = f"Cannot cast '{param.name}' <{value}> to {ann}"
                    raise ValueError(msg) from ex
    
>       return fun(*ba.args, **ba.kwargs)

tests/utils/bdd_utils.py:77: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = ('user1', 'file1', defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz...': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))
kwargs = {}
ba = <BoundArguments (browser_id='user1', item_name='file1', tmp_memory=defaultdict(<class 'dict'>, {'user1': {'shares': {}...: None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))>
param = <Parameter "tmp_memory">, ann = <class 'inspect._empty'>

    @wraps(fun)
    def wrapper(*args, **kwargs):
        ba = sig.bind(*args, **kwargs)
        ba.apply_defaults()
    
        for param in parameters.values():
            ann = param.annotation
            if ann is not inspect.Parameter.empty:
                value = ba.arguments[param.name]
                try:
                    if not isinstance(value, ann):
                        ba.arguments[param.name] = ann(value)
                except Exception as ex:
                    msg = f"Cannot cast '{param.name}' <{value}> to {ann}"
                    raise ValueError(msg) from ex
    
>       return fun(*ba.args, **ba.kwargs)

tests/utils/bdd_utils.py:77: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser_id = 'user1', item_name = 'file1'
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})

>   ???

<decorator-gen-493>:2: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

fun = <function click_menu_for_elem_in_file_browser at 0x7f6abeb511e0>
args = ('user1', 'file1', defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz...': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}}))
kwargs = {}, now = 1621605983.5593388, limit = 1621605987.5593388
i = 1621605987.5974576

    @decorator
    def wrapper(fun, *args, **kwargs):
        now = time()
        limit, i = (now + timeout, now) if timeout else (attempts, 0)
    
        while i < limit:
            try:
                result = fun(*args, **kwargs)
            except exceptions:
                sleep(interval)
                i = time() if timeout else i+1
                continue
            else:
                return result
>       return fun(*args, **kwargs)

tests/utils/utils.py:90: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser_id = 'user1', item_name = 'file1'
tmp_memory = defaultdict(<class 'dict'>, {'user1': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'...l': None}}, 'browser': {'shares': {}, 'spaces': {}, 'groups': {}, 'mailbox': {}, 'oz': {}, 'window': {'modal': None}}})

    @wt(parsers.parse('user of {browser_id} clicks on menu '
                      'for "{item_name}" directory in file browser'))
    @wt(parsers.parse('user of {browser_id} clicks on menu '
                      'for "{item_name}" file in file browser'))
    @repeat_failed(timeout=WAIT_FRONTEND)
    def click_menu_for_elem_in_file_browser(browser_id, item_name, tmp_memory):
>       browser = tmp_memory[browser_id]['file_browser']
E       KeyError: 'file_browser'

tests/gui/steps/oneprovider/file_browser.py:348: KeyError

During handling of the above exception, another exception occurred:

request = <FixtureRequest for <Function 'test_user1_creates_file_using_client0_and_user2_fails_to_change_its_permission_using_client2[1oz_1op_2oc-web GUI-REST-oneclient1]'>>

    @pytest.mark.usefixtures(*function_args)
    def scenario_wrapper(request):
>       _execute_scenario(feature, scenario, request, encoding)

/usr/local/lib/python3.6/dist-packages/pytest_bdd/scenario.py:227: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/local/lib/python3.6/dist-packages/pytest_bdd/scenario.py:189: in _execute_scenario
    _execute_step_function(request, scenario, step, step_func)
/usr/local/lib/python3.6/dist-packages/pytest_bdd/scenario.py:130: in _execute_step_function
    step_func(**kwargs)
tests/utils/bdd_utils.py:77: in wrapper
    return fun(*ba.args, **ba.kwargs)
<decorator-gen-771>:2: in assert_posix_permissions_in_op
    ???
tests/utils/utils.py:90: in wrapper
    return fun(*args, **kwargs)
tests/mixed/steps/data_permissions.py:103: in assert_posix_permissions_in_op
    tmp_memory, modals)
<decorator-gen-763>:2: in assert_posix_permissions_in_op_gui
    ???
tests/utils/utils.py:90: in wrapper
    return fun(*args, **kwargs)
tests/gui/meta_steps/oneprovider/permissions.py:64: in assert_posix_permissions_in_op_gui
    modals)
tests/gui/meta_steps/oneprovider/permissions.py:45: in _assert_posix_permissions
    oz_page, op_container, 'posix')
tests/gui/meta_steps/oneprovider/permissions.py:36: in open_permission_modal
    oz_page, op_container)
tests/gui/meta_steps/oneprovider/data.py:406: in open_modal_for_file_browser_item
    op_container)
tests/gui/meta_steps/oneprovider/data.py:40: in _click_menu_for_elem_somewhere_in_file_browser
    tmp_memory, space)
tests/utils/bdd_utils.py:77: in wrapper
    return fun(*ba.args, **ba.kwargs)
tests/gui/meta_steps/oneprovider/data.py:396: in go_to_filebrowser
    oz_page)
tests/utils/bdd_utils.py:77: in wrapper
    return fun(*ba.args, **ba.kwargs)
<decorator-gen-635>:2: in click_on_option_of_space_on_left_sidebar_menu
    ???
tests/utils/utils.py:90: in wrapper
    return fun(*args, **kwargs)
tests/gui/steps/onezone/spaces.py:272: in click_on_option_of_space_on_left_sidebar_menu
    transform(option)).click()
tests/gui/utils/core/web_elements.py:58: in __get__
    elem = super(WebItem, self).__get__(instance, owner)
tests/gui/utils/core/web_elements.py:52: in __get__
    lambda: self._format_msg(err_msg, instance,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

web_elem_root = <selenium.webdriver.remote.webelement.WebElement (session="c3559aa549ec7fa35658fba9eecea1e7", element="75a7424f-938a-43a8-b644-1022c5042370")>
css_sel = '.one-list-level-2 .item-header', text = 'Files'
err_msg = 'no  with "Files" text found in Space in DataPage in Onezone page'

    def find_web_elem_with_text(web_elem_root, css_sel, text, err_msg):
        items = web_elem_root.find_elements_by_css_selector(css_sel)
        _scroll_to_css_sel(web_elem_root, css_sel)
        for item in items:
            if item.text.lower() == text.lower():
                return item
        else:
            with suppress(TypeError):
                err_msg = err_msg()
>           raise RuntimeError(err_msg)
E           RuntimeError: no  with "Files" text found in Space in DataPage in Onezone page

tests/gui/utils/generic.py:111: RuntimeError