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]