Skip to main content
Testereiro - Test Engine Toolkit for Go
GitHub Go Docs Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Providers

Providers are typed resources stored on engines and factories.

Use them to attach external clients or custom resources without global state.

Provider Keys

Create keys with generics:

1
2
var httpClientKey = puppetest.NewProviderKey[http.Client]()
var taggedKey = puppetest.NewTaggedProviderKey[sql.DB]("readonly")

Engine-Level Providers

Set and retrieve from an engine:

1
2
3
4
5
6
7
8
var cfgKey = puppetest.NewProviderKey[MyConfig]()

cfg := &MyConfig{BaseURL: "http://localhost"}
_ = puppetest.SetProvider(engine, cfgKey, cfg, func(ctx context.Context, c *MyConfig) error {
	return nil
})

cfgPtr, ok := puppetest.Provider[MyConfig](engine, cfgKey)

Factory-Level Providers

Factory providers are stored once, then optionally bound to each newly-created engine.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
var factoryProviderKey = puppetest.NewProviderKey[MyProvider]()
var engineProviderKey = puppetest.NewProviderKey[MyProvider]()

err := puppetest.RegisterFactoryProvider(
	factory,
	factoryProviderKey,
	provider,
	func(ctx context.Context, e *puppetest.Engine, v *MyProvider) error {
		return puppetest.SetProvider(e, engineProviderKey, v, nil)
	},
	func(ctx context.Context, v *MyProvider) error {
		return v.Close(ctx)
	},
)

Resolution API

Any type implementing ProviderResolver can use:

1
v, ok := puppetest.ResolveProvider[T](resolver, key)

This is used internally by both engine and factory retrieval helpers.