72 lines
2.7 KiB
Go
72 lines
2.7 KiB
Go
package pi
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestDoctorRequiresExternalEndpointAuthPiStateAndHealth(t *testing.T) {
|
|
fake := newFakeRunner()
|
|
if err := Doctor(context.Background(), fake); err != nil {
|
|
t.Fatalf("Doctor() error = %v", err)
|
|
}
|
|
for _, command := range []string{"pi --version", "PI_VERSION", "io.thothii.pi.version", "test -w /home/thoth/.pi", "test -r /home/thoth/.pi/agent/auth.json", "/health"} {
|
|
assertCalled(t, fake.calls, command)
|
|
}
|
|
}
|
|
|
|
func TestDoctorRejectsActualEnvironmentAndImageLabelVersionMismatches(t *testing.T) {
|
|
for _, mismatch := range []string{"actual", "environment", "label"} {
|
|
t.Run(mismatch, func(t *testing.T) {
|
|
fake := newFakeRunner()
|
|
switch mismatch {
|
|
case "actual":
|
|
fake.version = "0.80.2"
|
|
case "environment":
|
|
fake.expectedVersion = "0.80.2"
|
|
case "label":
|
|
fake.labelVersion = "0.80.2"
|
|
}
|
|
if err := Doctor(context.Background(), fake); err == nil || !strings.Contains(err.Error(), "version") {
|
|
t.Fatalf("Doctor() error = %v, want expected-version mismatch", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Catches a smoke check that composes health/models/settings itself and drifts from the dedicated
|
|
// backend contract, rather than retaining only the independent in-container version signal.
|
|
func TestTestUsesDedicatedSmokeEndpointAndIndependentImageVersionProbe(t *testing.T) {
|
|
fake := newFakeRunner()
|
|
if err := Test(context.Background(), fake); err != nil {
|
|
t.Fatalf("Test() error = %v", err)
|
|
}
|
|
for _, command := range []string{"pi --version", "operator-command.js pi-test"} {
|
|
assertCalled(t, fake.calls, command)
|
|
}
|
|
for _, legacy := range []string{"/pi-management/test", "x-thoth-principal", "x-thoth-is-admin"} {
|
|
if strings.Contains(strings.Join(fake.calls, "\n"), legacy) {
|
|
t.Fatalf("Pi smoke invoked legacy endpoint %q: %s", legacy, strings.Join(fake.calls, "\n"))
|
|
}
|
|
}
|
|
if got := strings.Join(fake.calls, "\n"); strings.Contains(got, "secret") {
|
|
t.Fatalf("probe commands expose secret: %s", got)
|
|
}
|
|
}
|
|
|
|
// Catches an ignored negative ready result from the backend smoke endpoint, which would report a
|
|
// successfully verified candidate image while its configured Pi runtime is unusable.
|
|
func TestTestRequiresDedicatedSmokeEndpointToReportReady(t *testing.T) {
|
|
fake := newFakeRunner()
|
|
fake.piManagementTestWire = `{"ready":false,"message":"provider unavailable"}`
|
|
if err := Test(context.Background(), fake); err == nil || !strings.Contains(err.Error(), "Pi smoke response is not ready") {
|
|
t.Fatalf("Test() error = %v, want negative dedicated smoke result", err)
|
|
}
|
|
fake.piManagementTestWire = `{"ready":true}`
|
|
if err := Test(context.Background(), fake); err != nil {
|
|
t.Fatalf("Test() exact match error = %v", err)
|
|
}
|
|
assertCalled(t, fake.calls, "pi --version")
|
|
}
|