resourcetest

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2026 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DeploymentMeta = resource.ResourceMeta{
	Group:    "apps",
	Version:  "v1",
	Kind:     "Deployment",
	Label:    "Deployment",
	Category: "Workloads",
}
View Source
var NodeMeta = resource.ResourceMeta{
	Group:    "core",
	Version:  "v1",
	Kind:     "Node",
	Label:    "Node",
	Category: "Cluster",
}
View Source
var PodMeta = resource.ResourceMeta{
	Group:    "core",
	Version:  "v1",
	Kind:     "Pod",
	Label:    "Pod",
	Category: "Workloads",
}
View Source
var SecretMeta = resource.ResourceMeta{
	Group:    "core",
	Version:  "v1",
	Kind:     "Secret",
	Label:    "Secret",
	Category: "Configuration",
}
View Source
var ServiceMeta = resource.ResourceMeta{
	Group:    "core",
	Version:  "v1",
	Kind:     "Service",
	Label:    "Service",
	Category: "Networking",
}

Functions

func NewTestContext

func NewTestContext() context.Context

NewTestContext returns a context.Background with a test Session attached.

func NewTestContextWithConnection

func NewTestContextWithConnection(conn *types.Connection) context.Context

NewTestContextWithConnection returns a context with a Session carrying the given connection.

func NewTestSession

func NewTestSession() *resource.Session

NewTestSession creates a Session with sensible test defaults. The connection ID defaults to "conn-1" and the connection name to "Test".

Types

type FilterableResourcer

type FilterableResourcer[ClientT any] struct {
	StubResourcer[ClientT]
	FilterFieldsFunc  func(ctx context.Context, connectionID string) ([]resource.FilterField, error)
	FilterFieldsCalls atomic.Int32
}

FilterableResourcer embeds StubResourcer and adds FilterableProvider support.

func (*FilterableResourcer[ClientT]) FilterFields

func (f *FilterableResourcer[ClientT]) FilterFields(ctx context.Context, connectionID string) ([]resource.FilterField, error)

type FilterableSearchableResourcer

type FilterableSearchableResourcer[ClientT any] struct {
	StubResourcer[ClientT]
	FilterFieldsFunc  func(ctx context.Context, connectionID string) ([]resource.FilterField, error)
	FilterFieldsCalls atomic.Int32
	SearchFunc        func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, query string, limit int) (*resource.FindResult, error)
	SearchCalls       atomic.Int32
}

FilterableSearchableResourcer embeds StubResourcer and implements both FilterableProvider and TextSearchProvider.

func (*FilterableSearchableResourcer[ClientT]) FilterFields

func (fs *FilterableSearchableResourcer[ClientT]) FilterFields(ctx context.Context, connectionID string) ([]resource.FilterField, error)

func (*FilterableSearchableResourcer[ClientT]) Search

func (fs *FilterableSearchableResourcer[ClientT]) Search(ctx context.Context, client *ClientT, meta resource.ResourceMeta, query string, limit int) (*resource.FindResult, error)

type Option

type Option func(*TestProvider)

Option configures a TestProvider.

func WithGetFunc

func WithGetFunc(fn func(ctx context.Context, key string, input resource.GetInput) (*resource.GetResult, error)) Option

WithGetFunc sets the Get handler.

func WithListFunc

func WithListFunc(fn func(ctx context.Context, key string, input resource.ListInput) (*resource.ListResult, error)) Option

WithListFunc sets the List handler.

func WithListenForEventsFunc

func WithListenForEventsFunc(fn func(ctx context.Context, sink resource.WatchEventSink) error) Option

WithListenForEventsFunc sets the ListenForEvents handler.

func WithLoadConnectionsFunc

func WithLoadConnectionsFunc(fn func(ctx context.Context) ([]types.Connection, error)) Option

WithLoadConnectionsFunc sets the LoadConnections handler.

type RecordingSink

