- Add Workspace domain (entity, repository, service, handler, DTO) - Add multi-tenant K8s client with tenant binding and quota management - Add K8s diagnostics client (instance diagnostics) - Add authorization middleware (authz package) - Restructure frontend to feature-based architecture (features/) - Add User Management page in configuration - Add AccessDenied page and route guards - Refactor shared components (form inputs, layout, UI) - Update Tailwind config for new design system - Add comprehensive documentation (docs/, tasks/, plans) - Improve cluster service with better kubeconfig handling - Add tests for crypto, config, helm client, tenant binding
150 lines
4.8 KiB
Markdown
150 lines
4.8 KiB
Markdown
# Bug Report: test-user-b QA Test
|
|
|
|
**Tester:** test-user-b (user role)
|
|
**Date:** 2026-05-11
|
|
**Environment:** http://10.6.80.114:18080
|
|
|
|
---
|
|
|
|
## Bug 1: Repository Tags Endpoint Returns 404
|
|
|
|
**Endpoint:** `GET /api/v1/registries/{registryId}/repositories/{repository}/tags`
|
|
**Status Code:** 404
|
|
**Response Body:** `404 page not found` (plain text, not JSON)
|
|
|
|
**Expected:** Should return a list of tags for the chart/artifact.
|
|
**Actual:** The dedicated tags endpoint is not implemented or routes incorrectly. The artifacts endpoint (`/repositories/{repository}/artifacts`) does work and returns tag info.
|
|
|
|
**Severity:** Medium — tags are still discoverable via artifacts endpoint but the dedicated tags API is broken.
|
|
|
|
---
|
|
|
|
## Bug 2: DELETE Instance Returns Empty Response Body
|
|
|
|
**Endpoint:** `DELETE /api/v1/clusters/{clusterId}/instances/{instanceId}`
|
|
**Status Code:** 200
|
|
**Response Body:** (empty — no content at all)
|
|
|
|
**Expected:** Should return a confirmation JSON body (e.g., `{"message": "Instance deletion initiated", "id": "..."}`) or at minimum a 202 Accepted with status details.
|
|
|
|
**Actual:** Returns a completely empty body. The instance does transition to `pending-delete` state, but the API consumer receives no feedback.
|
|
|
|
**Severity:** Medium — operation works but API consumer gets no confirmation.
|
|
|
|
---
|
|
|
|
## Bug 3: Cluster Stats Endpoint Returns 404
|
|
|
|
**Endpoint:** `GET /api/v1/clusters/{clusterId}/stats`
|
|
**Status Code:** 404
|
|
**Response Body:** `404 page not found` (plain text)
|
|
|
|
**Expected:** Should return cluster resource statistics (CPU, memory, pod counts, etc.) or a proper JSON error if not implemented.
|
|
|
|
**Actual:** Endpoint is not implemented — returns a raw 404 with no JSON error structure.
|
|
|
|
**Severity:** Low — but given the user has `monitoring:clusters:view` permission, this is a missing feature.
|
|
|
|
---
|
|
|
|
## Bug 4: Kubeconfig Endpoint Returns 404
|
|
|
|
**Endpoint:** `GET /api/v1/clusters/{clusterId}/kubeconfig`
|
|
**Status Code:** 404
|
|
**Response Body:** `404 page not found` (plain text)
|
|
|
|
**Expected:** Should return a kubeconfig file content or JSON error. User has `kubeconfig:issue:own` permission.
|
|
|
|
**Actual:** Endpoint is not implemented.
|
|
|
|
**Severity:** Low — the permission exists but the endpoint does nothing.
|
|
|
|
---
|
|
|
|
## Bug 5: Monitoring Metrics Endpoint Returns 404
|
|
|
|
**Endpoint:** `GET /api/v1/monitoring/clusters/{clusterId}/metrics`
|
|
**Status Code:** 404
|
|
**Response Body:** `404 page not found` (plain text)
|
|
|
|
**Expected:** Monitoring metrics data. User has `monitoring:clusters:view` permission.
|
|
|
|
**Actual:** Endpoint not found.
|
|
|
|
**Severity:** Low — monitoring permissions exist but backend endpoints missing.
|
|
|
|
---
|
|
|
|
## Bug 6: Inconsistent API Response Format (Array vs Object Wrapper)
|
|
|
|
**Clusters and Registries** return bare arrays:
|
|
```json
|
|
[
|
|
{ "id": "...", "name": "k3s", ... }
|
|
]
|
|
```
|
|
|
|
**Instances** returns an object wrapper:
|
|
```json
|
|
{
|
|
"instances": [
|
|
{ "id": "...", "name": "test-nginx-b", ... }
|
|
],
|
|
"total": 1
|
|
}
|
|
```
|
|
|
|
**Expected:** Consistent response format across all list endpoints. Either all return bare arrays or all use the `{ "items": [...], "total": N }` wrapper pattern.
|
|
|
|
**Severity:** Low — API consistency issue. Makes client code harder to write generically.
|
|
|
|
---
|
|
|
|
## Bug 7: auth/me Returns Empty Token Fields
|
|
|
|
**Endpoint:** `GET /api/v1/auth/me`
|
|
**Response includes empty/unpopulated fields:**
|
|
```json
|
|
{
|
|
"accessToken": "",
|
|
"refreshToken": "",
|
|
...
|
|
}
|
|
```
|
|
|
|
**Expected:** Either remove these fields from the `/auth/me` response (they are only meaningful in login/refresh responses) or populate them with valid values.
|
|
|
|
**Actual:** Emptry string values for both token fields create confusion about whether they should be present.
|
|
|
|
**Severity:** Low — cosmetic issue, but suggests the DTO is reusing the login response struct without clearing token fields.
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
| # | Bug | Severity | Category |
|
|
|---|-----|----------|----------|
|
|
| 1 | Tags endpoint 404 | Medium | Missing Implementation |
|
|
| 2 | DELETE returns empty body | Medium | API Response Quality |
|
|
| 3 | Cluster stats endpoint 404 | Low | Missing Implementation |
|
|
| 4 | Kubeconfig endpoint 404 | Low | Missing Implementation |
|
|
| 5 | Monitoring metrics endpoint 404 | Low | Missing Implementation |
|
|
| 6 | Inconsistent list response format | Low | API Consistency |
|
|
| 7 | auth/me returns empty tokens | Low | API Response Quality |
|
|
|
|
**Passed Tests:**
|
|
- Login/authentication ✓
|
|
- Auth/me user info ✓
|
|
- Cluster listing ✓
|
|
- Cluster health check ✓
|
|
- Registry listing ✓
|
|
- Repository browsing (artifacts) ✓
|
|
- Instance deployment (nginx chart) ✓
|
|
- Instance status tracking (pending-install → deployed) ✓
|
|
- Instance deletion (async, transitions to pending-delete then removed) ✓
|
|
- Error handling for invalid repository ✓
|
|
- Error handling for missing required fields ✓
|
|
- Auth rejects invalid tokens ✓
|
|
- Auth rejects missing tokens ✓
|
|
- Instance cleanup confirmed ✓
|