1- SHELL := /usr/bin/env bash
2-
31ifneq ($(wildcard .env) ,)
42 include .env
53endif
64
75VENV_DIR ?= $(CURDIR ) /venv
86PYTEST_ARGS ?=
7+ OIDC_PROVIDER ?= keycloak
98DOCKER_COMPOSE ?= docker compose
9+ DOCKER_COMPOSE_STANDARD ?= $(DOCKER_COMPOSE ) -f container/compose.yml
10+ DOCKER_COMPOSE_AUTH ?= $(DOCKER_COMPOSE ) -f container/compose.yml -f container/compose-auth.yml --profile auth
11+ DOCKER_COMPOSE_AUTH_PINGFEDERATE ?= $(DOCKER_COMPOSE ) -f container/compose.yml -f container/compose-auth.yml --profile auth --profile pingfederate
12+ DOCKER_CONTAINERS ?= \
13+ karapace-cli \
14+ karapace-schema-registry \
15+ karapace-schema-registry-follower \
16+ karapace-rest-proxy \
17+ kafka \
18+ prometheus \
19+ grafana \
20+ statsd-exporter \
21+ opentelemetry-collector \
22+ jaeger \
23+ karapace-schema-registry-authn-only \
24+ karapace-rest-proxy-oidc \
25+ karapace-rest-proxy-no-forward \
26+ karapace-schema-registry-basic \
27+ karapace-rest-proxy-basic \
28+ keycloak \
29+ pingfederate
1030PIP ?= pip3 --disable-pip-version-check --no-input --require-virtualenv
1131PYTHON ?= python3
1232PYTHON_VERSION ?= 3.12
1333KARAPACE_VERSION ?= 5.0.3
1434RUNNER_UID ?=
1535RUNNER_GID ?=
1636COVERAGE_FILE ?= .coverage.${PYTHON_VERSION}
17- KARAPACE_CLI ?= $(DOCKER_COMPOSE ) -f container/compose.yml run --rm karapace-cli
37+ KARAPACE_CLI ?= $(DOCKER_COMPOSE_STANDARD ) run --rm karapace-cli
38+ KARAPACE_CLI_EXEC ?= $(DOCKER_COMPOSE_STANDARD ) exec -T karapace-cli
1839CERTS_FOLDER ?= /opt/karapace/certs
1940
2041# Export variables needed by docker compose
21- export PYTHON_VERSION KARAPACE_VERSION RUNNER_UID RUNNER_GID COVERAGE_FILE PYTEST_ARGS
42+ export PYTHON_VERSION KARAPACE_VERSION RUNNER_UID RUNNER_GID COVERAGE_FILE
43+ export OIDC_JWKS_ENDPOINT_URL OIDC_ALLOW_INSECURE_JWKS OIDC_EXPECTED_ISSUER OIDC_EXPECTED_AUDIENCE OIDC_SUB_CLAIM_NAME OIDC_CLIENT_ID OIDC_ROLES_CLAIM_PATH OIDC_METHOD_ROLES
44+ export OIDC_PROVIDER OIDC_TOKEN_URL OIDC_CLIENT_SECRET OIDC_SCOPE OIDC_VERIFY_TLS OIDC_REALM KEYCLOAK_URL
45+ export PING_IDENTITY_DEVOPS_USER PING_IDENTITY_DEVOPS_KEY
2246
2347define PIN_VERSIONS_COMMAND
2448pip install pip-tools && \
@@ -27,6 +51,13 @@ pip install pip-tools && \
2751 python -m piptools compile --upgrade --extra typing -o /karapace/requirements/requirements-typing.txt /karapace/pyproject.toml
2852endef
2953
54+ define RUN_E2E_TESTS_IN_DOCKER_COMMAND
55+ rm -fr runtime/*; \
56+ sleep 10; \
57+ $1 exec -T karapace-cli $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/e2e/; \
58+ rm -fr runtime/*
59+ endef
60+
3061export PATH := $(VENV_DIR ) /bin:$(PATH )
3162export PS4 := \e[0m\e[32m==> \e[0m
3263export LC_ALL := C
@@ -73,7 +104,7 @@ venv/.deps-dev: venv/.make
73104 touch ' $(@)'
74105
75106
76- .PHONY : test
107+ .PHONY : tests
77108tests : unit-tests integration-tests
78109
79110.PHONY : unit-tests
@@ -103,7 +134,6 @@ cleanest: cleaner
103134 rm -fr ' $(VENV_DIR)'
104135
105136.PHONY : requirements
106- requirements :
107137requirements :
108138 $(PIP ) install --upgrade pip setuptools pip-tools
109139 $(PIP ) install .[dev,typing]
@@ -114,56 +144,108 @@ pin-requirements:
114144
115145.PHONY : stop-karapace-docker-resources
116146stop-karapace-docker-resources :
117- $(DOCKER_COMPOSE ) -f container/compose.yml down -v --remove-orphans
147+ $(DOCKER_COMPOSE_STANDARD ) down -v --remove-orphans || true
148+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) down -v --remove-orphans || true
149+ docker rm -f $(DOCKER_CONTAINERS ) > /dev/null 2>&1 || true
118150
119- .PHONY : start-karapace-docker-resources
120- start-karapace-docker-resources :
121- start-karapace-docker-resources :
151+ .PHONY : prepare-docker-resources
152+ prepare-docker-resources :
122153 touch .coverage.${PYTHON_VERSION} || sudo touch .coverage.${PYTHON_VERSION}
123154 chown ${RUNNER_UID} :${RUNNER_GID} .coverage.${PYTHON_VERSION} 2> /dev/null || sudo chown ${RUNNER_UID} :${RUNNER_GID} .coverage.${PYTHON_VERSION}
124155 mkdir -p test-tmp.${PYTHON_VERSION} || sudo mkdir -p test-tmp.${PYTHON_VERSION}
125156 chown -R ${RUNNER_UID} :${RUNNER_GID} test-tmp.${PYTHON_VERSION} 2> /dev/null || sudo chown -R ${RUNNER_UID} :${RUNNER_GID} test-tmp.${PYTHON_VERSION}
126- $(DOCKER_COMPOSE ) -f container/compose.yml up -d --build --wait --detach
157+
158+ .PHONY : start-karapace-docker-resources
159+ start-karapace-docker-resources : prepare-docker-resources
160+ $(DOCKER_COMPOSE_STANDARD ) up -d --build --wait --detach
161+
162+ .PHONY : start-karapace-docker-auth-resources
163+ start-karapace-docker-auth-resources : prepare-docker-resources
164+ $(DOCKER_COMPOSE_AUTH ) up -d --build --wait
165+
166+ .PHONY : start-karapace-docker-auth-pingfederate-resources
167+ start-karapace-docker-auth-pingfederate-resources : prepare-docker-resources
168+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) up -d --build --wait
169+
170+ .PHONY : provision-pingfederate-oidc
171+ provision-pingfederate-oidc : start-karapace-docker-auth-pingfederate-resources
172+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) exec -T karapace-cli $(PYTHON ) /opt/karapace/bin/oidc/provision_pingfederate_oidc.py
173+
174+ .PHONY : print-keycloak-oidc-token
175+ print-keycloak-oidc-token : start-karapace-docker-auth-resources
176+ $(DOCKER_COMPOSE_AUTH ) exec -T karapace-cli env -u OIDC_CLIENT_SECRET \
177+ OIDC_PROVIDER=" keycloak" \
178+ KEYCLOAK_URL=" http://keycloak:8080" \
179+ OIDC_REALM=" karapace" \
180+ OIDC_CLIENT_ID=" karapace-client" \
181+ OIDC_TOKEN_URL=" http://keycloak:8080/realms/karapace/protocol/openid-connect/token" \
182+ OIDC_SCOPE=" openid" \
183+ OIDC_VERIFY_TLS=" true" \
184+ OIDC_ALLOW_INSECURE_JWKS=" true" \
185+ $(PYTHON ) /opt/karapace/bin/oidc/get_oidc_token.py
186+
187+ .PHONY : print-pingfederate-oidc-token
188+ print-pingfederate-oidc-token : start-karapace-docker-auth-pingfederate-resources
189+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) exec -T karapace-cli \
190+ $(PYTHON ) /opt/karapace/bin/oidc/provision_pingfederate_oidc.py > /dev/null
191+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) exec -T karapace-cli env -u OIDC_CLIENT_SECRET \
192+ OIDC_PROVIDER=" pingfederate" \
193+ OIDC_SUB_CLAIM_NAME=" client_id" \
194+ OIDC_CLIENT_ID=" karapace-client" \
195+ OIDC_CLIENT_SECRET=" karapace-secret" \
196+ OIDC_TOKEN_URL=" https://pingfederate:9031/as/token.oauth2" \
197+ OIDC_SCOPE=" openid" \
198+ OIDC_VERIFY_TLS=" false" \
199+ OIDC_ALLOW_INSECURE_JWKS=" true" \
200+ $(PYTHON ) /opt/karapace/bin/oidc/get_oidc_token.py
127201
128202.PHONY : smoke-test-schema-registry
129- smoke-test-schema-registry : start-karapace-docker-resources
130- $(KARAPACE_CLI ) /opt/karapace/bin/smoke-test-schema-registry.sh
203+ smoke-test-schema-registry : stop-karapace-docker-resources start-karapace-docker-auth -resources
204+ $(DOCKER_COMPOSE_AUTH ) exec -T karapace-cli /opt/karapace/bin/smoke-test-schema-registry.sh
131205
132206.PHONY : smoke-test-rest-proxy
133- smoke-test-rest-proxy : start-karapace-docker-resources
134- $(KARAPACE_CLI ) /opt/karapace/bin/smoke-test-rest-proxy.sh
207+ smoke-test-rest-proxy : stop-karapace-docker-resources start-karapace-docker-resources
208+ $(KARAPACE_CLI_EXEC ) /opt/karapace/bin/smoke-test-rest-proxy.sh
135209
136210.PHONY : unit-tests-in-docker
137211unit-tests-in-docker : start-karapace-docker-resources
138212 rm -fr runtime/*
139- $(KARAPACE_CLI ) $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/unit/
213+ $(KARAPACE_CLI_EXEC ) $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/unit/
140214 rm -fr runtime/*
141215
142216.PHONY : e2e-tests-in-docker
143- e2e-tests-in-docker : export COMPOSE_PROFILES = e2e
144- e2e-tests-in-docker : stop-karapace-docker-resources start-karapace-docker-resources
145- rm -fr runtime/*
146- sleep 10
147- $(KARAPACE_CLI ) $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/e2e/
148- rm -fr runtime/*
217+ e2e-tests-in-docker : stop-karapace-docker-resources start-karapace-docker-auth-resources
218+ $(call RUN_E2E_TESTS_IN_DOCKER_COMMAND,$(DOCKER_COMPOSE_AUTH ) )
219+
220+ .PHONY : e2e-tests-in-docker-keycloak
221+ e2e-tests-in-docker-keycloak : export OIDC_PROVIDER=keycloak
222+ e2e-tests-in-docker-keycloak : stop-karapace-docker-resources start-karapace-docker-auth-pingfederate-resources
223+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) stop pingfederate > /dev/null 2>&1 || true
224+ $(call RUN_E2E_TESTS_IN_DOCKER_COMMAND,$(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) )
225+
226+ .PHONY : e2e-tests-in-docker-pingfederate
227+ e2e-tests-in-docker-pingfederate : export OIDC_PROVIDER=pingfederate
228+ e2e-tests-in-docker-pingfederate : stop-karapace-docker-resources provision-pingfederate-oidc
229+ $(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) stop keycloak > /dev/null 2>&1 || true ; \
230+ $(call RUN_E2E_TESTS_IN_DOCKER_COMMAND,$(DOCKER_COMPOSE_AUTH_PINGFEDERATE ) )
149231
150232.PHONY : integration-tests-in-docker
151233integration-tests-in-docker : start-karapace-docker-resources
152234 rm -fr runtime/*
153235 sleep 10
154- $(KARAPACE_CLI ) $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/integration/
236+ $(KARAPACE_CLI_EXEC ) $(PYTHON ) -m pytest -s -vvv $(PYTEST_ARGS ) tests/integration/
155237 rm -fr runtime/*
156238
157239.PHONY : type-check-mypy-in-docker
158240type-check-mypy-in-docker : start-karapace-docker-resources
159- $(KARAPACE_CLI ) $(PYTHON ) -m mypy src/karapace
241+ $(KARAPACE_CLI_EXEC ) $(PYTHON ) -m mypy src/karapace
160242
161243.PHONY : cli
162244cli : start-karapace-docker-resources
163245 $(KARAPACE_CLI ) bash
164246
165247.PHONY : generate-sr-https-certs
166- generate-sr-https-certs :
248+ generate-sr-https-certs :
167249 $(info ====> Generating self-signed certificates <====)
168250 $(KARAPACE_CLI ) mkcert -key-file $(CERTS_FOLDER ) /key.pem -cert-file $(CERTS_FOLDER ) /cert.pem \
169251 localhost \
@@ -178,6 +260,6 @@ cli: start-karapace-docker-resources
178260curl-sr-https : header ?= 'Content-Type: application/vnd.schemaregistry.v1+json'
179261curl-sr-https :
180262 $(info ====> Sending HTTPS $(method ) request with data to $(url ) <====)
181- $(KARAPACE_CLI ) curl -i -X $(method ) --location $(url ) --cacert /opt/karapace/certs /ca/rootCA.pem \
263+ $(KARAPACE_CLI ) curl -i -X $(method ) --location $(url ) --cacert $( CERTS_FOLDER ) /ca/rootCA.pem \
182264 --header $(header ) \
183265 --data ' $(data)'
0 commit comments