type RecordingSink struct {
	Adds    []resource.WatchAddPayload
	Updates []resource.WatchUpdatePayload
	Deletes []resource.WatchDeletePayload
	States  []resource.WatchStateEvent
	// contains filtered or unexported fields
}

RecordingSink is a thread-safe WatchEventSink that records all events for assertions. Use NewRecordingSink() to create instances.

func NewRecordingSink

func NewRecordingSink() *RecordingSink

NewRecordingSink creates a RecordingSink with its broadcast channel initialized.

func (*RecordingSink) AddCount

func (s *RecordingSink) AddCount() int

AddCount returns the number of add events recorded.

func (*RecordingSink) DeleteCount

func (s *RecordingSink) DeleteCount() int

DeleteCount returns the number of delete events recorded.

func (*RecordingSink) OnAdd

func (*RecordingSink) OnDelete

func (s *RecordingSink) OnDelete(p resource.WatchDeletePayload)

func (*RecordingSink) OnStateChange

func (s *RecordingSink) OnStateChange(e resource.WatchStateEvent)

func (*RecordingSink) OnUpdate

func (s *RecordingSink) OnUpdate(p resource.WatchUpdatePayload)

func (*RecordingSink) Reset

func (s *RecordingSink) Reset()

Reset clears all recorded events and wakes any waiters.

func (*RecordingSink) StateCount

func (s *RecordingSink) StateCount() int

StateCount returns the number of state events recorded.

func (*RecordingSink) UpdateCount

func (s *RecordingSink) UpdateCount() int

UpdateCount returns the number of update events recorded.

func (*RecordingSink) WaitForAdds

func (s *RecordingSink) WaitForAdds(t *testing.T, count int, timeout time.Duration)

WaitForAdds blocks until at least count add events have been recorded, or the timeout expires.

func (*RecordingSink) WaitForDeletes

func (s *RecordingSink) WaitForDeletes(t *testing.T, count int, timeout time.Duration)

WaitForDeletes blocks until at least count delete events have been recorded, or the timeout expires.

func (*RecordingSink) WaitForState

func (s *RecordingSink) WaitForState(t *testing.T, resourceKey string, state resource.WatchState, timeout time.Duration)

WaitForState blocks until a state event matching the given resourceKey and state is recorded.

func (*RecordingSink) WaitForUpdates

func (s *RecordingSink) WaitForUpdates(t *testing.T, count int, timeout time.Duration)

WaitForUpdates blocks until at least count update events have been recorded, or the timeout expires.

type RefreshableConnectionProvider

type RefreshableConnectionProvider[ClientT any] struct {
	StubConnectionProvider[ClientT]
	RefreshClientFunc func(ctx context.Context, client *ClientT) error
	RefreshCalls      atomic.Int32
}

RefreshableConnectionProvider embeds StubConnectionProvider and adds ClientRefresher support.

func (*RefreshableConnectionProvider[ClientT]) RefreshClient

func (r *RefreshableConnectionProvider[ClientT]) RefreshClient(ctx context.Context, client *ClientT) error

type SearchableResourcer

type SearchableResourcer[ClientT any] struct {
	StubResourcer[ClientT]
	SearchFunc  func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, query string, limit int) (*resource.FindResult, error)
	SearchCalls atomic.Int32
}

SearchableResourcer embeds StubResourcer and adds TextSearchProvider support.

func (*SearchableResourcer[ClientT]) Search

func (s *SearchableResourcer[ClientT]) Search(ctx context.Context, client *ClientT, meta resource.ResourceMeta, query string, limit int) (*resource.FindResult, error)

type StubConnectionProvider

