Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions docs/plans/ocpmcp-308-eval-dashboard-sippy-spike.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# OCPMCP-308: Allowlist mcpchecker JUnit Suite for Sippy Import

**Date:** 2026-08-03
**JIRA:** [OCPMCP-308](https://redhat.atlassian.net/browse/OCPMCP-308)
**Related:** [OCPMCP-108](https://redhat.atlassian.net/browse/OCPMCP-108)

## Problem Statement

mcpchecker Prow jobs emit JUnit with suite name `mcpchecker` (from
`mcpchecker result convert junit`). The prow loader skips suites that are not in
`pkg/db/suites.go`:

```text
skipping suite "mcpchecker" as it's not listed for import
```

Without an allowlist entry, task pass/fail from those jobs never reaches
Postgres or the Sippy UI.

## Approach

Add `"mcpchecker"` to the static `testSuites` allowlist used by
`IsSuiteImportable`. No loader, schema, or UI changes. Once allowlisted, the
existing prowloader path imports matching JUnit testcases when the job is
loaded.

## Implementation Plan

| File | Changes |
|------|---------|
| `pkg/db/suites.go` | Add `"mcpchecker"` to `testSuites` |
| `pkg/db/suites_test.go` | Cover `mcpchecker` importable; known suite still accepted; unknown rejected |
| `docs/plans/ocpmcp-308-eval-dashboard-sippy-spike.md` | This plan |

### `pkg/db/suites.go`

```go
"prowjob-junit",
"mcpchecker",
"OLM-Catalog-Validation",
```

### `pkg/db/suites_test.go`

- `TestIsSuiteImportableMcpchecker`: `IsSuiteImportable("mcpchecker") == true`
- `TestIsSuiteImportableKnownAndUnknown`: `openshift-tests` remains true; unknown false

## Test Plan

| Test case | Input | Expected |
|-----------|-------|----------|
| mcpchecker allowlisted | `"mcpchecker"` | `IsSuiteImportable` → true |
| known suite unchanged | `"openshift-tests"` | true |
| unknown suite rejected | `"not-a-real-suite"` | false |
| JUnit suite name | `mcpchecker result convert junit mcpchecker-out.json` | `<testsuite name="mcpchecker"` |

```bash
go test ./pkg/db/ -run TestIsSuiteImportable

mcpchecker result convert junit mcpchecker-out.json --output-file /tmp/junit.xml
grep 'testsuite name="mcpchecker"' /tmp/junit.xml
```

## Migration and Backward Compatibility

No migration. Existing suite imports are unchanged. Unknown suites remain
skipped. New behavior is additive: `mcpchecker` suites are imported when present
in job artifacts.

## Out of Scope

- Eval-run trends, JSON forensics, agent APIs (dedicated eval-results work)
- Component Readiness mapping for mcpchecker tests
- Manual edits to `config/openshift.yaml` (generated by `sippy-config-generator`)

## Dependencies

1. **OCPMCP-108** (`openshift/release`): Prow job uploads
`junit_mcpchecker.xml` (and JSON forensics) under `${ARTIFACT_DIR}`.
2. After the periodic job exists, confirm
`periodic-ci-openshift-openshift-mcp-server-main-periodic-mcpchecker-eval`
appears under the expected release in `config/openshift.yaml` on the next
generator run, then verify Sippy imports `mcpchecker` testcases from a
real job run.
1 change: 1 addition & 0 deletions pkg/db/suites.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ var testSuites = []string{
"telco-verification",
"github.com/openshift/console-operator/test/e2e",
"prowjob-junit",
"mcpchecker",
"OLM-Catalog-Validation",
"insights-operator-tests",
"CNV-lp-interop",
Expand Down
15 changes: 15 additions & 0 deletions pkg/db/suites_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,18 @@ func TestDynamicSuitePatternMatching(t *testing.T) {
})
}
}

func TestIsSuiteImportableMcpchecker(t *testing.T) {
if !IsSuiteImportable("mcpchecker") {
t.Fatal("expected mcpchecker suite to be importable for OCPMCP-308 JUnit ingestion")
}
}

func TestIsSuiteImportableKnownAndUnknown(t *testing.T) {
if !IsSuiteImportable("openshift-tests") {
t.Fatal("expected openshift-tests to remain importable")
}
if IsSuiteImportable("not-a-real-suite") {
t.Fatal("expected unknown suite to be rejected")
}
}