Skip to content

fix (tests) : update userstory path to specs/dashboard-samples (#23514)#23515

Merged
dmytro-ndp merged 1 commit intoeclipse-che:mainfrom
rohankanojia-forks:pr/issue23514
Aug 6, 2025
Merged

fix (tests) : update userstory path to specs/dashboard-samples (#23514)#23515
dmytro-ndp merged 1 commit intoeclipse-che:mainfrom
rohankanojia-forks:pr/issue23514

Conversation

@rohanKanojia
Copy link
Copy Markdown
Contributor

@rohanKanojia rohanKanojia commented Aug 6, 2025

What does this PR do?

The test script was previously checking for user stories under specs/devfiles, which no longer exists or contains relevant test specs. This commit updates the checkUserstoryName function to look in specs/dashboard-samples, where the current user story specs (e.g., *.spec.ts) are now located.

This resolves issues where valid USERSTORY values were incorrectly reported as missing.

Screenshot/screencast of this PR

This PR is fixing Che Happy Path E2E test. It is currently failing with this error:

Run ./launch.sh in tests/devworkspace-happy-path, you'd see this error:


TS_SELENIUM_VALUE_TLS_SUPPORT =       
TS_SELENIUM_VALUE_OPENSHIFT_OAUTH =   true
TS_OCP_LOGIN_PAGE_PROVIDER_TITLE =    dev-htpasswd
E2E_OCP_CLUSTER_VERSION =             4.x
TS_SELENIUM_LOG_LEVEL =               TRACE
TS_SELENIUM_OCP_USERNAME =            happypath-dev
TS_SELENIUM_W3C_CHROME_OPTION =       true
NODE_TLS_REJECT_UNAUTHORIZED =        0
TS_SELENIUM_EDITOR =                  che-code
ls: cannot access 'specs/devfiles': No such file or directory

Variable TS_SELENIUM_EDITOR is unset. It will be assign to default value.

TS_SELENIUM_EDITOR = che-code


Current value USERSTORY="EmptyWorkspace" doesn't match to any of existing tests:

ls: cannot access 'specs/devfiles': No such file or directory


Please choose one of the tests above, or unset the "USERSTORY" variable for launching all of them.

With these changes, I'm able to see Happy Path Test getting fully executed and passing. Here are logs:

TS_SELENIUM_VALUE_TLS_SUPPORT =       
TS_SELENIUM_VALUE_OPENSHIFT_OAUTH =   true
TS_OCP_LOGIN_PAGE_PROVIDER_TITLE =    dev-htpasswd
E2E_OCP_CLUSTER_VERSION =             4.x
TS_SELENIUM_LOG_LEVEL =               TRACE
TS_SELENIUM_OCP_USERNAME =            happypath-dev
TS_SELENIUM_W3C_CHROME_OPTION =       true
NODE_TLS_REJECT_UNAUTHORIZED =        0
TS_SELENIUM_EDITOR =                  che-code

Variable TS_SELENIUM_EDITOR is unset. It will be assign to default value.

TS_SELENIUM_EDITOR = che-code


Launching the "EmptyWorkspace" userstory

MOCHA_DIRECTORY = dashboard-samples

> @eclipse-che/che-e2e@7.107.0-next lint
> eslint --fix .


> @eclipse-che/che-e2e@7.107.0-next tsc
> rm -rf ./dist && ./configs/sh-scripts/generateIndex.sh && tsc -p .

Generating index.ts file...

################## Launch Information ##################

      TS_SELENIUM_BASE_URL: http://eclipse-che.apps-crc.testing
      TS_SELENIUM_HEADLESS: false
      TS_SELENIUM_OCP_USERNAME: happypath-dev
      TS_SELENIUM_EDITOR:   che-code

      TS_SELENIUM_HAPPY_PATH_WORKSPACE_NAME: EmptyWorkspace
      TS_SELENIUM_DELAY_BETWEEN_SCREENSHOTS: 1000
      TS_SELENIUM_REPORT_FOLDER: ./report
      TS_SELENIUM_EXECUTION_SCREENCAST: false
      DELETE_SCREENCAST_IF_TEST_PASS: true
      TS_SELENIUM_REMOTE_DRIVER_URL: http://localhost:4444/wd/hub
      DELETE_WORKSPACE_ON_FAILED_TEST: true
      TS_SELENIUM_LOG_LEVEL: TRACE
      TS_SELENIUM_LAUNCH_FULLSCREEN: true

      

      TS_COMMON_DASHBOARD_WAIT_TIMEOUT: 5000
      TS_SELENIUM_START_WORKSPACE_TIMEOUT: 540000
      TS_WAIT_LOADER_PRESENCE_TIMEOUT: 60000

      TS_SAMPLE_LIST: Node.js MongoDB,Node.js Express,Java Lombok,Quarkus REST API,Python,.NET,C/C++,Go,PHP,Ansible

      MOCHA_DIRECTORY: dashboard-samples
      USERSTORY: EmptyWorkspace

      to output timeout variables, set TS_SELENIUM_PRINT_TIMEOUT_VARIABLES to true
 ######################################################## 


            ‣ DriverHelper.getDriver
  Empty Workspace test 
          ▼ LoginTests.loginIntoChe
            ‣ BrowserTabsUtil.getCurrentUrl
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.navigateTo - http://eclipse-che.apps-crc.testing
            ‣ DriverHelper.navigateToUrl
            ‣ DriverHelper.getDriver
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 1000ms timeout
  [ERROR] DriverHelper.waitVisibility - failed with exception, out of attempts - TimeoutError: Waiting for element to be located By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
  Wait timed out after 1179ms
          ▼ LoginTests.loginIntoChe - try to login into application
          ▼ RegularUserOcpCheLoginPage.login
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@class="panel-login"]/div[contains(@class, "panel-content")]/form/button)
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@class="panel-login"]/div[contains(@class, "panel-content")]/form/button)
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.isIdentityProviderLinkVisible
            ‣ DriverHelper.waitVisibilityBoolean - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.isVisible - By(xpath, //a[text()="dev-htpasswd"])
          ▼ OcpLoginPage.waitAndClickOnLoginProviderTitle
            ‣ DriverHelper.waitAndClick - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.waitVisibility - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.waitOpenShiftLoginWelcomePage
            ‣ DriverHelper.waitVisibility - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.enterUserNameOpenShift - "happypath-dev"
            ‣ DriverHelper.enterValue - By(css selector, *[id="inputUsername"]) text: happypath-dev
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.clear - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputUsername"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.type - By(css selector, *[id="inputUsername"]) text: happypath-dev
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputUsername"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.enterPasswordOpenShift
            ‣ DriverHelper.enterValue - By(css selector, *[id="inputPassword"]) text: ***
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.clear - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputPassword"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.type - By(css selector, *[id="inputPassword"]) text: ***
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputPassword"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.clickOnLoginButton
            ‣ DriverHelper.waitAndClick - By(css selector, button[type=submit])
            ‣ DriverHelper.waitVisibility - By(css selector, button[type=submit])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.waitDisappearanceOpenShiftLoginWelcomePage
            ‣ DriverHelper.waitDisappearance - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.waitDisappearanceBoolean - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.isVisible - By(xpath, //*[contains(text(), "Welcome")])
          ▼ OcpLoginPage.isAuthorizeOpenShiftIdentityProviderPageVisible
            ‣ DriverHelper.isVisible - By(xpath, //h1[text()="Authorize Access"])
            ‣ BrowserTabsUtil.maximize
          ▼ BrowserTabsUtil.maximize - TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.
            ‣ DriverHelper.getDriver
          ▼ Dashboard.waitStartingPageLoaderDisappearance
            ‣ DriverHelper.waitDisappearance - By(css selector, .main-page-loader)
            ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .main-page-loader)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
          ▼ Dashboard.clickWorkspacesButton
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ WorkspaceHandlingTests.createAndOpenWorkspace - fetching user kubernetes namespace, storing auth token by getting workspaces API URL.
          ▼ ApiUrlResolver.obtainUserNamespace
            ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API
            ‣ DriverHelper.getDriver
(node:231) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(Use `node --trace-warnings ...` to show where the warning was created)
          ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: happypath-dev-che
          ▼ Dashboard.clickCreateWorkspaceButton
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ CreateWorkspace.waitPage
          ▼ CreateWorkspace.waitTitleContains - text: "Create Workspace"
            ‣ DriverHelper.waitVisibility - By(xpath, //h1[contains(text(), 'Create Workspace')])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ BrowserTabsUtil.getCurrentWindowHandle
            ‣ DriverHelper.getDriver
          ▼ CreateWorkspace.clickOnSampleNoEditorSelection - sampleName: "Empty Workspace"
            ‣ CreateWorkspace.getSampleLocator - sampleName: Empty Workspace, used default editor
            ‣ DriverHelper.waitAndClick - By(xpath, //article[contains(@class, 'sample-card')]//div[text()='Empty Workspace'])
            ‣ DriverHelper.waitVisibility - By(xpath, //article[contains(@class, 'sample-card')]//div[text()='Empty Workspace'])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ BrowserTabsUtil.waitAndSwitchToAnotherWindow
            ‣ DriverHelper.waitUntilTrue
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
    ✔ Create and open new workspace, stack:Empty Workspace
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained starting workspace getText():Starting workspace empty-3gom
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - trimmed workspace name from getText():empty-3gom
      • WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained workspace name from workspace loader page: empty-3gom
    ✔ Obtain workspace name from workspace loader page
          ▼ registerRunningWorkspace - with workspaceName:empty-3gom
    ✔ Register running workspace
          ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - waiting for editor.
            ‣ DriverHelper.waitVisibility - By(css selector, .monaco-workbench)
            ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #5, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #6, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #7, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #8, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #9, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #10, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #11, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #12, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #13, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #14, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - editor was opened in 17994 seconds.
          ▼ Editor sections:
          ▼ Explorer (Ctrl+Shift+E)
          ▼ Search (Ctrl+Shift+F)
          ▼ Source Control (Ctrl+Shift+G)
          ▼ Run and Debug (Ctrl+Shift+D)
          ▼ Extensions (Ctrl+Shift+X)
    ✔ Wait workspace readiness
          ▼ Dashboard.openDashboard
            ‣ DriverHelper.navigateToUrl
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
          ▼ Dashboard.openDashboard - No alert detected
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ BrowserTabsUtil.closeAllTabsExceptCurrent
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.getCurrentWindowHandle
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.stopAndDeleteWorkspaceByName
          ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-3gom
          ▼ ApiUrlResolver.obtainUserNamespace
            ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API
            ‣ DriverHelper.getDriver
          ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: happypath-dev-che
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.waitWorkspaceStatus
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-3gom stopped successfully
          ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-3gom
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-3gom deleted successfully
          ▼     at /tmp/e2e/specs/MochaHooks.ts:39:12 - delete workspace name


  4 passing (52s)

+ EXIT_CODE=0
+ '[' true == true ']'
+ kill_ffmpeg
Killing ffmpeg with PID=134
+ echo 'Killing ffmpeg with PID=134'
+ kill -2 134
+ wait 134
+ mkdir -p /tmp/e2e/report/
+ cp /tmp/ffmpeg_report/ffmpeg_err.txt /tmp/ffmpeg_report/ffmpeg_std.txt /tmp/ffmpeg_report/output.webm /tmp/e2e/report/
+ exit 0
[INFO] Downloading test report.
WARNING: cannot use rsync: rsync not available in container
./ffmpeg_err.txt
./ffmpeg_std.txt
./output.webm
[INFO] Happy-path test succeed.
[INFO] Happy-path execution took 126.171823671 seconds.

What issues does this PR fix or reference?

Fix #23514

Related to devfile/devworkspace-operator#1474

How to test this PR?

  • Checkout to this branch
  • cd tests/e2e
  • Create container image for test image based on these changes: docker build -t ${REGISTRY}/${USER}/che-e2e:next -f build/dockerfiles/Dockerfile .
  • Update tests/devworkspace-happy-path/start-happypath-tests.sh to use this custom image
-export E2E_TEST_IMAGE="${E2E_TEST_IMAGE:-quay.io/eclipse/che-e2e:next}"
+export E2E_TEST_IMAGE="${E2E_TEST_IMAGE:-docker.io/rohankanojia/che-e2e:next}"
  • cd tests/devworkspace-happy-path
  • Run ./launch.sh

You should be able to see all the specs getting tested and logged in test output.

PR Checklist

As the author of this Pull Request I made sure that:

Reviewers

Reviewers, please comment how you tested the PR when approving it.

…se-che#23514)

The test script was previously checking for user stories under `specs/devfiles`,
which no longer exists or contains relevant test specs. This commit updates the
`checkUserstoryName` function to look in `specs/dashboard-samples`, where the
current user story specs (e.g., `*.spec.ts`) are now located.

This resolves issues where valid USERSTORY values were incorrectly reported
as missing.

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
@rohanKanojia rohanKanojia marked this pull request as ready for review August 6, 2025 10:10
@dmytro-ndp
Copy link
Copy Markdown
Contributor

@rohanKanojia : hello,
Thank you for the fix!

Do you happen to have successful test run logs to share?

@rohanKanojia
Copy link
Copy Markdown
Contributor Author

rohanKanojia commented Aug 6, 2025

@dmytro-ndp : Hello, Please find the complete logs attached:

Output after running ./launch.sh in tests/devworkspace-happy-path with customized E2E test image docker.io/rohankanojia/che-e2e:next

[INFO] Testing if Che User exists.
Login failed (401 Unauthorized)
Verify you have provided correct credentials.
[INFO] Che User does not exist. Setting up htpasswd oauth for it.
secret "dev-htpasswd-secret" deleted
secret/dev-htpasswd-secret created
[INFO] dev-htpasswd oauth provider is found. Using it
[INFO] rollout oauth-openshift pods for applying OAuth configuration
deployment "oauth-openshift" successfully rolled out
[INFO] Waiting for htpasswd auth to be working up to 5 minutes
Login successful.

You have one project on this server: "happypath-dev-che"

Using project "happypath-dev-che".
Error from server (AlreadyExists): namespaces "eclipse-che" already exists
pod "happy-path-che" deleted
[INFO] Applying the following patched Che Happy Path Pod:
apiVersion: v1
kind: Pod
metadata:
  name: happy-path-che
  namespace: eclipse-che
spec:
  volumes:
    - name: test-run-results
    - name: dshm
      emptyDir:
        medium: Memory
  containers:
    # container containing the tests
    - name: happy-path-test
      image: docker.io/rohankanojia/che-e2e:next
      imagePullPolicy: Always
      env:
        - name: TEST_SUITE
          value: test-all-devfiles
        - name: USERSTORY
          value: EmptyWorkspace
        - name: NODE_TLS_REJECT_UNAUTHORIZED
          value: '0'
        - name: TS_SELENIUM_BASE_URL
          value: http://eclipse-che.apps-crc.testing
        - name: TS_SELENIUM_DEVWORKSPACE_URL
          value: http://eclipse-che.apps-crc.testing/#https://github.com/che-samples/java-spring-petclinic/tree/devfilev2
        - name: TS_SELENIUM_MULTIUSER
          value: 'true'
        - name: TS_SELENIUM_LOG_LEVEL
          value: TRACE
        - name: TS_SELENIUM_OCP_USERNAME
          value: 'happypath-dev'
        - name: TS_SELENIUM_OCP_PASSWORD
          value: "dev"
        - name: TS_SELENIUM_VALUE_OPENSHIFT_OAUTH
          value: 'true'
        - name: TS_SELENIUM_USERNAME
          value: "admin"
        - name: TS_SELENIUM_PASSWORD
          value: 'admin'
        - name: TS_OCP_LOGIN_PAGE_PROVIDER_TITLE
          value: "dev-htpasswd"
        - name: DELETE_WORKSPACE_ON_FAILED_TEST
          value: "true"
        - name: TS_SELENIUM_START_WORKSPACE_TIMEOUT
          value: '540000'
        - name: TS_IDE_LOAD_TIMEOUT
          value: '40000'
      volumeMounts:
        - name: test-run-results
          mountPath: /tmp/e2e/report/
        - mountPath: /dev/shm
          name: dshm
      resources:
        requests:
          memory: "3Gi"
          cpu: "2"
        limits:
          memory: "4Gi"
          cpu: "2"
    # Download results
    - name: download-reports
      image: docker.io/rohankanojia/che-e2e:next
      imagePullPolicy: IfNotPresent
      volumeMounts:
        - name: test-run-results
          mountPath: /tmp/e2e/report/
      command: ["sh"]
      args:
        [
          "-c",
          "while true; if [[ -f /tmp/done ]]; then exit 0; fi; do sleep 1; done",
        ]
  restartPolicy: Never
[INFO] --------------------------------------------------
W0806 14:47:48.121369   28672 warnings.go:70] would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (containers "happy-path-test", "download-reports" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers "happy-path-test", "download-reports" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "happy-path-test", "download-reports" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "happy-path-test", "download-reports" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
pod/happy-path-che created
[INFO] Happy-path test started successfully.
[INFO] Waiting until happy path pod finished
+ '[' -z http://eclipse-che.apps-crc.testing ']'
+ '[' -z test-all-devfiles ']'
+ export DISPLAY=:20
+ DISPLAY=:20
+ Xvfb :20 -screen 0 1920x1080x24
+ echo ''

#######################
+ echo '#######################'
+ echo ''

For remote debug connect to the VNC server 0.0.0.0:5920
+ echo 'For remote debug connect to the VNC server 0.0.0.0:5920'
+ echo ''

#######################
+ echo '#######################'
+ echo ''

+ x11vnc -display :20 -N -forever
+ export TS_SELENIUM_REMOTE_DRIVER_URL=http://localhost:4444/wd/hub
+ TS_SELENIUM_REMOTE_DRIVER_URL=http://localhost:4444/wd/hub
+ expectedStatus=200
+ currentTry=1
+ maximumAttempts=5
+ /usr/bin/supervisord --configuration /etc/supervisord.conf
++ curl -s -o /dev/null -w '%{http_code}' --fail http://localhost:4444/wd/hub/status
+ '[' 000 '!=' 200 ']'
+ ((  currentTry > maximumAttempts  ))
Wait selenium server availability ...
+ echo 'Wait selenium server availability ...'
+ curentTry=1
+ sleep 1
++ curl -s -o /dev/null -w '%{http_code}' --fail http://localhost:4444/wd/hub/status
Wait selenium server availability ...
+ '[' 000 '!=' 200 ']'
+ ((  currentTry > maximumAttempts  ))
+ echo 'Wait selenium server availability ...'
+ curentTry=2
+ sleep 1
++ curl -s -o /dev/null -w '%{http_code}' --fail http://localhost:4444/wd/hub/status
Wait selenium server availability ...
+ '[' 000 '!=' 200 ']'
+ ((  currentTry > maximumAttempts  ))
+ echo 'Wait selenium server availability ...'
+ curentTry=3
+ sleep 1
++ curl -s -o /dev/null -w '%{http_code}' --fail http://localhost:4444/wd/hub/status
+ '[' 200 '!=' 200 ']'
+ mount
+ grep e2e
/dev/vda4 on /tmp/e2e/report type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
+ mount
+ grep e2e/report
/dev/vda4 on /tmp/e2e/report type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota)
+ echo 'Executing e2e tests from an image.'
Executing e2e tests from an image.
+ cd /tmp/e2e
+ '[' ']'
+ SCREEN_RECORDING=true
+ '[' true == true ']'
+ echo 'Starting ffmpeg recording...'
Starting ffmpeg recording...
+ mkdir -p /tmp/ffmpeg_report
+ ffmpeg_pid=134
+ trap kill_ffmpeg 2 15
+ echo 'Running TEST_SUITE: test-all-devfiles with user: happypath-dev'
Running TEST_SUITE: test-all-devfiles with user: happypath-dev
+ npm run test-all-devfiles
+ nohup ffmpeg -y -video_size 1920x1080 -framerate 30 -f x11grab -i :20.0 -c:a libvpx /tmp/ffmpeg_report/output.webm

> @eclipse-che/che-e2e@7.107.0-next test-all-devfiles
> ./configs/sh-scripts/initDefaultValues.sh && ./configs/sh-scripts/initDevfileTests.sh

Initialized default values

TS_SELENIUM_VALUE_TLS_SUPPORT =       
TS_SELENIUM_VALUE_OPENSHIFT_OAUTH =   true
TS_OCP_LOGIN_PAGE_PROVIDER_TITLE =    dev-htpasswd
E2E_OCP_CLUSTER_VERSION =             4.x
TS_SELENIUM_LOG_LEVEL =               TRACE
TS_SELENIUM_OCP_USERNAME =            happypath-dev
TS_SELENIUM_W3C_CHROME_OPTION =       true
NODE_TLS_REJECT_UNAUTHORIZED =        0
TS_SELENIUM_EDITOR =                  che-code

Variable TS_SELENIUM_EDITOR is unset. It will be assign to default value.

TS_SELENIUM_EDITOR = che-code


Launching the "EmptyWorkspace" userstory

MOCHA_DIRECTORY = dashboard-samples

> @eclipse-che/che-e2e@7.107.0-next lint
> eslint --fix .


> @eclipse-che/che-e2e@7.107.0-next tsc
> rm -rf ./dist && ./configs/sh-scripts/generateIndex.sh && tsc -p .

Generating index.ts file...

################## Launch Information ##################

      TS_SELENIUM_BASE_URL: http://eclipse-che.apps-crc.testing
      TS_SELENIUM_HEADLESS: false
      TS_SELENIUM_OCP_USERNAME: happypath-dev
      TS_SELENIUM_EDITOR:   che-code

      TS_SELENIUM_HAPPY_PATH_WORKSPACE_NAME: EmptyWorkspace
      TS_SELENIUM_DELAY_BETWEEN_SCREENSHOTS: 1000
      TS_SELENIUM_REPORT_FOLDER: ./report
      TS_SELENIUM_EXECUTION_SCREENCAST: false
      DELETE_SCREENCAST_IF_TEST_PASS: true
      TS_SELENIUM_REMOTE_DRIVER_URL: http://localhost:4444/wd/hub
      DELETE_WORKSPACE_ON_FAILED_TEST: true
      TS_SELENIUM_LOG_LEVEL: TRACE
      TS_SELENIUM_LAUNCH_FULLSCREEN: true

      

      TS_COMMON_DASHBOARD_WAIT_TIMEOUT: 5000
      TS_SELENIUM_START_WORKSPACE_TIMEOUT: 540000
      TS_WAIT_LOADER_PRESENCE_TIMEOUT: 60000

      TS_SAMPLE_LIST: Node.js MongoDB,Node.js Express,Java Lombok,Quarkus REST API,Python,.NET,C/C++,Go,PHP,Ansible

      MOCHA_DIRECTORY: dashboard-samples
      USERSTORY: EmptyWorkspace

      to output timeout variables, set TS_SELENIUM_PRINT_TIMEOUT_VARIABLES to true
 ######################################################## 


            ‣ DriverHelper.getDriver
  Empty Workspace test 
          ▼ LoginTests.loginIntoChe
            ‣ BrowserTabsUtil.getCurrentUrl
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.navigateTo - http://eclipse-che.apps-crc.testing
            ‣ DriverHelper.navigateToUrl
            ‣ DriverHelper.getDriver
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 1000ms timeout
  [ERROR] DriverHelper.waitVisibility - failed with exception, out of attempts - TimeoutError: Waiting for element to be located By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
  Wait timed out after 1179ms
          ▼ LoginTests.loginIntoChe - try to login into application
          ▼ RegularUserOcpCheLoginPage.login
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@class="panel-login"]/div[contains(@class, "panel-content")]/form/button)
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@class="panel-login"]/div[contains(@class, "panel-content")]/form/button)
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.isIdentityProviderLinkVisible
            ‣ DriverHelper.waitVisibilityBoolean - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.isVisible - By(xpath, //a[text()="dev-htpasswd"])
          ▼ OcpLoginPage.waitAndClickOnLoginProviderTitle
            ‣ DriverHelper.waitAndClick - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.waitVisibility - By(xpath, //a[text()="dev-htpasswd"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.waitOpenShiftLoginWelcomePage
            ‣ DriverHelper.waitVisibility - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.enterUserNameOpenShift - "happypath-dev"
            ‣ DriverHelper.enterValue - By(css selector, *[id="inputUsername"]) text: happypath-dev
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.clear - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputUsername"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.type - By(css selector, *[id="inputUsername"]) text: happypath-dev
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputUsername"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputUsername"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.enterPasswordOpenShift
            ‣ DriverHelper.enterValue - By(css selector, *[id="inputPassword"]) text: ***
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.clear - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputPassword"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.type - By(css selector, *[id="inputPassword"]) text: ***
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="inputPassword"]) attribute: 'value'
            ‣ DriverHelper.waitVisibility - By(css selector, *[id="inputPassword"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.clickOnLoginButton
            ‣ DriverHelper.waitAndClick - By(css selector, button[type=submit])
            ‣ DriverHelper.waitVisibility - By(css selector, button[type=submit])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ OcpLoginPage.waitDisappearanceOpenShiftLoginWelcomePage
            ‣ DriverHelper.waitDisappearance - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.waitDisappearanceBoolean - By(xpath, //*[contains(text(), "Welcome")])
            ‣ DriverHelper.isVisible - By(xpath, //*[contains(text(), "Welcome")])
          ▼ OcpLoginPage.isAuthorizeOpenShiftIdentityProviderPageVisible
            ‣ DriverHelper.isVisible - By(xpath, //h1[text()="Authorize Access"])
            ‣ BrowserTabsUtil.maximize
          ▼ BrowserTabsUtil.maximize - TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.
            ‣ DriverHelper.getDriver
          ▼ Dashboard.waitStartingPageLoaderDisappearance
            ‣ DriverHelper.waitDisappearance - By(css selector, .main-page-loader)
            ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .main-page-loader)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .main-page-loader)
            ‣ DriverHelper.wait - (1000 milliseconds)
          ▼ Dashboard.clickWorkspacesButton
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ WorkspaceHandlingTests.createAndOpenWorkspace - fetching user kubernetes namespace, storing auth token by getting workspaces API URL.
          ▼ ApiUrlResolver.obtainUserNamespace
            ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API
            ‣ DriverHelper.getDriver
(node:231) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(Use `node --trace-warnings ...` to show where the warning was created)
          ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: happypath-dev-che
          ▼ Dashboard.clickCreateWorkspaceButton
            ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ CreateWorkspace.waitPage
          ▼ CreateWorkspace.waitTitleContains - text: "Create Workspace"
            ‣ DriverHelper.waitVisibility - By(xpath, //h1[contains(text(), 'Create Workspace')])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ BrowserTabsUtil.getCurrentWindowHandle
            ‣ DriverHelper.getDriver
          ▼ CreateWorkspace.clickOnSampleNoEditorSelection - sampleName: "Empty Workspace"
            ‣ CreateWorkspace.getSampleLocator - sampleName: Empty Workspace, used default editor
            ‣ DriverHelper.waitAndClick - By(xpath, //article[contains(@class, 'sample-card')]//div[text()='Empty Workspace'])
            ‣ DriverHelper.waitVisibility - By(xpath, //article[contains(@class, 'sample-card')]//div[text()='Empty Workspace'])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ BrowserTabsUtil.waitAndSwitchToAnotherWindow
            ‣ DriverHelper.waitUntilTrue
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
    ✔ Create and open new workspace, stack:Empty Workspace
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying.
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained starting workspace getText():Starting workspace empty-3gom
            ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - trimmed workspace name from getText():empty-3gom
      • WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained workspace name from workspace loader page: empty-3gom
    ✔ Obtain workspace name from workspace loader page
          ▼ registerRunningWorkspace - with workspaceName:empty-3gom
    ✔ Register running workspace
          ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - waiting for editor.
            ‣ DriverHelper.waitVisibility - By(css selector, .monaco-workbench)
            ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #5, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #6, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #7, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #8, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #9, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #10, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #11, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #12, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #13, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - polling timed out attempt #14, retrying with 1000ms timeout
            ‣ DriverHelper.waitVisibility - element is located and is visible.
          ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - editor was opened in 17994 seconds.
          ▼ Editor sections:
          ▼ Explorer (Ctrl+Shift+E)
          ▼ Search (Ctrl+Shift+F)
          ▼ Source Control (Ctrl+Shift+G)
          ▼ Run and Debug (Ctrl+Shift+D)
          ▼ Extensions (Ctrl+Shift+X)
    ✔ Wait workspace readiness
          ▼ Dashboard.openDashboard
            ‣ DriverHelper.navigateToUrl
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
          ▼ Dashboard.openDashboard - No alert detected
          ▼ Dashboard.waitPage
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"])
            ‣ DriverHelper.waitVisibility - element is located and is visible.
            ‣ BrowserTabsUtil.closeAllTabsExceptCurrent
          ▼ BrowserTabsUtil.getAllWindowHandles
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.getCurrentWindowHandle
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
          ▼ BrowserTabsUtil.switchToWindow
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.stopAndDeleteWorkspaceByName
          ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-3gom
          ▼ ApiUrlResolver.obtainUserNamespace
            ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API
            ‣ DriverHelper.getDriver
          ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: happypath-dev-che
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.waitWorkspaceStatus
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-3gom stopped successfully
          ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-3gom
          ▼ ApiUrlResolver.obtainUserNamespace - happypath-dev-che
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.getDriver
          ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-3gom deleted successfully
          ▼     at /tmp/e2e/specs/MochaHooks.ts:39:12 - delete workspace name


  4 passing (52s)

+ EXIT_CODE=0
+ '[' true == true ']'
+ kill_ffmpeg
Killing ffmpeg with PID=134
+ echo 'Killing ffmpeg with PID=134'
+ kill -2 134
+ wait 134
+ mkdir -p /tmp/e2e/report/
+ cp /tmp/ffmpeg_report/ffmpeg_err.txt /tmp/ffmpeg_report/ffmpeg_std.txt /tmp/ffmpeg_report/output.webm /tmp/e2e/report/
+ exit 0
[INFO] Downloading test report.
WARNING: cannot use rsync: rsync not available in container
./ffmpeg_err.txt
./ffmpeg_std.txt
./output.webm
[INFO] Happy-path test succeed.
[INFO] Happy-path execution took 126.171823671 seconds.
[INFO] Bumping events in namespace devworkspace-controller
[INFO] Downloading logs pod/che-ccf96d74b-xcqgj/che in eclipse-che
[INFO] Downloading logs pod/che-dashboard-6d778d79b-zbdbm/che-dashboard in eclipse-che
[INFO] Downloading logs pod/che-gateway-6cc44bb574-rjqvc/gateway in eclipse-che
[INFO] Downloading logs pod/che-gateway-6cc44bb574-rjqvc/configbump in eclipse-che
[INFO] Downloading logs pod/che-gateway-6cc44bb574-rjqvc/oauth-proxy in eclipse-che
[INFO] Downloading logs pod/che-gateway-6cc44bb574-rjqvc/kube-rbac-proxy in eclipse-che
[INFO] Downloading logs pod/happy-path-che/happy-path-test in eclipse-che
[INFO] Downloading logs pod/happy-path-che/download-reports in eclipse-che
[INFO] Bumping events in namespace eclipse-che
[INFO] Bumping events in namespace che-user-che
Eclipse Che logs will be available in '/tmp/devworkspace-happy-path-artifacts/chectl-server-logs'
› Current Kubernetes context: 'eclipse-che/api-crc-testing:6443/kubeadmin'
  ✔ Verify Kubernetes API...[1.32]
  ✔ Read Eclipse Che installation logs...[OK]
Command server:logs has completed successfully in 00:00.
[INFO] Logs are collected and can be found in /tmp/devworkspace-happy-path-artifacts

@dmytro-ndp
Copy link
Copy Markdown
Contributor

Thanks for sharing, @rohanKanojia

Well done!

@dmytro-ndp dmytro-ndp merged commit 94e1091 into eclipse-che:main Aug 6, 2025
3 checks passed
@rohanKanojia rohanKanojia deleted the pr/issue23514 branch August 6, 2025 17:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Error with devworkspace-operator happy path test error

2 participants