type StubConnectionProvider[ClientT any] struct {
	CreateClientFunc    func(ctx context.Context) (*ClientT, error)
	DestroyClientFunc   func(ctx context.Context, client *ClientT) error
	LoadConnectionsFunc func(ctx context.Context) ([]types.Connection, error)
	CheckConnectionFunc func(ctx context.Context, conn *types.Connection, client *ClientT) (types.ConnectionStatus, error)
	GetNamespacesFunc   func(ctx context.Context, client *ClientT) ([]string, error)

	// Call counters for assertions (atomic for concurrent safety).
	CreateClientCalls    atomic.Int32
	DestroyClientCalls   atomic.Int32
	CheckConnectionCalls atomic.Int32
}

StubConnectionProvider is a configurable test double for ConnectionProvider[ClientT]. Every method checks for a non-nil function field first, then falls back to a sensible default.

func (*StubConnectionProvider[ClientT]) CheckConnection

func (s *StubConnectionProvider[ClientT]) CheckConnection(ctx context.Context, conn *types.Connection, client *ClientT) (types.ConnectionStatus, error)

func (*StubConnectionProvider[ClientT]) CreateClient

func (s *StubConnectionProvider[ClientT]) CreateClient(ctx context.Context) (*ClientT, error)

func (*StubConnectionProvider[ClientT]) DestroyClient

func (s *StubConnectionProvider[ClientT]) DestroyClient(ctx context.Context, client *ClientT) error

func (*StubConnectionProvider[ClientT]) GetNamespaces

func (s *StubConnectionProvider[ClientT]) GetNamespaces(ctx context.Context, client *ClientT) ([]string, error)

func (*StubConnectionProvider[ClientT]) LoadConnections

func (s *StubConnectionProvider[ClientT]) LoadConnections(ctx context.Context) ([]types.Connection, error)

type StubResourcer

type StubResourcer[ClientT any] struct {
	GetFunc    func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.GetInput) (*resource.GetResult, error)
	ListFunc   func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.ListInput) (*resource.ListResult, error)
	FindFunc   func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.FindInput) (*resource.FindResult, error)
	CreateFunc func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.CreateInput) (*resource.CreateResult, error)
	UpdateFunc func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.UpdateInput) (*resource.UpdateResult, error)
	DeleteFunc func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.DeleteInput) (*resource.DeleteResult, error)

	GetCalls, ListCalls, FindCalls, CreateCalls, UpdateCalls, DeleteCalls atomic.Int32
}

StubResourcer is a configurable test double for Resourcer[ClientT]. Every method checks for a non-nil function field first, then falls back to returning nil, nil.

func (*StubResourcer[ClientT]) Create

func (s *StubResourcer[ClientT]) Create(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.CreateInput) (*resource.CreateResult, error)

func (*StubResourcer[ClientT]) Delete

func (s *StubResourcer[ClientT]) Delete(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.DeleteInput) (*resource.DeleteResult, error)

func (*StubResourcer[ClientT]) Find

func (s *StubResourcer[ClientT]) Find(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.FindInput) (*resource.FindResult, error)

func (*StubResourcer[ClientT]) Get

func (s *StubResourcer[ClientT]) Get(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.GetInput) (*resource.GetResult, error)

func (*StubResourcer[ClientT]) List

func (s *StubResourcer[ClientT]) List(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.ListInput) (*resource.ListResult, error)

func (*StubResourcer[ClientT]) Update

func (s *StubResourcer[ClientT]) Update(ctx context.Context, client *ClientT, meta resource.ResourceMeta, input resource.UpdateInput) (*resource.UpdateResult, error)

type TestProvider

