whoami: 1003950000 ./execute_clc_interop_commands.sh: line 6: cypress: command not found acm-interops-opp-ci acm-interops-opp-ci-azg Cypress API URL: https://api.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com:6443 + echo 'Initiating CLC E2E tests...' Initiating CLC E2E tests... + export BROWSER=chrome + BROWSER=chrome + export CYPRESS_OC_IDP=kube:admin + CYPRESS_OC_IDP=kube:admin + export CYPRESS_OPTIONS_HUB_USER=kubeadmin + CYPRESS_OPTIONS_HUB_USER=kubeadmin + export CYPRESS_SPOKE_CLUSTER= + CYPRESS_SPOKE_CLUSTER= + export CYPRESS_CLC_OC_IDP=clc-e2e-htpasswd + CYPRESS_CLC_OC_IDP=clc-e2e-htpasswd + export CYPRESS_CLC_RBAC_PASS=test-RBAC-4-e2e + CYPRESS_CLC_RBAC_PASS=test-RBAC-4-e2e + export CYPRESS_CLC_OCP_IMAGE_VERSION=XXXXXX + CYPRESS_CLC_OCP_IMAGE_VERSION=XXXXXX + export CYPRESS_CLC_OCP_IMAGE_REGISTRY=quay.io/openshift-release-dev/ocp-release + CYPRESS_CLC_OCP_IMAGE_REGISTRY=quay.io/openshift-release-dev/ocp-release + export CYPRESS_ACM_NAMESPACE=ocm + CYPRESS_ACM_NAMESPACE=ocm + export CYPRESS_MCE_NAMESPACE=multicluster-engine + CYPRESS_MCE_NAMESPACE=multicluster-engine + [[ -z kubeadmin ]] + [[ -z vQyHF-qQMZC-UP3B8-KVDdF ]] + [[ -z https://api.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com:6443 ]] + echo -e 'Doing oc login using CYPRESS_HUB_API_URL, CYPRESS_OPTIONS_HUB_USER, CYPRESS_OPTIONS_HUB_PASSWORD' Doing oc login using CYPRESS_HUB_API_URL, CYPRESS_OPTIONS_HUB_USER, CYPRESS_OPTIONS_HUB_PASSWORD + set +x WARNING: Using insecure TLS client config. Setting this option is not supported! Login successful. You have access to 80 projects, the list has been suppressed. You can list all projects with 'oc projects' Using project "default". ++ oc whoami --show-console + export CYPRESS_BASE_URL=https://console-openshift-console.apps.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com + CYPRESS_BASE_URL=https://console-openshift-console.apps.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com + echo -e 'Running tests with the following environment:\n' Running tests with the following environment: + echo -e '\tCYPRESS_HUB_API_URL : https://api.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com:6443' CYPRESS_HUB_API_URL : https://api.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com:6443 + echo -e '\tCYPRESS_OPTIONS_HUB_BASE_URL : https://console-openshift-console.apps.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com' CYPRESS_OPTIONS_HUB_BASE_URL : https://console-openshift-console.apps.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com + echo -e '\tCYPRESS_OPTIONS_HUB_USER : kubeadmin' CYPRESS_OPTIONS_HUB_USER : kubeadmin + echo + bash build/setup-client.sh --2024-02-14 23:52:54-- https://releases.ansible.com/ansible-tower/cli/ansible-tower-cli-3.8.3-1.tar.gz Resolving releases.ansible.com (releases.ansible.com)... 104.26.0.234, 104.26.1.234, 172.67.68.251, ... Connecting to releases.ansible.com (releases.ansible.com)|104.26.0.234|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 92652 (90K) [application/x-gzip] Saving to: 'ansible-tower-cli-3.8.3-1.tar.gz' 0K .......... .......... .......... .......... .......... 55% 52.5M 0s 50K .......... .......... .......... .......... 100% 51.9M=0.002s 2024-02-14 23:52:55 (52.2 MB/s) - 'ansible-tower-cli-3.8.3-1.tar.gz' saved [92652/92652] awxkit-3.8.3/ awxkit-3.8.3/awxkit/ awxkit-3.8.3/awxkit/api/ awxkit-3.8.3/awxkit/api/mixins/ awxkit-3.8.3/awxkit/api/mixins/__init__.py awxkit-3.8.3/awxkit/api/mixins/has_copy.py awxkit-3.8.3/awxkit/api/mixins/has_create.py awxkit-3.8.3/awxkit/api/mixins/has_instance_groups.py awxkit-3.8.3/awxkit/api/mixins/has_notifications.py awxkit-3.8.3/awxkit/api/mixins/has_status.py awxkit-3.8.3/awxkit/api/mixins/has_survey.py awxkit-3.8.3/awxkit/api/mixins/has_variables.py awxkit-3.8.3/awxkit/api/pages/ awxkit-3.8.3/awxkit/api/pages/__init__.py awxkit-3.8.3/awxkit/api/pages/access_list.py awxkit-3.8.3/awxkit/api/pages/activity_stream.py awxkit-3.8.3/awxkit/api/pages/ad_hoc_commands.py awxkit-3.8.3/awxkit/api/pages/api.py awxkit-3.8.3/awxkit/api/pages/applications.py awxkit-3.8.3/awxkit/api/pages/authtoken.py awxkit-3.8.3/awxkit/api/pages/base.py awxkit-3.8.3/awxkit/api/pages/config.py awxkit-3.8.3/awxkit/api/pages/credential_input_sources.py awxkit-3.8.3/awxkit/api/pages/credentials.py awxkit-3.8.3/awxkit/api/pages/dashboard.py awxkit-3.8.3/awxkit/api/pages/instance_groups.py awxkit-3.8.3/awxkit/api/pages/instances.py awxkit-3.8.3/awxkit/api/pages/inventory.py awxkit-3.8.3/awxkit/api/pages/job_templates.py awxkit-3.8.3/awxkit/api/pages/jobs.py awxkit-3.8.3/awxkit/api/pages/labels.py awxkit-3.8.3/awxkit/api/pages/metrics.py awxkit-3.8.3/awxkit/api/pages/notification_templates.py awxkit-3.8.3/awxkit/api/pages/notifications.py awxkit-3.8.3/awxkit/api/pages/organizations.py awxkit-3.8.3/awxkit/api/pages/page.py awxkit-3.8.3/awxkit/api/pages/ping.py awxkit-3.8.3/awxkit/api/pages/projects.py awxkit-3.8.3/awxkit/api/pages/roles.py awxkit-3.8.3/awxkit/api/pages/schedules.py awxkit-3.8.3/awxkit/api/pages/settings.py awxkit-3.8.3/awxkit/api/pages/subscriptions.py awxkit-3.8.3/awxkit/api/pages/survey_spec.py awxkit-3.8.3/awxkit/api/pages/system_job_templates.py awxkit-3.8.3/awxkit/api/pages/system_jobs.py awxkit-3.8.3/awxkit/api/pages/teams.py awxkit-3.8.3/awxkit/api/pages/unified_job_templates.py awxkit-3.8.3/awxkit/api/pages/unified_jobs.py awxkit-3.8.3/awxkit/api/pages/users.py awxkit-3.8.3/awxkit/api/pages/workflow_approvals.py awxkit-3.8.3/awxkit/api/pages/workflow_job_nodes.py awxkit-3.8.3/awxkit/api/pages/workflow_job_template_nodes.py awxkit-3.8.3/awxkit/api/pages/workflow_job_templates.py awxkit-3.8.3/awxkit/api/pages/workflow_jobs.py awxkit-3.8.3/awxkit/api/__init__.py awxkit-3.8.3/awxkit/api/client.py awxkit-3.8.3/awxkit/api/registry.py awxkit-3.8.3/awxkit/api/resources.py awxkit-3.8.3/awxkit/api/utils.py awxkit-3.8.3/awxkit/awx/ awxkit-3.8.3/awxkit/awx/__init__.py awxkit-3.8.3/awxkit/awx/inventory.py awxkit-3.8.3/awxkit/awx/utils.py awxkit-3.8.3/awxkit/cli/ awxkit-3.8.3/awxkit/cli/docs/ awxkit-3.8.3/awxkit/cli/docs/source/ awxkit-3.8.3/awxkit/cli/docs/source/conf.py awxkit-3.8.3/awxkit/cli/docs/README.md awxkit-3.8.3/awxkit/cli/__init__.py awxkit-3.8.3/awxkit/cli/client.py awxkit-3.8.3/awxkit/cli/custom.py awxkit-3.8.3/awxkit/cli/format.py awxkit-3.8.3/awxkit/cli/options.py awxkit-3.8.3/awxkit/cli/resource.py awxkit-3.8.3/awxkit/cli/sphinx.py awxkit-3.8.3/awxkit/cli/stdout.py awxkit-3.8.3/awxkit/cli/utils.py awxkit-3.8.3/awxkit/scripts/ awxkit-3.8.3/awxkit/scripts/__init__.py awxkit-3.8.3/awxkit/scripts/basic_session.py awxkit-3.8.3/awxkit/utils/ awxkit-3.8.3/awxkit/utils/__init__.py awxkit-3.8.3/awxkit/utils/toposort.py awxkit-3.8.3/awxkit/__init__.py awxkit-3.8.3/awxkit/config.py awxkit-3.8.3/awxkit/exceptions.py awxkit-3.8.3/awxkit/words.py awxkit-3.8.3/awxkit/ws.py awxkit-3.8.3/awxkit/yaml_file.py awxkit-3.8.3/awxkit.egg-info/ awxkit-3.8.3/awxkit.egg-info/PKG-INFO awxkit-3.8.3/awxkit.egg-info/SOURCES.txt awxkit-3.8.3/awxkit.egg-info/dependency_links.txt awxkit-3.8.3/awxkit.egg-info/entry_points.txt awxkit-3.8.3/awxkit.egg-info/requires.txt awxkit-3.8.3/awxkit.egg-info/top_level.txt awxkit-3.8.3/test/ awxkit-3.8.3/test/cli/ awxkit-3.8.3/test/cli/test_client.py awxkit-3.8.3/test/cli/test_config.py awxkit-3.8.3/test/cli/test_format.py awxkit-3.8.3/test/cli/test_options.py awxkit-3.8.3/test/__init__.py awxkit-3.8.3/test/test_credentials.py awxkit-3.8.3/test/test_dependency_resolver.py awxkit-3.8.3/test/test_registry.py awxkit-3.8.3/test/test_utils.py awxkit-3.8.3/test/test_ws.py awxkit-3.8.3/MANIFEST.in awxkit-3.8.3/README.md awxkit-3.8.3/VERSION awxkit-3.8.3/requirements.txt awxkit-3.8.3/setup.py awxkit-3.8.3/PKG-INFO awxkit-3.8.3/setup.cfg /tmp/clc/awxkit-3.8.3 /tmp/clc running install error: can't create or remove files in install directory The following error occurred while trying to add or remove files in the installation directory: [Errno 13] Permission denied: '/usr/local/lib/python3.6' The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was: /usr/local/lib/python3.6/site-packages/ This directory does not currently exist. Please create it and try again, or choose a different installation directory (using the -d or --install-dir option). /tmp/clc + '[' -z ']' + echo 'CYPRESS_HUB_OCP_VERSION is not defined, setting...' CYPRESS_HUB_OCP_VERSION is not defined, setting... + echo 'oc get clusterversion -ojsonpath='\''{.items[0].status.desired.version}'\''' oc get clusterversion -ojsonpath='{.items[0].status.desired.version}' ++ oc get clusterversion '-ojsonpath={.items[0].status.desired.version}' + export CYPRESS_HUB_OCP_VERSION=4.15.0-0.nightly-2024-02-14-163141 + CYPRESS_HUB_OCP_VERSION=4.15.0-0.nightly-2024-02-14-163141 + '[' -z x ']' + [[ chrome == \c\h\r\o\m\e ]] + command -v google-chrome + [[ 0 -ne 0 ]] + [[ -z multicluster-engine ]] + [[ -z ocm ]] ++ date + echo 'Wed Feb 14 23:52:55 UTC 2024 ==== Ensure hypershift-addon is in good condition ====' Wed Feb 14 23:52:55 UTC 2024 ==== Ensure hypershift-addon is in good condition ==== + bash build/hypershift/enableHypershift.sh Wed Feb 14 23:52:55 UTC 2024 ==== Verify ACM or MCE is installed ==== multiclusterengine waiting for hypershift-addon... Hypershift addon is available ++ date + echo 'Wed Feb 14 23:52:56 UTC 2024 ==== Enable SNO feature (dev preview) ====' Wed Feb 14 23:52:56 UTC 2024 ==== Enable SNO feature (dev preview) ==== + oc patch configmaps console-mce-config -n multicluster-engine --patch '{"data":{"singleNodeOpenshift": "enabled"}}' configmap/console-mce-config patched + [[ ! -z ocm ]] + [[ ocm != '' ]] + oc patch configmaps console-mce-config -n multicluster-engine --patch '{"data":{"singleNodeOpenshift": "enabled"}}' configmap/console-mce-config patched (no change) + HEADLESS=--headless + [[ '' == true ]] + [[ -z '' ]] + export NODE_ENV=production + NODE_ENV=production + [[ ! -f ./options.yaml ]] + npx browserslist@latest --update-db npx: installed 7 in 1.487s The --update-db command is deprecated. Please use npx update-browserslist-db@latest instead. Browserslist DB update will still be made. Latest version: [1m[32m1.0.30001587[39m[22m Installed version: [1m[32m1.0.30001587[39m[22m [1m[32mcaniuse-lite is up to date[39m[22m caniuse-lite has been successfully updated [32mNo target browser changes[39m + echo -e 'Setting env to run in: production' Setting env to run in: production + section_title 'Running CLC UI tests.' + export TERM=xterm-256color + TERM=xterm-256color ++ tput bold ++ tput sgr0 + printf '\n[1mRunning CLC UI tests. (B[m\n' [1mRunning CLC UI tests. (B[m + [[ -d reports ]] + echo 'List the clusters fixtures' List the clusters fixtures + ls -lrth 'cypress/fixtures/importClusters/*' ls: cannot access 'cypress/fixtures/importClusters/*': No such file or directory + [[ production == \c\i\m ]] + [[ ! -z '' ]] + case $TEST_STAGE in + run_ocpinterop_create + export CYPRESS_IMPORT_KUBERNETES_CLUSTERS= + CYPRESS_IMPORT_KUBERNETES_CLUSTERS= + npx cypress run --browser chrome --headless --reporter cypress-multi-reporters --spec cypress/tests/credentials/addCredentials.spec.js,cypress/tests/clusters/managedClusters/create/importClusters.spec.js,cypress/tests/clusters/managedClusters/create/createClusters.spec.js --env 'grepFilterSpecs=true,grepOmitFiltered=true,grepTags=@ocpInterop+@create @ocpInterop+@import' It looks like this is your first time using Cypress: 9.7.0 [STARTED] Task without title. [SUCCESS] Task without title. Opening Cypress... [577:0214/235302.401063:ERROR:zygote_host_impl_linux.cc(263)] Failed to adjust OOM score of renderer with pid 728: Permission denied (13) [728:0214/235302.426750:ERROR:sandbox_linux.cc(377)] InitializeSandbox() called with multiple threads in process gpu-process. [728:0214/235302.429235:ERROR:gpu_memory_buffer_support_x11.cc(44)] dri3 extension not supported. Adding Date.now() suffix to all cluster names in options-*.yaml loaded: aws cluster name used in tests will be: acm-interops-opp-ci-1707954783247 aws cluster pool name used in tests will be: XXXXX-clc-auto-pool-aws1-1707954783247 azure cluster name used in tests will be: acm-interops-opp-ci-az-1707954783247 azure cluster pool name used in tests will be: XXXXX-clc-auto-pool-azure1-1707954783247 XXX cluster name used in tests will be: acm-interops-opp-ci-XXX-1707954783247 XXX cluster pool name used in tests will be: XXXXX-clc-auto-pool-XXX1-1707954783247 azgov cluster name used in tests will be: acm-interops-opp-ci-azg-1707954783247 azgov cluster pool name used in tests will be: XXXXX-clc-auto-pool-azgov-1707954783247 cypress-grep: filtering using tag(s) "@ocpInterop+@create @ocpInterop+@import" cypress-grep: will omit filtered tests cypress-grep: filtering specs using tag "@ocpInterop+@create @ocpInterop+@import" Grep "undefined" has eliminated all specs Will leave all specs to run to filter at run-time [90m====================================================================================================[39m [0m ([4m[1mRun Starting[22m[24m)[0m [90m ┌[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m┐[39m [90m │[39m [90mCypress:[39m 9.7.0 [90m│[39m [90m │[39m [90mBrowser:[39m Chrome 114 [90m(headless)[39m [90m│[39m [90m │[39m [90mNode Version:[39m [0mv14.21.1 [90m(/usr/bin/node)[39m[0m [90m│[39m [90m │[39m [90mSpecs:[39m [0m3 found (clusters/managedClusters/create/createClusters.spec.js, clusters/mana[0m [90m│[39m [90m │[39m [0mgedClusters/create/importClusters.spec.js, credentials/addCredentials.spec.js)[0m [90m│[39m [90m │[39m [90mSearched:[39m [0mcypress/tests/credentials/addCredentials.spec.js, cypress/tests/clusters/manag[0m [90m│[39m [90m │[39m [0medClusters/create/importClusters.spec.js, cypress/tests/clusters/managedCluste[0m [90m│[39m [90m │[39m [0mrs/create/createClusters.spec.js[0m [90m│[39m [90m └[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m┘[39m [90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m[90m─[39m Running: [90mclusters/managedClusters/create/createClusters.spec.js[39m [90m(1 of 3)[39m Browserslist: caniuse-lite is outdated. Please run: npx browserslist@latest --update-db Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating [0m[0m [0m create clusters[0m [37m cons:info ⓘ [39m loaded console.openshift.io~v1~ConsoleLink [32m cy:command ✔ [39m window [37m cons:log ⓘ [39m websocket open: /api/kubernetes/apis/console.openshift.io/v1/consolelinks?watch=true&resourceVersion=48136 [37m cons:log ⓘ [39m websocket closed: /api/kubernetes/apis/console.openshift.io/v1/consolelinks?watch=true&resourceVersion=48136, { "isTrusted": true } [37m cons:log ⓘ [39m WS closed abnormally [37m cons:log ⓘ [39m destroying websocket: /api/kubernetes/apis/console.openshift.io/v1/consolelinks?watch=true&resourceVersion=48136 [37m cons:log ⓘ [39m WS console.openshift.io~v1~ConsoleLink timed out - restarting polling [32m cy:request ✔ [39m GET https://api.ci-op-0v2836nv-219ee.cspilp.interop.ccitredhat.com:6443/api/v1/namespaces/default/secrets/XXX-conn-auto-dhu Status: 404 Response body: { "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "secrets \"XXX-conn-auto-dhu\" not found", "reason": "NotFound", "details": { "name": "XXX-conn-auto-dhu", "kind": "secrets" }, "code": 404 } [32m cy:command ✔ [39m wrap Object{8} [32m cy:command ✔ [39m url [32m cy:command ✔ [39m get #page-sidebar [32m cy:command ✔ [39m assert expected **