Skip to content

Commit 70aa477

Browse files
add sdk specific structure and ability to use git ref sdk version in all sdk relates tests
Signed-off-by: Brian Gallagher <briangal@gmail.com>
1 parent 2eac079 commit 70aa477

19 files changed

Lines changed: 3699 additions & 2246 deletions

tests/common/environment.go

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ func GetNotebookUserName(t Test) string {
6969
return name
7070
}
7171

72+
// GetNotebookUserNameFromEnv returns NOTEBOOK_USER_NAME when provided.
73+
// Otherwise it falls back to resolving the user identity from the provided token.
74+
func GetNotebookUserNameFromEnv(t Test, token string) string {
75+
if name, ok := os.LookupEnv(notebookUserName); ok && strings.TrimSpace(name) != "" {
76+
return name
77+
}
78+
return GenerateNotebookUserNameFromToken(t, token)
79+
}
80+
7281
func GetNotebookUserToken(t Test) string {
7382
token, ok := os.LookupEnv(notebookUserToken)
7483
if !ok {
@@ -77,6 +86,15 @@ func GetNotebookUserToken(t Test) string {
7786
return token
7887
}
7988

89+
// GetNotebookUserTokenFromEnv returns NOTEBOOK_USER_TOKEN when provided.
90+
// Otherwise it falls back to generating a token from username/password.
91+
func GetNotebookUserTokenFromEnv(t Test) string {
92+
if token, ok := os.LookupEnv(notebookUserToken); ok && strings.TrimSpace(token) != "" {
93+
return token
94+
}
95+
return GenerateNotebookUserToken(t)
96+
}
97+
8098
func GetNotebookUserPassword(t Test) string {
8199
password, ok := os.LookupEnv(notebookUserPassword)
82100
if !ok {
@@ -85,7 +103,7 @@ func GetNotebookUserPassword(t Test) string {
85103
return password
86104
}
87105

88-
// GenerateNotebookUserToken generates an OpenShift token using oc login with username and password
106+
// GenerateNotebookUserToken generates an OpenShift token using oc login with username and password.
89107
func GenerateNotebookUserToken(t Test) string {
90108
userName := GetNotebookUserName(t)
91109
password := GetNotebookUserPassword(t)
@@ -128,12 +146,39 @@ func GenerateNotebookUserToken(t Test) string {
128146
return strings.TrimSpace(string(out))
129147
}
130148

149+
// GenerateNotebookUserNameFromToken resolves the username bound to a bearer token.
150+
func GenerateNotebookUserNameFromToken(t Test, token string) string {
151+
if strings.TrimSpace(token) == "" {
152+
t.T().Fatalf("Cannot resolve Notebook username from token: token is empty")
153+
}
154+
155+
cmd := exec.Command(
156+
"oc", "whoami",
157+
"--token="+token,
158+
"--server="+GetOpenShiftApiUrl(t),
159+
"--insecure-skip-tls-verify=true",
160+
)
161+
out, err := cmd.Output()
162+
if err != nil {
163+
if exitError, ok := err.(*exec.ExitError); ok {
164+
t.T().Logf("Error running 'oc whoami' command: %v\n", exitError)
165+
t.T().Logf("Output: %s\n", out)
166+
t.T().Logf("Error output: %s\n", exitError.Stderr)
167+
} else {
168+
t.T().Logf("Error running 'oc whoami' command: %v\n", err)
169+
}
170+
t.T().FailNow()
171+
}
172+
173+
return strings.TrimSpace(string(out))
174+
}
175+
131176
func GetNotebookImage(t Test) string {
132-
notebook_image, ok := os.LookupEnv(notebookImage)
133-
if !ok {
177+
notebookImageValue, ok := os.LookupEnv(notebookImage)
178+
if !ok || strings.TrimSpace(notebookImageValue) == "" {
134179
t.T().Fatalf("Expected environment variable %s not found, please use this environment variable to specify image of the Notebook.", notebookImage)
135180
}
136-
return notebook_image
181+
return notebookImageValue
137182
}
138183

139184
func GetTestTier(t Test) (string, bool) {

tests/kubeflow_sdk/Makefile

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
SHELL := /usr/bin/env bash
2+
3+
SDK_TEST_TIMEOUT ?= 60m
4+
SDK_TEST_EXCLUDE_REGEX ?=
5+
ACCELERATOR_TESTS ?= CUDA
6+
NOTEBOOK_ACCELERATOR ?=
7+
SKIP_S3_TESTS ?= false
8+
9+
.PHONY: help sdk-test sdk-test-all sdk-test-trainer-all sdk-test-trainer-cpu sdk-test-trainer-sanity sdk-test-trainer-tier1 sdk-test-trainer-cuda sdk-test-trainer-rocm sdk-test-trainer-with-tier sdk-print-selected-trainer-tests sdk-print-trainer-tiers sdk-print-tiers
10+
11+
help:
12+
@echo "Kubeflow SDK test targets"
13+
@echo ""
14+
@echo "Core:"
15+
@echo " sdk-test Run default SDK set (Sanity + Tier1 + accelerator lane)"
16+
@echo " sdk-test-all Alias for sdk-test (all components, currently trainer only)"
17+
@echo " sdk-test-trainer-all Run all trainer SDK tests (all tiers)"
18+
@echo " sdk-test-trainer-cpu Run trainer SDK CPU lane (Sanity + Tier1)"
19+
@echo " sdk-test-trainer-sanity Run trainer SDK sanity tier"
20+
@echo " sdk-test-trainer-tier1 Run trainer SDK tier1"
21+
@echo " sdk-test-trainer-cuda Run trainer SDK CUDA lane"
22+
@echo " sdk-test-trainer-rocm Run trainer SDK ROCm lane"
23+
@echo " sdk-test-trainer-with-tier Run trainer SDK tests with SDK_TEST_TIER=<tier>"
24+
@echo ""
25+
@echo "Debug:"
26+
@echo " sdk-print-selected-trainer-tests"
27+
@echo " sdk-print-trainer-tiers"
28+
@echo " sdk-print-tiers Print tiers for all SDK components"
29+
@echo ""
30+
@echo "Supported env vars:"
31+
@echo " SDK_TEST_TIMEOUT (default: 60m)"
32+
@echo " SDK_TEST_EXCLUDE_REGEX Exclude tests by name regex"
33+
@echo " SKIP_S3_TESTS true|false (exclude S3/AWS-related trainer SDK tests)"
34+
@echo " ACCELERATOR_TESTS CUDA (default) | CPU | ROCM | ALL"
35+
@echo " (controls lane selection and default NOTEBOOK_IMAGE when unset)"
36+
@echo " NOTEBOOK_ACCELERATOR Optional image-only override: CUDA | CPU | ROCM"
37+
@echo " SDK_TEST_TIER Custom trainer tier for sdk-test-trainer-with-tier"
38+
39+
sdk-test: sdk-test-all
40+
41+
sdk-test-all:
42+
@set -euo pipefail; \
43+
$(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-sanity SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"; \
44+
$(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-tier1 SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"; \
45+
case "$$(echo "$(ACCELERATOR_TESTS)" | tr '[:lower:]' '[:upper:]')" in \
46+
CPU) ;; \
47+
CUDA) $(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-cuda SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)" ;; \
48+
ROCM) $(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-rocm SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)" ;; \
49+
ALL) $(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-cuda SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"; \
50+
$(MAKE) -f tests/kubeflow_sdk/Makefile sdk-test-trainer-rocm SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)" ;; \
51+
*) echo "Unsupported ACCELERATOR_TESTS='$(ACCELERATOR_TESTS)'. Use CPU, CUDA, ROCM, or ALL."; exit 1 ;; \
52+
esac
53+
54+
sdk-test-trainer-all:
55+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-all SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="$(NOTEBOOK_ACCELERATOR)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
56+
57+
sdk-test-trainer-cpu:
58+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-cpu SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="CPU" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
59+
60+
sdk-test-trainer-sanity:
61+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-sanity SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="$(NOTEBOOK_ACCELERATOR)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
62+
63+
sdk-test-trainer-tier1:
64+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-tier1 SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="$(NOTEBOOK_ACCELERATOR)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
65+
66+
sdk-test-trainer-cuda:
67+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-cuda SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="CUDA" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
68+
69+
sdk-test-trainer-rocm:
70+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-rocm SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="ROCM" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
71+
72+
sdk-test-trainer-with-tier:
73+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-test-with-tier SDK_TEST_TIER="$(SDK_TEST_TIER)" SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SDK_TEST_TIMEOUT="$(SDK_TEST_TIMEOUT)" ACCELERATOR_TESTS="$(ACCELERATOR_TESTS)" NOTEBOOK_ACCELERATOR="$(NOTEBOOK_ACCELERATOR)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
74+
75+
sdk-print-selected-trainer-tests:
76+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-print-selected SDK_TEST_EXCLUDE_REGEX="$(SDK_TEST_EXCLUDE_REGEX)" SKIP_S3_TESTS="$(SKIP_S3_TESTS)"
77+
78+
sdk-print-trainer-tiers:
79+
@$(MAKE) -f tests/kubeflow_sdk/trainer/Makefile trainer-sdk-print-tiers
80+
81+
sdk-print-tiers:
82+
@$(MAKE) -f tests/kubeflow_sdk/Makefile sdk-print-trainer-tiers

0 commit comments

Comments
 (0)