type TestProvider struct {

	// Operation handlers. Default: return success with empty JSON.
	GetFunc    func(ctx context.Context, key string, input resource.GetInput) (*resource.GetResult, error)
	ListFunc   func(ctx context.Context, key string, input resource.ListInput) (*resource.ListResult, error)
	FindFunc   func(ctx context.Context, key string, input resource.FindInput) (*resource.FindResult, error)
	CreateFunc func(ctx context.Context, key string, input resource.CreateInput) (*resource.CreateResult, error)
	UpdateFunc func(ctx context.Context, key string, input resource.UpdateInput) (*resource.UpdateResult, error)
	DeleteFunc func(ctx context.Context, key string, input resource.DeleteInput) (*resource.DeleteResult, error)

	// Connection handlers.
	StartConnectionFunc  func(ctx context.Context, id string) (types.ConnectionStatus, error)
	StopConnectionFunc   func(ctx context.Context, id string) (types.Connection, error)
	CheckConnectionFunc  func(ctx context.Context, id string) (types.ConnectionStatus, error)
	LoadConnectionsFunc  func(ctx context.Context) ([]types.Connection, error)
	ListConnectionsFunc  func(ctx context.Context) ([]types.Connection, error)
	GetConnectionFunc    func(ctx context.Context, id string) (types.Connection, error)
	GetConnectionNSFunc  func(ctx context.Context, id string) ([]string, error)
	UpdateConnectionFunc func(ctx context.Context, conn types.Connection) (types.Connection, error)
	DeleteConnectionFunc func(ctx context.Context, id string) error
	WatchConnectionsFunc func(ctx context.Context, stream chan<- []types.Connection) error

	// Watch handlers.
	StartConnectionWatchFunc   func(ctx context.Context, connID string) error
	StopConnectionWatchFunc    func(ctx context.Context, connID string) error
	HasWatchFunc               func(ctx context.Context, connID string) bool
	GetWatchStateFunc          func(ctx context.Context, connID string) (*resource.WatchConnectionSummary, error)
	ListenForEventsFunc        func(ctx context.Context, sink resource.WatchEventSink) error
	EnsureResourceWatchFunc    func(ctx context.Context, connID, key string) error
	StopResourceWatchFunc      func(ctx context.Context, connID, key string) error
	RestartResourceWatchFunc   func(ctx context.Context, connID, key string) error
	IsResourceWatchRunningFunc func(ctx context.Context, connID, key string) (bool, error)

	// Type handlers.
	GetResourceGroupsFunc       func(ctx context.Context, connID string) map[string]resource.ResourceGroup
	GetResourceGroupFunc        func(ctx context.Context, id string) (resource.ResourceGroup, error)
	GetResourceTypesFunc        func(ctx context.Context, connID string) map[string]resource.ResourceMeta
	GetResourceTypeFunc         func(ctx context.Context, id string) (*resource.ResourceMeta, error)
	HasResourceTypeFunc         func(ctx context.Context, id string) bool
	GetResourceDefinitionFunc   func(ctx context.Context, id string) (resource.ResourceDefinition, error)
	GetResourceCapabilitiesFunc func(ctx context.Context, key string) (*resource.ResourceCapabilities, error)
	GetResourceSchemaFunc       func(ctx context.Context, connID, key string) (json.RawMessage, error)
	GetFilterFieldsFunc         func(ctx context.Context, connID, key string) ([]resource.FilterField, error)

	// Action handlers.
	GetActionsFunc    func(ctx context.Context, key string) ([]resource.ActionDescriptor, error)
	ExecuteActionFunc func(ctx context.Context, key, actionID string, input resource.ActionInput) (*resource.ActionResult, error)
	StreamActionFunc  func(ctx context.Context, key, actionID string, input resource.ActionInput, stream chan<- resource.ActionEvent) error

	// Editor schema handler.
	GetEditorSchemasFunc func(ctx context.Context, connID string) ([]resource.EditorSchema, error)

	// Relationship handlers.
	GetRelationshipsFunc     func(ctx context.Context, key string) ([]resource.RelationshipDescriptor, error)
	ResolveRelationshipsFunc func(ctx context.Context, connID, key, id, ns string) ([]resource.ResolvedRelationship, error)

	// Health handlers.
	GetHealthFunc         func(ctx context.Context, connID, key string, data json.RawMessage) (*resource.ResourceHealth, error)
	GetResourceEventsFunc func(ctx context.Context, connID, key, id, ns string, limit int32) ([]resource.ResourceEvent, error)
	// contains filtered or unexported fields
}

TestProvider is a configurable in-process Provider for integration tests. It implements the full Provider interface without gRPC or process spawning.

func NewTestProvider

func NewTestProvider(t *testing.T, opts ...Option) *TestProvider

NewTestProvider creates a TestProvider with sensible defaults. Options can override any handler.

func (*TestProvider) CheckConnection added in v0.2.1

func (p *TestProvider) CheckConnection(ctx context.Context, id string) (types.ConnectionStatus, error)

func (*TestProvider) Create

func (*TestProvider) Delete

func (*TestProvider) DeleteConnection

func (p *TestProvider) DeleteConnection(ctx context.Context, id string) error

func (*TestProvider) EnsureResourceWatch

func (p *TestProvider) EnsureResourceWatch(ctx context.Context, connID string, key string) error

func (*TestProvider) ExecuteAction

func (p *TestProvider) ExecuteAction(ctx context.Context, key string, actionID string, input resource.ActionInput) (*resource.ActionResult, error)

func (*TestProvider) Find

func (*TestProvider) Get

func (*TestProvider) GetActions

func (p *TestProvider) GetActions(ctx context.Context, key string) ([]resource.ActionDescriptor, error)

func (*TestProvider) GetConnection

func (p *TestProvider) GetConnection(ctx context.Context, id string) (types.Connection, error)

func (*TestProvider) GetConnectionNamespaces

func (p *TestProvider) GetConnectionNamespaces(ctx context.Context, id string) ([]string, error)

func (*TestProvider) GetEditorSchemas

func (p *TestProvider) GetEditorSchemas(ctx context.Context, connID string) ([]resource.EditorSchema, error)

func (*TestProvider) GetFilterFields

func (p *TestProvider) GetFilterFields(ctx context.Context, connID string, key string) ([]resource.FilterField, error)

func (*TestProvider) GetHealth

func (p *TestProvider) GetHealth(ctx context.Context, connID string, key string, data json.RawMessage) (*resource.ResourceHealth, error)

func (*TestProvider) GetRelationships

func (p *TestProvider) GetRelationships(ctx context.Context, key string) ([]resource.RelationshipDescriptor, error)

func (*TestProvider) GetResourceCapabilities

func (p *TestProvider) GetResourceCapabilities(ctx context.Context, key string) (*resource.ResourceCapabilities, error)

func (*TestProvider) GetResourceDefinition

func (p *TestProvider) GetResourceDefinition(ctx context.Context, id string) (resource.ResourceDefinition, error)

func (*TestProvider) GetResourceEvents

func (p *TestProvider) GetResourceEvents(ctx context.Context, connID string, key string, id string, ns string, limit int32) ([]resource.ResourceEvent, error)

func (*TestProvider) GetResourceGroup

func (p *TestProvider) GetResourceGroup(ctx context.Context, id string) (resource.ResourceGroup, error)

func (*TestProvider) GetResourceGroups

func (p *TestProvider) GetResourceGroups(ctx context.Context, connID string) map[string]resource.ResourceGroup

func (*TestProvider) GetResourceSchema

func (p *TestProvider) GetResourceSchema(ctx context.Context, connID string, key string) (json.RawMessage, error)

func (*TestProvider) GetResourceType

func (p *TestProvider) GetResourceType(ctx context.Context, id string) (*resource.ResourceMeta, error)

func (*TestProvider) GetResourceTypes

func (p *TestProvider) GetResourceTypes(ctx context.Context, connID string) map[string]resource.ResourceMeta

func (*TestProvider) GetWatchState

func (p *TestProvider) GetWatchState(ctx context.Context, connID string) (*resource.WatchConnectionSummary, error)

func (*TestProvider) HasResourceType

func (p *TestProvider) HasResourceType(ctx context.Context, id string) bool

