Files
rvbox/test/harness/harness_test.go
T

150 lines
4.4 KiB
Go

package main
import (
"bytes"
"context"
"os"
"path/filepath"
"strings"
"testing"
"time"
)
func TestSampleRunLifecycle_HP_CFG_01(t *testing.T) {
t.Parallel()
root := t.TempDir()
var output bytes.Buffer
h := &harness{root: root, now: func() time.Time { return time.Unix(1_700_000_000, 0).UTC() }, out: &output}
current, err := h.create("sample-run", "integration", "sample")
if err != nil {
t.Fatalf("create: %v", err)
}
if current.Phase != "created" || current.ComposeProject != "rvbox-test-sample-run" {
t.Fatalf("manifest = %+v", current)
}
if err := h.transition(current, "interrupted", "interrupt", "test"); err != nil {
t.Fatal(err)
}
loaded, err := h.load("sample-run")
if err != nil || loaded.Phase != "interrupted" {
t.Fatalf("load = (%+v, %v)", loaded, err)
}
if err := h.collect(loaded); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(filepath.Join(root, "sample-run", "artifacts", "report.json")); err != nil {
t.Fatal(err)
}
if err := h.transition(loaded, "reset", "reset", "test"); err != nil {
t.Fatal(err)
}
if err := h.purge(loaded); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(filepath.Join(root, "sample-run")); !os.IsNotExist(err) {
t.Fatalf("purged run still exists: %v", err)
}
}
func TestRunIsolationAndManifestIdentity_HP_CFG_01(t *testing.T) {
t.Parallel()
h := &harness{root: t.TempDir(), now: time.Now, out: &bytes.Buffer{}}
first, err := h.create("first-run", "integration", "sample")
if err != nil {
t.Fatal(err)
}
second, err := h.create("second-run", "integration", "sample")
if err != nil {
t.Fatal(err)
}
if err := h.purge(first); err != nil {
t.Fatal(err)
}
if _, err := h.load(second.RunID); err != nil {
t.Fatalf("unrelated run was affected: %v", err)
}
manifestPath := h.manifestPath(second.RunID)
data, err := os.ReadFile(manifestPath)
if err != nil {
t.Fatal(err)
}
data = bytes.Replace(data, []byte(`repository_id = 'rvbox'`), []byte(`repository_id = 'other'`), 1)
data = bytes.Replace(data, []byte(`repository_id = "rvbox"`), []byte(`repository_id = "other"`), 1)
if err := os.WriteFile(manifestPath, data, 0o600); err != nil {
t.Fatal(err)
}
if _, err := h.load(second.RunID); err == nil {
t.Fatal("foreign manifest accepted")
}
}
func TestRunIDTraversalAndSymlinkPurgeRejected_HP_CFG_01(t *testing.T) {
t.Parallel()
for _, value := range []string{"", "../escape", "/absolute", "UPPER", strings.Repeat("a", 65)} {
if err := validateRunID(value); err == nil {
t.Errorf("validateRunID(%q) succeeded", value)
}
}
root := t.TempDir()
h := &harness{root: root, now: time.Now, out: &bytes.Buffer{}}
target := t.TempDir()
if err := os.Symlink(target, filepath.Join(root, "linked-run")); err != nil {
t.Fatal(err)
}
if err := h.purge(&manifest{RunID: "linked-run"}); err == nil {
t.Fatal("symlink purge succeeded")
}
}
func TestIntegrationResumeValidation_HP_CFG_01(t *testing.T) {
t.Parallel()
h := &harness{root: t.TempDir(), now: time.Now, out: &bytes.Buffer{}}
if err := h.integration(context.Background(), []string{"--resume", "--suite", "sample"}); err == nil {
t.Fatal("resume without run ID succeeded")
}
if err := h.integration(context.Background(), []string{"--suite", "unknown"}); err == nil {
t.Fatal("unknown suite succeeded")
}
}
func TestBoundedSuiteLogAndFailedRunRecovery_BH_STORE_03(t *testing.T) {
t.Parallel()
capture := &limitedCapture{limit: 4}
if written, err := capture.Write([]byte("123456")); err != nil || written != 6 {
t.Fatalf("Write = (%d, %v)", written, err)
}
if got := string(capture.Bytes()); !strings.HasPrefix(got, "1234\n") || !strings.Contains(got, "truncated") {
t.Fatalf("bounded output = %q", got)
}
h := &harness{root: t.TempDir(), now: time.Now, out: &bytes.Buffer{}}
current, err := h.create("failed-store", "integration", "store")
if err != nil {
t.Fatal(err)
}
if err := h.transition(current, "failed", "store-failed", "injected"); err != nil {
t.Fatal(err)
}
if err := h.environmentCommand("recover", []string{"--run-id", current.RunID}); err != nil {
t.Fatalf("recover failed run: %v", err)
}
loaded, err := h.load(current.RunID)
if err != nil || loaded.Phase != "ready" {
t.Fatalf("recovered run = (%+v, %v)", loaded, err)
}
}
func TestCoverageInventoryReferencesExistingTests_HP_CFG_01(t *testing.T) {
t.Parallel()
if err := validateCoverageInventory(filepath.Join("..", "coverage.toml")); err != nil {
t.Fatalf("validateCoverageInventory(): %v", err)
}
}