Files
ThothII/tools/tht/internal/service/service_test.go
T

71 lines
2.3 KiB
Go

package service
import (
"context"
"io"
"strings"
"testing"
"github.com/aritmolab/thothii/tools/tht/internal/compose"
"github.com/aritmolab/thothii/tools/tht/internal/config"
)
// Catches --build being ignored, which would run stale images after a checkout update.
func TestStartBuildsBeforeStartingAndCheckingHealth(t *testing.T) {
runner := &recordingRunner{}
installation := testInstallation()
if err := Start(context.Background(), installation, runner, true); err != nil {
t.Fatal(err)
}
if got, want := strings.Join(runner.stages, " -> "), "build -> up -> health"; got != want {
t.Fatalf("Start(..., build=true) stages = %q, want %q", got, want)
}
}
// Catches a normal start unnecessarily rebuilding images.
func TestStartSkipsBuildUnlessRequested(t *testing.T) {
runner := &recordingRunner{}
installation := testInstallation()
if err := Start(context.Background(), installation, runner, false); err != nil {
t.Fatal(err)
}
if got, want := strings.Join(runner.stages, " -> "), "up -> health"; got != want {
t.Fatalf("Start(..., build=false) stages = %q, want %q", got, want)
}
}
type recordingRunner struct{ stages []string }
func (r *recordingRunner) Run(_ context.Context, args []string, _ io.Reader) (compose.Result, error) {
joined := strings.Join(args, " ")
switch {
case strings.HasSuffix(joined, " build"):
r.stages = append(r.stages, "build")
case strings.HasSuffix(joined, " up --detach --remove-orphans"):
r.stages = append(r.stages, "up")
case strings.HasSuffix(joined, " ps --all --format json"):
r.stages = append(r.stages, "health")
return compose.Result{Stdout: healthyServices}, nil
}
return compose.Result{}, nil
}
func testInstallation() config.Installation {
return config.Installation{
Path: "/tmp/thothii/deploy/local/thothii-installation.yaml",
Profile: "local",
ProjectDirectory: "/tmp/thothii",
EnvFile: "/tmp/thothii/deploy/local/operator.env",
}
}
const healthyServices = `[
{"Service":"core","State":"running","Health":"healthy"},
{"Service":"frontend","State":"running","Health":"healthy"},
{"Service":"qdrant","State":"running","Health":"healthy"},
{"Service":"embedding","State":"running","Health":"healthy"},
{"Service":"embedding-model-init","State":"exited","ExitCode":0}
]`