Skip to content

Commit f4e2f49

Browse files
chore(ci): Adds platform integration test (#282)
* chore(ci): Adds platform integration test We have migrated to a new set of backend services and are deprecating the existing python based services. This replaces the recommended sample code with platform compatible code * disable nano roundtrip test
1 parent 9d344cb commit f4e2f49

File tree

13 files changed

+494
-26
lines changed

13 files changed

+494
-26
lines changed

.github/workflows/build.yaml

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,18 +207,54 @@ jobs:
207207
kubernetes-version: 1.30.0
208208
- name: Run tilt ci
209209
env:
210-
TEST_SCRIPT: ./wait-and-test.sh
211-
OPENTDF_INGRESS_HOST_PORT: "5432"
210+
TEST_SCRIPT: ./wait-and-test.sh backend
211+
OPENTDF_INGRESS_HOST_PORT: '5432'
212212
PLAYWRIGHT_TESTS_TO_RUN: roundtrip
213213
run: tilt ci
214214

215+
platform-roundtrip:
216+
needs:
217+
- cli
218+
- lib
219+
- web-app
220+
runs-on: ubuntu-latest
221+
defaults:
222+
run:
223+
working-directory: .github/workflows/roundtrip
224+
timeout-minutes: 45
225+
steps:
226+
- uses: actions/checkout@v4
227+
- uses: actions/setup-node@v4
228+
with:
229+
node-version: '20'
230+
cache: 'npm'
231+
cache-dependency-path: './web-app/package-lock.json'
232+
- uses: actions/download-artifact@v4
233+
with:
234+
name: opentdf-client-lib
235+
path: lib/
236+
- uses: actions/download-artifact@v4
237+
with:
238+
name: opentdf-cli
239+
path: cli/
240+
- uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491
241+
with:
242+
go-version: '1.22'
243+
- run: docker compose up -d --wait --wait-timeout 240
244+
- env:
245+
OPENTDF_SERVICES_AUTHORIZATION_URL: 'http://localhost:65432/'
246+
PLAYWRIGHT_TESTS_TO_RUN: roundtrip
247+
run: |-
248+
./wait-and-test.sh platform
249+
215250
deliver-ghp:
216251
needs:
217252
- lib
218253
- cli
219254
- web-app
220255
- scripts
221256
- backend-roundtrip
257+
- platform-roundtrip
222258
runs-on: ubuntu-latest
223259
timeout-minutes: 5
224260
# To publish from a release or feature branch, remove the ref == condition below
@@ -260,8 +296,8 @@ jobs:
260296
with version=[${{ steps.guess-build-metadata.outputs.FULL_VERSION }}]"
261297
- run: >-
262298
.github/workflows/publish-to.sh
263-
${{ steps.guess-build-metadata.outputs.FULL_VERSION }}
264-
${{ steps.guess-build-metadata.outputs.DIST_TAG }}
299+
${{ steps.guess-build-metadata.outputs.FULL_VERSION }}
300+
${{ steps.guess-build-metadata.outputs.DIST_TAG }}
265301
env:
266302
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
267303
- run: echo "- [Client Library](https://github.com/opentdf/client-web/pkgs/npm/client)">>$GITHUB_STEP_SUMMARY
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env bash
2+
3+
set -x
4+
5+
: "${KC_VERSION:=24.0.3}"
6+
7+
if ! which kcadm.sh; then
8+
KCADM_URL=https://github.com/keycloak/keycloak/releases/download/${KC_VERSION}/keycloak-${KC_VERSION}.zip
9+
echo "DOWNLOADING ${KCADM_URL}"
10+
if ! curl --output kc.zip --fail --location "${KCADM_URL}"; then
11+
echo "[ERROR] Failed to download ${KCADM_URL}"
12+
exit 3
13+
fi
14+
ls -l
15+
if ! unzip ./kc.zip; then
16+
echo "[ERROR] Failed to unzip file from ${KCADM_URL}"
17+
exit 3
18+
fi
19+
ls -l
20+
ls -l "$(pwd)/keycloak-${KC_VERSION}/bin"
21+
PATH=$PATH:"$(pwd)/keycloak-${KC_VERSION}/bin"
22+
export PATH
23+
if ! which kcadm.sh; then
24+
echo "[ERROR] Failed to find kcadm.sh"
25+
exit 3
26+
fi
27+
fi
28+
29+
kcadm.sh config credentials --server http://localhost:65432/auth \
30+
--realm master --user admin --password changeme
31+
32+
kcadm.sh create clients -r opentdf \
33+
-s clientId=browsertest \
34+
-s enabled=true \
35+
-s 'redirectUris=["http://localhost:65432/"]' \
36+
-s consentRequired=false \
37+
-s standardFlowEnabled=true \
38+
-s directAccessGrantsEnabled=true \
39+
-s serviceAccountsEnabled=false \
40+
-s publicClient=true \
41+
-s protocol=openid-connect \
42+
-s 'protocolMappers=[{"name":"aud","protocol":"openid-connect","protocolMapper":"oidc-audience-mapper","consentRequired":false,"config":{"access.token.claim":"true","included.custom.audience":"http://localhost:65432"}}]' \
43+
-s 'attributes={"dpop.bound.access.tokens":"true"}'
44+
45+
kcadm.sh create users -r opentdf -s username=user1 -s enabled=true -s firstName=Alice -s lastName=User
46+
kcadm.sh set-password -r opentdf --username user1 --new-password testuser123
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
services:
2+
keycloak:
3+
# This is kc 24.0.1 with opentdf protocol mapper on board
4+
image: quay.io/keycloak/keycloak:24.0
5+
restart:
6+
always
7+
# To enable debugging, use this CMD and also set and expose the DEBUG_PORT
8+
# command: ["--debug", "start-dev", "--log-level=DEBUG"]
9+
command: ['start-dev']
10+
environment:
11+
# DEBUG_PORT: "*:30012"
12+
KC_DB_VENDOR: postgres
13+
KC_DB_URL_HOST: keycloakdb
14+
KC_DB_URL_PORT: 5432
15+
KC_DB_URL_DATABASE: keycloak
16+
KC_DB_USERNAME: keycloak
17+
KC_DB_PASSWORD: changeme
18+
KC_FEATURES: 'preview,token-exchange'
19+
KC_HEALTH_ENABLED: 'true'
20+
KC_HOSTNAME_ADMIN_URL: 'http://localhost:65432/auth'
21+
KC_HOSTNAME_PORT: '65432'
22+
KC_HOSTNAME_STRICT: 'false'
23+
KC_HOSTNAME_STRICT_BACKCHANNEL: 'false'
24+
KC_HOSTNAME_STRICT_HTTPS: 'false'
25+
KC_HOSTNAME_URL: 'http://localhost:65432/auth'
26+
KC_HTTP_ENABLED: 'true'
27+
KC_HTTP_PORT: '8888'
28+
KC_HTTP_RELATIVE_PATH: '/auth'
29+
KC_PROXY_HEADERS: 'xforwarded'
30+
KEYCLOAK_ADMIN: admin
31+
KEYCLOAK_ADMIN_PASSWORD: changeme
32+
ports:
33+
- '8888:8888'
34+
# - "30012:30012"
35+
healthcheck:
36+
test:
37+
- CMD-SHELL
38+
- >-
39+
[ -f /tmp/HealthCheck.java ]
40+
|| echo "public class HealthCheck {
41+
public static void main(String[] args) throws java.lang.Throwable {
42+
System.exit(
43+
java.net.HttpURLConnection.HTTP_OK ==
44+
((java.net.HttpURLConnection) new java.net.URL(args[0]).openConnection())
45+
.getResponseCode() ? 0 : 1);
46+
}
47+
}" >/tmp/HealthCheck.java
48+
&& java /tmp/HealthCheck.java http://localhost:8888/auth/health/live
49+
interval: 5s
50+
timeout: 10s
51+
retries: 3
52+
start_period: 2m
53+
keycloakdb:
54+
image: postgres
55+
restart: always
56+
user: postgres
57+
environment:
58+
POSTGRES_PASSWORD: changeme
59+
POSTGRES_USER: postgres
60+
POSTGRES_DB: keycloak
61+
healthcheck:
62+
test: ['CMD-SHELL', 'pg_isready']
63+
interval: 5s
64+
timeout: 5s
65+
retries: 10
66+
opentdfdb:
67+
image: public.ecr.aws/docker/library/postgres:15-alpine
68+
restart: always
69+
user: postgres
70+
environment:
71+
POSTGRES_USER: postgres
72+
POSTGRES_PASSWORD: changeme
73+
POSTGRES_DB: opentdf
74+
healthcheck:
75+
test: ['CMD-SHELL', 'pg_isready']
76+
interval: 5s
77+
timeout: 5s
78+
retries: 10
79+
ports:
80+
- '5432:5432'
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/sh
2+
# init-temporary-keys.sh
3+
# Initialize temporary keys for use with a KAS
4+
5+
USAGE="Usage: ${CMD:=${0##*/}} [(-v|--verbose)] [-H|--hsm]"
6+
7+
# helper functions
8+
exit2() {
9+
printf >&2 "%s: %s: '%s'\n%s\n" "$CMD" "$1" "$2" "$USAGE"
10+
exit 2
11+
}
12+
check() { { [ "$1" != "$EOL" ] && [ "$1" != '--' ]; } || exit2 "missing argument" "$2"; }
13+
14+
# parse command-line options
15+
set -- "$@" "${EOL:=$(printf '\1\3\3\7')}" # end-of-list marker
16+
while [ "$1" != "$EOL" ]; do
17+
opt="$1"
18+
shift
19+
case "$opt" in
20+
-H | --hsm) opt_hsm='true' ;;
21+
-v | --verbose) opt_verbose='true' ;;
22+
-h | --help)
23+
printf "%s\n" "$USAGE"
24+
exit 0
25+
;;
26+
27+
# process special cases
28+
-[A-Za-z0-9] | -*[!A-Za-z0-9]*) exit2 "invalid option" "$opt" ;;
29+
esac
30+
done
31+
shift
32+
33+
if [ "$opt_verbose" = true ]; then
34+
set -x
35+
fi
36+
37+
if [ "$opt_hsm" = true ]; then
38+
: "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN:=12345}"
39+
: "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_EC_LABEL:=development-ec-kas}"
40+
: "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_RSA_LABEL:=development-rsa-kas}"
41+
42+
if [ -z "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" ]; then
43+
if which brew; then
44+
OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH=$(brew --prefix)/lib/softhsm/libsofthsm2.so
45+
else
46+
OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH=/lib/softhsm/libsofthsm2.so
47+
fi
48+
fi
49+
50+
if softhsm2-util --show-slots | grep dev-token; then
51+
echo "[INFO] dev-token slot is already configured"
52+
exit 0
53+
fi
54+
55+
softhsm2-util --init-token --free --label "dev-token" --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}" --so-pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}"
56+
pkcs11-tool --module "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" --login --show-info --list-objects --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}"
57+
fi
58+
59+
openssl req -x509 -nodes -newkey RSA:2048 -subj "/CN=kas" -keyout kas-private.pem -out kas-cert.pem -days 365
60+
openssl ecparam -name prime256v1 >ecparams.tmp
61+
openssl req -x509 -nodes -newkey ec:ecparams.tmp -subj "/CN=kas" -keyout kas-ec-private.pem -out kas-ec-cert.pem -days 365
62+
63+
if [ "$opt_hsm" = true ]; then
64+
pkcs11-tool --module "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" --login --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}" --write-object kas-private.pem --type privkey --label "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_RSA_LABEL}"
65+
pkcs11-tool --module "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" --login --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}" --write-object kas-cert.pem --type cert --label "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_RSA_LABEL}"
66+
# https://manpages.ubuntu.com/manpages/jammy/man1/pkcs11-tool.1.html --usage-derive
67+
pkcs11-tool --module "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" --login --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}" --write-object kas-ec-private.pem --type privkey --label "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_EC_LABEL}" --usage-derive
68+
pkcs11-tool --module "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_MODULEPATH}" --login --pin "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_PIN}" --write-object kas-ec-cert.pem --type cert --label "${OPENTDF_SERVER_CRYPTOPROVIDER_HSM_KEYS_EC_LABEL}"
69+
fi

0 commit comments

Comments
 (0)