func (*TestProvider) HasWatch

func (p *TestProvider) HasWatch(ctx context.Context, connID string) bool

func (*TestProvider) IsResourceWatchRunning

func (p *TestProvider) IsResourceWatchRunning(ctx context.Context, connID string, key string) (bool, error)

func (*TestProvider) List

func (*TestProvider) ListConnections

func (p *TestProvider) ListConnections(ctx context.Context) ([]types.Connection, error)

func (*TestProvider) ListenForEvents

func (p *TestProvider) ListenForEvents(ctx context.Context, sink resource.WatchEventSink) error

func (*TestProvider) LoadConnections

func (p *TestProvider) LoadConnections(ctx context.Context) ([]types.Connection, error)

func (*TestProvider) ResolveRelationships

func (p *TestProvider) ResolveRelationships(ctx context.Context, connID string, key string, id string, ns string) ([]resource.ResolvedRelationship, error)

func (*TestProvider) RestartResourceWatch

func (p *TestProvider) RestartResourceWatch(ctx context.Context, connID string, key string) error

func (*TestProvider) StartConnection

func (p *TestProvider) StartConnection(ctx context.Context, id string) (types.ConnectionStatus, error)

func (*TestProvider) StartConnectionWatch

func (p *TestProvider) StartConnectionWatch(ctx context.Context, connID string) error

func (*TestProvider) StopConnection

func (p *TestProvider) StopConnection(ctx context.Context, id string) (types.Connection, error)

func (*TestProvider) StopConnectionWatch

func (p *TestProvider) StopConnectionWatch(ctx context.Context, connID string) error

func (*TestProvider) StopResourceWatch

func (p *TestProvider) StopResourceWatch(ctx context.Context, connID string, key string) error

func (*TestProvider) StreamAction

func (p *TestProvider) StreamAction(ctx context.Context, key string, actionID string, input resource.ActionInput, stream chan<- resource.ActionEvent) error

func (*TestProvider) Update

func (*TestProvider) UpdateConnection

func (p *TestProvider) UpdateConnection(ctx context.Context, conn types.Connection) (types.Connection, error)

func (*TestProvider) WatchConnections

func (p *TestProvider) WatchConnections(ctx context.Context, stream chan<- []types.Connection) error

type WatchableResourcer

type WatchableResourcer[ClientT any] struct {
	StubResourcer[ClientT]
	WatchFunc     func(ctx context.Context, client *ClientT, meta resource.ResourceMeta, sink resource.WatchEventSink) error
	PolicyVal     *resource.SyncPolicy
	DefinitionVal *resource.ResourceDefinition
}

WatchableResourcer embeds StubResourcer and adds Watcher[ClientT] support. Optionally implements SyncPolicyDeclarer and DefinitionProvider.

func (*WatchableResourcer[ClientT]) Definition

func (w *WatchableResourcer[ClientT]) Definition() resource.ResourceDefinition

func (*WatchableResourcer[ClientT]) SyncPolicy

func (w *WatchableResourcer[ClientT]) SyncPolicy() resource.SyncPolicy

func (*WatchableResourcer[ClientT]) Watch

func (w *WatchableResourcer[ClientT]) Watch(ctx context.Context, client *ClientT, meta resource.ResourceMeta, sink resource.WatchEventSink) error

type WatchingConnectionProvider

type WatchingConnectionProvider[ClientT any] struct {
	StubConnectionProvider[ClientT]
	WatchConnectionsFunc func(ctx context.Context) (<-chan []types.Connection, error)
}

WatchingConnectionProvider embeds StubConnectionProvider and adds ConnectionWatcher support.

func (*WatchingConnectionProvider[ClientT]) WatchConnections

func (w *WatchingConnectionProvider[ClientT]) WatchConnections(ctx context.Context) (<-chan []types.Connection, error)

Jump to

Keyboard shortcuts

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