Help us shape the future of Go! Take the 2026 Go Developer Survey

testing

package
v0.2.50 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 28, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package testing provides helpers for agent composition + lifecycle tests. The goal is to make adding tests to a new agent cheap — one import and a couple of one-line calls, matching the pattern the 13 service agents use (Service with services.Base, Settings with YAML, PluginRegistration shape).

This package is test-only in practice: callers import it from their agent's `composition_test.go`. It deliberately avoids spinning up actual subprocesses, network, or Docker — those belong in each agent's own integration tests.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AssertBaseWired

func AssertBaseWired(t *testing.T, holder BaseHolder)

AssertBaseWired is the canonical composition sanity check. Every service agent should call this in its composition_test.go.

func TestNewService_EmbedsBase(t *testing.T) {
    testing.AssertBaseWired(t, NewService())
}

On failure the test exits immediately with a diagnostic pointing at the field that's nil — common causes are (a) someone forgot to call services.NewServiceBase, (b) the agent type stopped embedding *Base.

func AssertKustomizeTemplates added in v0.2.16

func AssertKustomizeTemplates(t *testing.T, templates fs.FS, parameters any) string

AssertKustomizeTemplates renders a plugin's embedded deployment templates with representative config, secret, image, and plugin parameters. It then validates every emitted YAML document and every local resource referenced by a kustomization. This catches stale template-context fields, unexpanded Go template expressions, malformed YAML, and dangling resource paths without a Kubernetes cluster or external binary.

The returned directory can be used for plugin-specific assertions:

dir := agenttesting.AssertKustomizeTemplates(t, deploymentFS, Parameters{})
manifest, _ := os.ReadFile(filepath.Join(dir, "base", "deployment.yaml"))

func AssertYAMLRoundTrip

func AssertYAMLRoundTrip[S any](t *testing.T, yamlDoc string, check func(t *testing.T, s *S))

AssertYAMLRoundTrip unmarshals a YAML string into a fresh zero-valued settings struct and calls check(settings) for field-level assertions. The check closure gets to run arbitrary expectations without the caller needing to redeclare the Settings type by hand.

testing.AssertYAMLRoundTrip(t, `hot-reload: true`, func(t *testing.T, s *Settings) {
    if !s.HotReload { t.Error("HotReload not populated") }
})

The function is generic so each caller types its own Settings — this avoids leaking agent-specific symbols into this shared package.

func MissingField

func MissingField(field string) string

MissingField builds a Skip message for cases where an agent has intentionally no Settings (e.g. the generic agent). Prefer explicit nil-tolerance over skipping; this is provided only for corner cases where a shared helper doesn't apply.

Types

type BaseHolder

type BaseHolder interface {
	// GetBase returns the underlying services.Base. Most agents embed
	// *Base anonymously, in which case they need a one-line shim:
	//
	//	func (s *Service) GetBase() *services.Base { return s.Base }
	//
	// Zero cost at runtime; provides a stable test-only access point.
	GetBase() *services.Base
}

BaseHolder is the minimal shape every agent's Service satisfies: it embeds or holds a pointer to a services.Base. Composition tests only need to reach into Base to verify wiring.

Agents can satisfy this trivially — their Service already embeds *services.Base, so the interface is auto-implemented by promotion.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL