actions-runner-controller/controllers/actions.github.com/multiclient/fake/multi_client.go

54 lines
1.4 KiB
Go

package fake
import (
"context"
"github.com/actions/actions-runner-controller/controllers/actions.github.com/multiclient"
)
// MultiClientOption is a functional option for configuring a fake MultiClient
type MultiClientOption func(*MultiClient)
// WithClient configures the client that GetClientFor will return
func WithClient(c multiclient.Client) MultiClientOption {
return func(mc *MultiClient) {
mc.client = c
}
}
// WithGetClientForError configures an error that GetClientFor will return
func WithGetClientForError(err error) MultiClientOption {
return func(mc *MultiClient) {
mc.getClientForErr = err
}
}
// MultiClient implements multiclient.MultiClient interface for testing
type MultiClient struct {
client multiclient.Client
getClientForErr error
}
// Compile-time interface check
var _ multiclient.MultiClient = (*MultiClient)(nil)
// NewMultiClient creates a new fake MultiClient with the given options
func NewMultiClient(opts ...MultiClientOption) *MultiClient {
mc := &MultiClient{}
for _, opt := range opts {
opt(mc)
}
// Default behavior: if no client configured, return a default NewClient()
if mc.client == nil {
mc.client = NewClient()
}
return mc
}
func (mc *MultiClient) GetClientFor(ctx context.Context, opts *multiclient.ClientForOptions) (multiclient.Client, error) {
if mc.getClientForErr != nil {
return nil, mc.getClientForErr
}
return mc.client, nil
}