QA Test Diagrams

Flow diagrams for each test scenario and the YAML resources involved.
Click any YAML file to view its definition without leaving the page.

13
Test Cases
3
Environments
2
Clusters
2
Chart Versions

QA-01GitOps SyncArgoCD Applications Healthy & Synced
flowchart TD
  A["🖥️ oc get applications.argoproj.io
-n openshift-gitops"] --> B{"Apps
found?"} B -- No --> F1["❌ FAIL: Cannot list apps"] B -- Yes --> C["Parse each app:
name / sync / health"] C --> D{"kuadrant-resources-*
OutOfSync?"} D -- Yes --> W["⚠️ WARNING:
SharedResourceWarning
apply gateway-resources.yaml"] D -- No --> E{"Synced &
Healthy?"} E -- Yes --> P["✅ App OK"] E -- No --> F2["❌ App unhealthy"] W --> G{"All nfl-wallet
apps OK?"} P --> G F2 --> G G -- Yes --> PASS["🟢 PASS"] G -- No --> FAIL["🔴 FAIL"]
QA-02Ambient MeshPods have 1 container (no sidecar)
flowchart TD
  A["🖥️ oc get pods
-n nfl-wallet-dev/test/prod"] --> B{"Pods
found?"} B -- No --> S["⏭️ SKIP: Run from
managed cluster"] B -- Yes --> C["Check each pod:
count containers"] C --> D{"Has
istio-proxy?"} D -- Yes --> F["❌ Sidecar detected"] D -- No --> E{"Only 1
container?"} E -- Yes --> P["✅ No sidecar — Ambient"] E -- No --> W["⚠️ Multiple containers"] P --> R{"All pods OK?"} W --> R F --> R R -- Yes --> PASS["🟢 PASS"] R -- No --> FAIL["🔴 FAIL"]
QA-03Egress (ESPN)ESPN route reachable (test env only)
flowchart TD
  A["🌐 curl ESPN route
/auth/nfl + X-Api-Key"] --> B{"HTTP
code?"} B -- 200 --> P1["🟢 PASS: ESPN OK"] B -- 301/302 --> P2["🟢 PASS: Redirect active"] B -- 401/403 --> C["Route exists
but auth failed"] C --> D["Try /public/nfl
no auth required"] D --> E{"HTTP
200?"} E -- Yes --> P3["🟢 PASS: Public path"] E -- No --> P4["🟢 PASS: Route exists"] B -- other --> F["Fallback:
test api-bills on dev"] F --> G{"HTTP
200?"} G -- Yes --> P5["🟢 PASS: api-bills OK"] G -- No --> FAIL["🔴 FAIL"]
QA-04RHDH PortalDeveloper Hub catalog shows APIs
flowchart TD
  A["👤 Manual Verification"] --> B["1. Navigate to
Red Hat Developer Hub"] B --> C["2. Search for
nfl-wallet-api-customers"] C --> D["3. Verify OpenAPI
spec renders correctly"] D --> E["4. Check Kuadrant Plugin:
PlanPolicy & AuthPolicy"] E --> SKIP["🟡 SKIP: Manual"]
QA-05Rate Limiting429 after exceeding quota (110 requests)
flowchart TD
  A["🌐 Send 110 sequential
curl requests with X-Api-Key"] --> B["Count responses:
200 / 429 / errors"] B --> C{"Got any
429?"} C -- Yes --> P1["🟢 PASS: Rate limit active
at request #N"] C -- No --> D{"Any
200s?"} D -- Yes --> E{"Any
errors?"} E -- Yes --> P2["🟢 PASS: Reachable,
no 429 seen"] E -- No --> P3["🟢 PASS: All 200,
no RateLimitPolicy"] D -- No --> FAIL["🔴 FAIL: Unreachable"]
QA-06AuthPolicy401/403 without key, 200 with key, OIDC JWT
flowchart TD
  A["🌐 curl WITHOUT
X-Api-Key"] --> B{"HTTP
401/403?"} B -- Yes --> C["✅ Auth enforced"] B -- No --> F1["❌ Not enforced"] C --> D["🌐 curl WITH X-Api-Key
up to 5 retries"] D --> E{"HTTP
200?"} E -- Yes --> G["✅ API key works"] E -- No --> F2["❌ Key rejected"] G --> H["🔐 OIDC: curl
.well-known endpoint"] H --> I{"HTTP
200?"} I -- Yes --> J["POST token_endpoint
grant_type=password
user=john.doe"] I -- No --> W1["⚠️ RHBK not ready"] J --> K{"Got
access_token?"} K -- Yes --> L["🌐 curl with
Bearer token"] K -- No --> W2["⚠️ Password reset needed"] L --> M{"HTTP
200?"} M -- Yes --> P["✅ JWT accepted"] M -- No --> W3["⚠️ Token OK, API non-200"]
QA-07Cross-ClusterEast & West serve independent workloads
flowchart TD
  A["🌐 curl dev APIs
on EAST cluster"] --> B["api-customers
api-bills
api-raiders"] C["🌐 curl dev APIs
on WEST cluster"] --> D["api-customers
api-bills
api-raiders"] B --> E{"All
200?"} D --> F{"All
200?"} E -- Yes --> G["✅ East OK"] E -- No --> H["⚠️ East timeout"] F -- Yes --> I["✅ West OK"] F -- No --> J["⚠️ West timeout"] G --> K["🌐 Test webapp /
on both clusters"] H --> K I --> K J --> K K --> L{"Both clusters
respond?"} L -- Both --> P1["🟢 PASS: Both OK"] L -- One --> P2["🟢 PASS: One OK
other = sandbox latency"] L -- Neither --> FAIL["🔴 FAIL"]
QA-08ObservabilityPrometheus metrics & Grafana reachable
flowchart TD
  A["🌐 curl Grafana route
on Hub cluster"] --> B{"HTTP
200/302?"} B -- Yes --> C["✅ Grafana OK"] B -- No --> F1["❌ Grafana down"] D["🌐 curl Promxy route
on Hub cluster"] --> E{"HTTP
200/302?"} E -- Yes --> G["✅ Promxy OK"] E -- No --> F2["❌ Promxy down"] C --> H{"oc CLI
available?"} G --> H H -- Yes --> I["Query Prometheus:
istio_requests_total"] H -- No --> J["🟢 PASS if Grafana OK"] I --> K{"result in
response?"} K -- Yes --> PASS["🟢 PASS: Metrics OK"] K -- No --> L{"Grafana
OK?"} L -- Yes --> P2["🟢 PASS: Grafana reachable"] L -- No --> FAIL["🔴 FAIL"]
QA-09Swagger UIEach API serves /api-service/swagger
flowchart TD
  A["For each API:
customers / bills / raiders"] --> B["🌐 curl
/api-SERVICE/swagger"] B --> C{"HTTP
200 or 301?"} C -- Yes --> P["✅ Swagger OK"] C -- No --> D["Try alt path:
/SERVICE/swagger"] D --> E{"HTTP
200 or 301?"} E -- Yes --> P2["✅ Alt path OK"] E -- No --> F["❌ Not accessible"] P --> R{"All APIs
accessible?"} P2 --> R F --> R R -- Yes --> PASS["🟢 PASS"] R -- No --> FAIL["🔴 FAIL"]
QA-10Load Test10 workers x 20 requests concurrent
flowchart TD
  A["⚡ Spawn 10 parallel
workers"] --> B["Each worker sends
20 curl + X-Api-Key"] B --> C["Collect results:
200 / 429 / errors"] C --> D{"Any
429?"} D -- Yes --> P1["🟢 PASS: RateLimit enforced"] D -- No --> E{"All
200?"} E -- Yes --> P2["🟢 PASS: No rate limit hit"] E -- No --> F{"Success
rate >= 30%?"} F -- Yes --> P3["🟢 PASS: Intermittent errors"] F -- No --> FAIL["🔴 FAIL: Too many errors"]
QA-11RHBK NeuroFaceBiometric login endpoints (dev/test)
flowchart TD
  A["For each env:
dev / test"] --> B["For each cluster:
east / west"] B --> C["🌐 curl RHBK
/realms/neuroface"] C --> D{"HTTP
200?"} D -- Yes --> E["✅ RHBK healthy"] D -- No --> F["❌ RHBK down"] E --> G["🌐 curl .well-known
/openid-configuration"] G --> H{"HTTP
200?"} H -- Yes --> I["✅ OIDC OK"] H -- No --> J["❌ OIDC down"] I --> K{"All realm +
OIDC OK?"} F --> K J --> K K -- Yes --> PASS["🟢 PASS"] K -- No --> FAIL["🔴 FAIL"]
QA-12Canary DeploymentProd=v0.1.1, Canary=v0.1.3 via separate hostname
flowchart TD
  A["For each cluster:
east / west"] --> B["🌐 curl prod URL
nfl-wallet-prod.*"] A --> C["🌐 curl canary URL
nfl-wallet-canary.*"] B --> D{"HTTP
200?"} D -- Yes --> E["Check body:
no login/keycloak"] D -- 000 --> F["⚠️ Timeout
sandbox latency"] E --> G{"No login
found?"} G -- Yes --> H["✅ Prod = v0.1.1"] G -- No --> I["❌ Wrong version"] C --> J{"HTTP
200?"} J -- Yes --> K["✅ Canary reachable"] J -- 000 --> L["⚠️ No Route
or timeout"] H --> M{"Prod verified
AND canary
reachable?"} K --> M M -- Both --> PASS["🟢 PASS"] M -- One --> P2["🟢 PASS: partial"] M -- Error --> FAIL["🔴 FAIL"]
QA-13Resource ScalingRHBK, NeuroFace & Gateway scaled resources
flowchart TD
  A["For each ns:
nfl-wallet-dev / test"] --> B["🖥️ oc get deploy
nfl-wallet-rhbk-neuroface"] B --> C{"CPU = 1
or 1000m?"} C -- Yes --> D["✅ RHBK scaled"] C -- 500m --> E["⚠️ Chart default
re-apply ApplicationSet"] A --> F["🖥️ oc get deploy
neuroface-backend"] F --> G{"CPU = 1
or 1000m?"} G -- Yes --> H["✅ NeuroFace scaled"] G -- 100m --> I["⚠️ Chart default
re-apply ApplicationSet"] A --> J["🖥️ oc get deploy
nfl-wallet-gateway-istio"] J --> K{"CPU = 1
or 1000m?"} K -- Yes --> L["✅ Gateway scaled"] K -- N/A --> M["⚠️ Apply
gateway-resources.yaml"] D --> R{"All
scaled?"} H --> R L --> R R -- Yes --> PASS["🟢 PASS"] R -- No --> FAIL["🔴 FAIL"]
View on GitHub
Loading...