This is an automated email from the ASF dual-hosted git repository.

fantonangeli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new cc90fd00d8c kie-tools#2695: [SonataFlow Management Console Image] Use 
mod_proxy to proxy request to the data-index (#2750)
cc90fd00d8c is described below

commit cc90fd00d8cff7459c65a08707fe43e65b7eb303
Author: Fabrizio Antonangeli <[email protected]>
AuthorDate: Wed Feb 12 09:42:15 2025 +0100

    kie-tools#2695: [SonataFlow Management Console Image] Use mod_proxy to 
proxy request to the data-index (#2750)
---
 .rat-excludes                                      |   2 +
 packages/sonataflow-dev-app/README.md              |  12 +++
 packages/sonataflow-dev-app/src/server.js          |   4 +-
 .../sonataflow-management-console-image/.gitignore |   2 +
 .../sonataflow-management-console-image/README.md  |  19 ++++
 .../package.json                                   |  12 ++-
 ...or-kie-sonataflow-management-console-image.yaml |   4 +-
 .../management-console/configure-httpd.sh          |  17 +++-
 .../sonataflow/management-console/module.yaml      |   2 +-
 .../features/sonataflow-management-console.feature |  35 +++++++
 .../shell/sonataflow-devmode/.vscode/launch.json   |  22 +++++
 .../shell/sonataflow-devmode/.vscode/settings.json |  13 +++
 .../sonataflow-devmode/resources/greet.sw.json     |  67 +++++++++++++
 .../shell/sonataflow-devmode/src/RunTests.java     | 105 +++++++++++++++++++++
 .../build/defaultEnvJson.ts                        |   1 -
 .../env/index.js                                   |   5 -
 .../src/{env/EnvJson.ts => AppConstants.ts}        |  14 +--
 .../src/env/EnvJson.ts                             |   1 -
 .../src/index.tsx                                  |   3 +
 .../webpack.config.ts                              |   7 +-
 pnpm-lock.yaml                                     |   6 ++
 21 files changed, 324 insertions(+), 29 deletions(-)

diff --git a/.rat-excludes b/.rat-excludes
index f4f53447a28..60249fd515e 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -1015,6 +1015,8 @@ common.py
 # 
packages/sonataflow-management-console-webapp/resources/monitoring-webapp/MonitoringReport.dash.yml
 MonitoringReport.dash.yml
 # 
packages/sonataflow-management-console-webapp/resources/monitoring-webapp/WorkflowDetails.dash.yml
+sonataflow-management-console.feature
+# 
packages/sonataflow-management-console-image/test-resources/tests/features/sonataflow-management-console.feature
 WorkflowDetails.dash.yml
 # packages/sonataflow-operator/PROJECT
 PROJECT
diff --git a/packages/sonataflow-dev-app/README.md 
b/packages/sonataflow-dev-app/README.md
index 1a60602207f..f790b0594fe 100644
--- a/packages/sonataflow-dev-app/README.md
+++ b/packages/sonataflow-dev-app/README.md
@@ -29,6 +29,18 @@ To run the development app, use the following command:
 
 `pnpm start`
 
+# Configuration
+
+The `SonataFlow Dev App` can be configured via environment variables:
+
+- _SONATAFLOW_DEV_APP_DELAY_: Defines the server's response delay in 
milliseconds
+
+For example:
+
+```bash
+$ export SONATAFLOW_DEV_APP_DELAY=500
+```
+
 ### GraphQL Modifications
 
 This section covers modifications to the GraphQL database.
diff --git a/packages/sonataflow-dev-app/src/server.js 
b/packages/sonataflow-dev-app/src/server.js
index f885872b496..cad9439830e 100644
--- a/packages/sonataflow-dev-app/src/server.js
+++ b/packages/sonataflow-dev-app/src/server.js
@@ -36,7 +36,7 @@ const data = require("./MockData/graphql");
 const controller = require("./MockData/controllers");
 const typeDefs = require("./MockData/types");
 
-const DEFAULT_TIMEOUT = 2000;
+const DEFAULT_DELAY = Number(process.env.SONATAFLOW_DEV_APP_DELAY || 2000);
 
 const swaggerOptions = {
   swaggerOptions: {
@@ -96,7 +96,7 @@ app.post("/forms/:formName", controller.saveFormContent);
 
 app.post(/^\/(service|hello|systout|jsongreet|order|yamlgreet)$/, 
controller.startProcessInstance);
 
-function timeout(ms = DEFAULT_TIMEOUT) {
+function timeout(ms = DEFAULT_DELAY) {
   return new Promise((resolve) => setTimeout(resolve, ms));
 }
 
diff --git a/packages/sonataflow-management-console-image/.gitignore 
b/packages/sonataflow-management-console-image/.gitignore
new file mode 100644
index 00000000000..398b262e2cd
--- /dev/null
+++ b/packages/sonataflow-management-console-image/.gitignore
@@ -0,0 +1,2 @@
+!packages/sonataflow-management-console-image/test-resources/
+
diff --git a/packages/sonataflow-management-console-image/README.md 
b/packages/sonataflow-management-console-image/README.md
index da8611713a2..6589d7a8f60 100644
--- a/packages/sonataflow-management-console-image/README.md
+++ b/packages/sonataflow-management-console-image/README.md
@@ -109,6 +109,25 @@ The port used internally on the container can be changed:
 
 When building, set the `SONATAFLOW_MANAGEMENT_CONSOLE__port` environment 
variable to any port you want, and the Containerfile will be built using that 
port.
 
+## Run the Docker Image Locally
+
+1. This command will start the container and configure it to access your local 
data-index service from the container.
+   Replace `<HOST_IP_ADDRESS>` with the IP address of your host machine.
+
+   ```bash
+   docker run --rm -it -p 8080:8080 \
+     -e SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_ENV_MODE='DEV' \
+     -e 
SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT='http://<HOST_IP_ADDRESS>:4000/graphql'
 \
+     docker.io/apache/incubator-kie-sonataflow-management-console:main
+   ```
+
+2. In a separate terminal, start Sonataflow Dev App for the Data Index service.
+
+   ```bash
+    cd ../sonataflow-dev-app
+    pnpm start
+   ```
+
 ---
 
 Apache KIE (incubating) is an effort undergoing incubation at The Apache 
Software
diff --git a/packages/sonataflow-management-console-image/package.json 
b/packages/sonataflow-management-console-image/package.json
index c2617e19429..ebf952d2df5 100644
--- a/packages/sonataflow-management-console-image/package.json
+++ b/packages/sonataflow-management-console-image/package.json
@@ -14,12 +14,14 @@
   },
   "scripts": {
     "build:dev": "pnpm cleanup && pnpm env-json:schema:generate && pnpm 
copy:assets && run-script-if --bool \"$(build-env containerImages.build)\" 
--then \"pnpm image:cekit:build\"",
-    "build:prod": "pnpm cleanup && pnpm env-json:schema:generate && pnpm 
copy:assets && run-script-if --bool \"$(build-env containerImages.build)\" 
--then \"pnpm image:cekit:build\"",
+    "build:prod": "pnpm cleanup && pnpm env-json:schema:generate && pnpm 
copy:assets && run-script-if --bool \"$(build-env containerImages.build)\" 
--then \"pnpm image:cekit:build && pnpm image:test\"",
     "cleanup": "rimraf dist-dev && mkdir dist-dev",
     "copy:assets": "pnpm copy:webapp-assets && pnpm copy:image-env-to-json",
     "copy:image-env-to-json": "run-script-os",
     "copy:image-env-to-json:linux:darwin": "cp 
./node_modules/@kie-tools/image-env-to-json/dist/linux/image-env-to-json-standalone
 ./dist-dev/",
     "copy:image-env-to-json:win32": "pnpm powershell \"Copy-Item 
./node_modules/@kie-tools/image-env-to-json/dist/linux/image-env-to-json-standalone
 ./dist-dev/\"",
+    "copy:test-assets": "run-script-os",
+    "copy:test-assets:linux:darwin": "cp -R test-resources/* dist-dev && 
DOCKER_HOST=\"$(hostname -I | awk '{print $1}')\" envsubst < 
test-resources/tests/features/sonataflow-management-console.feature > 
dist-dev/tests/features/sonataflow-management-console.feature",
     "copy:webapp-assets": "run-script-os",
     "copy:webapp-assets:linux:darwin": "cp -R 
./node_modules/@kie-tools/sonataflow-management-console-webapp/dist/ 
./dist-dev/sonataflow-management-console-webapp",
     "copy:webapp-assets:win32": "pnpm powershell \"Copy-Item -R 
./node_modules/@kie-tools/sonataflow-management-console-webapp/dist/ 
./dist-dev/sonataflow-management-console-webapp\"",
@@ -28,18 +30,24 @@
     "image:cekit:build:linux": "pnpm image:cekit:copy && pnpm 
image:cekit:setup:env make -C ./dist-dev build",
     "image:cekit:build:win32:darwin": "echo \"Build skipped on macOS and 
Windows\"",
     "image:cekit:copy": "cp -R 
./node_modules/@kie-tools/sonataflow-image-common/resources/* ./dist-dev/ && cp 
-R resources/* ./dist-dev/",
-    "image:cekit:setup:env": ". 
./node_modules/@kie-tools/python-venv/venv/bin/activate && cross-env 
KOGITO_IMAGE_REGISTRY=$(build-env sonataflowManagementConsoleImageEnv.registry) 
KOGITO_IMAGE_REGISTRY_ACCOUNT=$(build-env 
sonataflowManagementConsoleImageEnv.account) KOGITO_IMAGE_NAME=$(build-env 
sonataflowManagementConsoleImageEnv.name) KOGITO_IMAGE_TAG=$(build-env 
sonataflowManagementConsoleImageEnv.buildTag) 
QUARKUS_PLATFORM_GROUPID=$(build-env kogitoImagesCekitModules.quarkusGroupId) 
[...]
+    "image:cekit:setup:env": ". 
./node_modules/@kie-tools/python-venv/venv/bin/activate && cross-env 
KOGITO_IMAGE_REGISTRY=$(build-env sonataflowManagementConsoleImageEnv.registry) 
KOGITO_IMAGE_REGISTRY_ACCOUNT=$(build-env 
sonataflowManagementConsoleImageEnv.account) KOGITO_IMAGE_NAME=$(build-env 
sonataflowManagementConsoleImageEnv.name) KOGITO_IMAGE_TAG=$(build-env 
sonataflowManagementConsoleImageEnv.buildTag) 
QUARKUS_PLATFORM_GROUPID=$(build-env kogitoImagesCekitModules.quarkusGroupId) 
[...]
+    "image:test": "run-script-if --ignore-errors \"$(build-env 
tests.ignoreFailures)\" --bool \"$(build-env endToEndTests.run)\" --then 
\"mkdir -p dist-dev/target/test/results\" \"run-script-os\" --finally \"cp -R 
dist-dev/target/test/results dist-tests-e2e/\"",
+    "image:test:darwin:win32": "echo \"Tests skipped on macOS and Windows\"",
+    "image:test:linux": "pnpm copy:test-assets && pnpm start-server-and-test 
start:sonataflow-dev-app http-get://0.0.0.0:4000/graphql 'pnpm 
image:cekit:setup:env make -C ./dist-dev test-image'",
+    "start:sonataflow-dev-app": "SONATAFLOW_DEV_APP_DELAY=0 npm --prefix 
./node_modules/@kie-tools/sonataflow-dev-app run start"
   },
   "devDependencies": {
     "@kie-tools/image-env-to-json": "workspace:*",
     "@kie-tools/python-venv": "workspace:*",
     "@kie-tools/root-env": "workspace:*",
+    "@kie-tools/sonataflow-dev-app": "workspace:*",
     "@kie-tools/sonataflow-image-common": "workspace:*",
     "@kie-tools/sonataflow-management-console-image-env": "workspace:*",
     "@kie-tools/sonataflow-management-console-webapp": "workspace:*",
     "cross-env": "^7.0.3",
     "rimraf": "^3.0.2",
     "run-script-os": "^1.1.6",
+    "start-server-and-test": "^2.0.3",
     "ts-json-schema-generator": "^1.1.2"
   }
 }
diff --git 
a/packages/sonataflow-management-console-image/resources/incubator-kie-sonataflow-management-console-image.yaml
 
b/packages/sonataflow-management-console-image/resources/incubator-kie-sonataflow-management-console-image.yaml
index ee71ccc9acf..94294b5be2e 100644
--- 
a/packages/sonataflow-management-console-image/resources/incubator-kie-sonataflow-management-console-image.yaml
+++ 
b/packages/sonataflow-management-console-image/resources/incubator-kie-sonataflow-management-console-image.yaml
@@ -16,9 +16,9 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-- name: "docker.io/apache/incubator-kie-sonataflow-devmode"
+- name: "docker.io/apache/incubator-kie-sonataflow-management-console"
   from: "registry.access.redhat.com/ubi9/httpd-24:9.5"
-  version: "0.0.0"
+  version: "main"
   description: "SonataFlow Management Console Image"
 
   labels:
diff --git 
a/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/configure-httpd.sh
 
b/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/configure-httpd.sh
index e3cfcfef92c..41948f03401 100644
--- 
a/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/configure-httpd.sh
+++ 
b/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/configure-httpd.sh
@@ -31,8 +31,23 @@ sed -i "s/Listen 80/Listen 
${SONATAFLOW_MANAGEMENT_CONSOLE_PORT}/g" "${HTTPD_MAI
 sed -i "s/#ServerName www.example.com:80/ServerName 
127.0.0.1:${SONATAFLOW_MANAGEMENT_CONSOLE_PORT}/g" 
"${HTTPD_MAIN_CONF_PATH}/httpd.conf"
 sed -i '$ a ServerTokens Prod' "${HTTPD_MAIN_CONF_PATH}/httpd.conf"
 sed -i '$ a ServerSignature Off' "${HTTPD_MAIN_CONF_PATH}/httpd.conf"
-sed -i -e '/<Directory "\/var\/www\/html">/a    RewriteEngine on\n    
RewriteCond %{REQUEST_FILENAME} -f [OR]\n    RewriteCond %{REQUEST_FILENAME} 
-d\n    RewriteRule ^ - [L]\n    RewriteRule ^ index.html [L]' 
"${HTTPD_MAIN_CONF_PATH}/httpd.conf"
+sed -i '$ a SSLProxyEngine on' "${HTTPD_MAIN_CONF_PATH}/httpd.conf"
 
+# Add RewriteRules
+sed -i -e '/<Directory "\/var\/www\/html">/a \
+    RewriteEngine on \
+    # Data Index rewrite rules \
+    RewriteCond %{REQUEST_URI} ^\/graphql([\/\?$]|$) \
+    RewriteCond %{ENV:SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT} ^$ \
+    RewriteRule ^.*$ - [R=503,L] \
+    RewriteCond %{REQUEST_URI} ^\/graphql([\/\?$]|$) \
+    RewriteCond %{ENV:SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT} 
^(.*)$ \
+    RewriteRule ^.*$ %1 [P,L]\n \
+    RewriteCond %{REQUEST_FILENAME} -f [OR] \
+    RewriteCond %{REQUEST_FILENAME} -d \
+    RewriteRule ^ - [L] \
+    RewriteRule ^ index.html [L]\n' \
+    "${HTTPD_MAIN_CONF_PATH}/httpd.conf"
 
 # Set the required paths
 mkdir -p "${MGMT_CONSOLE_HOME}/launch"
diff --git 
a/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/module.yaml
 
b/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/module.yaml
index 34b627dfc6a..ece9991fdd8 100644
--- 
a/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/module.yaml
+++ 
b/packages/sonataflow-management-console-image/resources/modules/sonataflow/management-console/module.yaml
@@ -18,7 +18,7 @@
 #
 schema_version: 1
 name: org.kie.sonataflow.management.console
-version: "0.0.0"
+version: "main"
 description: "SonataFlow Management Console Launch Scripts and Configurations"
 
 execute:
diff --git 
a/packages/sonataflow-management-console-image/test-resources/tests/features/sonataflow-management-console.feature
 
b/packages/sonataflow-management-console-image/test-resources/tests/features/sonataflow-management-console.feature
new file mode 100644
index 00000000000..bf01ccbe90b
--- /dev/null
+++ 
b/packages/sonataflow-management-console-image/test-resources/tests/features/sonataflow-management-console.feature
@@ -0,0 +1,35 @@
[email protected]/apache/incubator-kie-sonataflow-management-console
+Feature: Serverless Workflow Management Console images
+
+  Scenario: verify that the home page is served
+    When container is ready
+    Then container log should contain httpd -D FOREGROUND
+    Then check that page is served
+      | property             | value             |
+      | port                 | 8080              |
+      | path                 | /                 |
+      | request_method       | GET               |
+      | wait                 | 480               |
+      | expected_status_code | 200               |
+
+  Scenario: Verify that the rewrite rule for /graphql is in httpd.conf
+    When container is ready
+    Then container log should contain httpd -D FOREGROUND
+    Then file /etc/httpd/conf/httpd.conf should contain /graphql
+
+
+  Scenario: verify that the data-index is available from the container
+    When container is started with env
+      | variable                    | value                                    
             |
+      | SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT | 
http://${DOCKER_HOST}:4000/graphql |
+    Then container log should contain httpd -D FOREGROUND
+    Then check that page is served
+      | property             | value                                    |
+      | port                 | 8080                                     |
+      | path                 | /graphql                                 |
+      | request_method       | POST                                     |
+      | request_body         | { "query": "{ProcessInstances{ id } }" } |
+      | content_type         | application/json                         |
+      | wait                 | 480                                        |
+      | expected_status_code | 200                                      |
+      | expected_phrase      | "data":{"ProcessInstances                |
diff --git 
a/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/launch.json
 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/launch.json
new file mode 100644
index 00000000000..82cbbc6179c
--- /dev/null
+++ 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/launch.json
@@ -0,0 +1,22 @@
+{
+  // Use IntelliSense to learn about possible attributes.
+  // Hover to view descriptions of existing attributes.
+  // For more information, visit: 
https://go.microsoft.com/fwlink/?linkid=830387
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "type": "java",
+      "name": "RunTests-port-4004",
+      "request": "attach",
+      "hostName": "localhost",
+      "port": 4004
+    },
+    {
+      "type": "java",
+      "name": "Debug (Launch) - RunTests",
+      "request": "launch",
+      "mainClass": "RunTests",
+      "projectName": "RunTests"
+    }
+  ]
+}
diff --git 
a/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/settings.json
 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/settings.json
new file mode 100644
index 00000000000..b57ea44670f
--- /dev/null
+++ 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/.vscode/settings.json
@@ -0,0 +1,13 @@
+{
+  "java.import.gradle.enabled": false,
+  "java.import.maven.enabled": false,
+  "java.eclipse.downloadSources": true,
+  "files.exclude": {
+    "bin/": true,
+    ".eclipse/": true,
+    ".project": true,
+    ".classpath": true,
+    "build.gradle": true
+  },
+  "java.completion.importOrder": ["", "javax", "java", "#"]
+}
diff --git 
a/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/resources/greet.sw.json
 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/resources/greet.sw.json
new file mode 100644
index 00000000000..a619b3b8bc7
--- /dev/null
+++ 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/resources/greet.sw.json
@@ -0,0 +1,67 @@
+{
+  "id": "jsongreet",
+  "version": "1.0",
+  "name": "Greeting workflow",
+  "description": "JSON based greeting workflow",
+  "start": "ChooseOnLanguage",
+  "functions": [
+    {
+      "name": "greetFunction",
+      "type": "custom",
+      "operation": "sysout"
+    }
+  ],
+  "states": [
+    {
+      "name": "ChooseOnLanguage",
+      "type": "switch",
+      "dataConditions": [
+        {
+          "condition": "${ .language == \"English\" }",
+          "transition": "GreetInEnglish"
+        },
+        {
+          "condition": "${ .language == \"Spanish\" }",
+          "transition": "GreetInSpanish"
+        }
+      ],
+      "defaultCondition": {
+        "transition": "GreetInEnglish"
+      }
+    },
+    {
+      "name": "GreetInEnglish",
+      "type": "inject",
+      "data": {
+        "greeting": "Hello from JSON Workflow, "
+      },
+      "transition": "GreetPerson"
+    },
+    {
+      "name": "GreetInSpanish",
+      "type": "inject",
+      "data": {
+        "greeting": "Saludos desde JSON Workflow, "
+      },
+      "transition": "GreetPerson"
+    },
+    {
+      "name": "GreetPerson",
+      "type": "operation",
+      "actions": [
+        {
+          "name": "greetAction",
+          "functionRef": {
+            "refName": "greetFunction",
+            "arguments": {
+              "message": ".greeting+.name"
+            }
+          }
+        }
+      ],
+      "end": {
+        "terminate": true
+      }
+    }
+  ]
+}
diff --git 
a/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/src/RunTests.java
 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/src/RunTests.java
new file mode 100644
index 00000000000..473be499be2
--- /dev/null
+++ 
b/packages/sonataflow-management-console-image/test-resources/tests/shell/sonataflow-devmode/src/RunTests.java
@@ -0,0 +1,105 @@
+///usr/bin/env jbang "$0" "$@" ; exit $?
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+//DEPS org.slf4j:slf4j-simple:2.0.9
+
+// Junit console to start the test engine:
+//DEPS org.junit.platform:junit-platform-console:1.10.1
+
+// engine to run the tests (tests are written with Junit5):
+//DEPS org.junit.jupiter:junit-jupiter-engine:5.10.1
+
+// testcontainers
+//DEPS org.testcontainers:testcontainers:1.19.3
+//DEPS org.testcontainers:junit-jupiter:1.19.3
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.net.http.HttpResponse.BodyHandlers;
+import java.nio.file.Paths;
+import java.time.Duration;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.console.ConsoleLauncher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+@Testcontainers
+public class RunTests {
+
+    private static Logger LOGGER = LoggerFactory.getLogger(RunTests.class);
+
+    private Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(LOGGER);
+
+    @Container
+    private GenericContainer devModeImage = new 
GenericContainer(getTestImage())
+            .withEnv("MAVEN_ARGS_APPEND", "-Ddebug=false 
-Dquarkus.devservices.enabled=false")
+            .withFileSystemBind(getScriptDirPath() + "/resources",
+                    
"/home/kogito/serverless-workflow-project/src/main/resources", 
BindMode.READ_ONLY)
+            .withExposedPorts(8080)
+            .waitingFor(Wait.forHttp("/jsongreet"))
+            .withStartupTimeout(Duration.ofMinutes(2))
+            .withLogConsumer(logConsumer);
+
+    @Test
+    public void testBuiltContainerAnswerCorrectly() throws URISyntaxException, 
IOException, InterruptedException {
+        devModeImage.start();
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(new URI(
+                        "http://"; + devModeImage.getHost() + ":" + 
devModeImage.getFirstMappedPort() + "/jsongreet"))
+                .header("Content-Type", "application/json")
+                .header("Accept", "application/json")
+                .timeout(Duration.ofSeconds(10))
+                .POST(HttpRequest.BodyPublishers
+                        .ofString("{\"workflowdata\" : {\"name\": \"John\", 
\"language\": \"English\"}}"))
+                .build();
+        HttpResponse<String> response = 
HttpClient.newHttpClient().send(request, BodyHandlers.ofString());
+        assertEquals(201, response.statusCode());
+    }
+
+    public static void main(String... args) throws Exception {
+        ConsoleLauncher.main("--select-class=" + RunTests.class.getName(),
+                "--reports-dir=" + Paths.get(getOutputDir()).toString());
+    }
+
+    static String getTestImage() {
+        return System.getenv("TEST_IMAGE");
+    }
+
+    static String getOutputDir() {
+        return System.getenv("OUTPUT_DIR");
+    }
+
+    static String getScriptDirPath() {
+        return System.getenv("TESTS_SCRIPT_DIR_PATH");
+    }
+}
\ No newline at end of file
diff --git 
a/packages/sonataflow-management-console-webapp/build/defaultEnvJson.ts 
b/packages/sonataflow-management-console-webapp/build/defaultEnvJson.ts
index f3d602ea355..a7bf9981245 100644
--- a/packages/sonataflow-management-console-webapp/build/defaultEnvJson.ts
+++ b/packages/sonataflow-management-console-webapp/build/defaultEnvJson.ts
@@ -33,7 +33,6 @@ export const defaultEnvJson: EnvJson = {
   KOGITO_CONSOLES_KEYCLOAK_REALM: "kogito",
   KOGITO_CONSOLES_KEYCLOAK_UPDATE_TOKEN_VALIDITY: 30,
   KOGITO_CONSOLES_KEYCLOAK_URL: "http://localhost:8280";,
-  SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT: 
buildEnv.sonataflowManagementConsoleWebapp.sonataflowDataIndexUrl,
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_NAME: "SonataFlow Management 
Console",
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_VERSION: version,
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_ENV_MODE: 
buildEnv.sonataflowManagementConsoleWebapp.sonataflowEnvMode,
diff --git a/packages/sonataflow-management-console-webapp/env/index.js 
b/packages/sonataflow-management-console-webapp/env/index.js
index 0c418cfb794..89f9adce5dd 100644
--- a/packages/sonataflow-management-console-webapp/env/index.js
+++ b/packages/sonataflow-management-console-webapp/env/index.js
@@ -21,10 +21,6 @@ const { varsWithName, composeEnv, getOrDefault } = 
require("@kie-tools-scripts/b
 
 module.exports = composeEnv([require("@kie-tools/root-env/env")], {
   vars: varsWithName({
-    SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__sonataflowDataIndexUrl: {
-      default: "http://localhost:4000/graphql";,
-      description: "URL for the Data Index service",
-    },
     SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__sonataflowEnvMode: {
       default: "DEV",
       description: "DEV or PROD. PROD enables Keycloak integration",
@@ -41,7 +37,6 @@ module.exports = 
composeEnv([require("@kie-tools/root-env/env")], {
   get env() {
     return {
       sonataflowManagementConsoleWebapp: {
-        sonataflowDataIndexUrl: 
getOrDefault(this.vars.SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__sonataflowDataIndexUrl),
         sonataflowEnvMode: 
getOrDefault(this.vars.SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__sonataflowEnvMode),
         host: 
getOrDefault(this.vars.SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__host),
         port: 
getOrDefault(this.vars.SONATAFLOW_MANAGEMENT_CONSOLE_WEBAPP__port),
diff --git a/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts 
b/packages/sonataflow-management-console-webapp/src/AppConstants.ts
similarity index 61%
copy from packages/sonataflow-management-console-webapp/src/env/EnvJson.ts
copy to packages/sonataflow-management-console-webapp/src/AppConstants.ts
index ae330fffb65..9c6e155a435 100644
--- a/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts
+++ b/packages/sonataflow-management-console-webapp/src/AppConstants.ts
@@ -1,4 +1,4 @@
-/*
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -7,7 +7,7 @@
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
  *
- *  http://www.apache.org/licenses/LICENSE-2.0
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
@@ -16,12 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
-import { KogitoConsolesKeycloakEnv } from 
"@kie-tools/runtime-tools-components/dist/utils/KeycloakClient";
-
-export interface EnvJson extends KogitoConsolesKeycloakEnv {
-  SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_ENV_MODE: "DEV" | "PROD";
-  SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_NAME: string;
-  SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_VERSION: string;
-  SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT: string;
-}
+export const DATA_INDEX_ENDPOINT = "/graphql";
diff --git a/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts 
b/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts
index ae330fffb65..fda26e4dd8b 100644
--- a/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts
+++ b/packages/sonataflow-management-console-webapp/src/env/EnvJson.ts
@@ -23,5 +23,4 @@ export interface EnvJson extends KogitoConsolesKeycloakEnv {
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_ENV_MODE: "DEV" | "PROD";
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_NAME: string;
   SONATAFLOW_MANAGEMENT_CONSOLE_KOGITO_APP_VERSION: string;
-  SONATAFLOW_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT: string;
 }
diff --git a/packages/sonataflow-management-console-webapp/src/index.tsx 
b/packages/sonataflow-management-console-webapp/src/index.tsx
index 52a3859d1d6..bb372a0ad39 100644
--- a/packages/sonataflow-management-console-webapp/src/index.tsx
+++ b/packages/sonataflow-management-console-webapp/src/index.tsx
@@ -40,6 +40,9 @@ import {
 import { initEnv } from "./env/Env";
 import { ENV_PREFIX } from "./env/EnvConstants";
 import { EnvJson } from "./env/EnvJson";
+import { DATA_INDEX_ENDPOINT } from "./AppConstants";
+
+window["DATA_INDEX_ENDPOINT"] = DATA_INDEX_ENDPOINT;
 
 const onLoadFailure = (): void => {
   ReactDOM.render(<KeycloakUnavailablePage />, 
document.getElementById("root"));
diff --git a/packages/sonataflow-management-console-webapp/webpack.config.ts 
b/packages/sonataflow-management-console-webapp/webpack.config.ts
index 92fa753a8f8..ea2da2d02a6 100644
--- a/packages/sonataflow-management-console-webapp/webpack.config.ts
+++ b/packages/sonataflow-management-console-webapp/webpack.config.ts
@@ -195,13 +195,14 @@ export default async (webpackEnv: any, webpackArgv: any) 
=> {
           },
           progress: true,
         },
-        proxy: {
-          "/svg": {
+        proxy: [
+          {
+            context: (path, req) => req.method === "POST" || 
path.startsWith("/graphql") || path === "/q/openapi.json",
             target: "http://localhost:4000";,
             secure: false,
             changeOrigin: true,
           },
-        },
+        ],
       },
     },
   ];
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 960a26687b5..49607d66966 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12203,6 +12203,9 @@ importers:
       '@kie-tools/root-env':
         specifier: workspace:*
         version: link:../root-env
+      '@kie-tools/sonataflow-dev-app':
+        specifier: workspace:*
+        version: link:../sonataflow-dev-app
       '@kie-tools/sonataflow-image-common':
         specifier: workspace:*
         version: link:../sonataflow-image-common
@@ -12221,6 +12224,9 @@ importers:
       run-script-os:
         specifier: ^1.1.6
         version: 1.1.6
+      start-server-and-test:
+        specifier: ^2.0.3
+        version: 2.0.3
       ts-json-schema-generator:
         specifier: ^1.1.2
         version: 1.1.2


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to