Files
threshold/internal/session/options.go
T
Timothy Messier 4de6464978 refact(session): Make CloseDeadConnectionsForWorker more testable
The query for CloseDeadConnectionsForWorker includes a time comparison
to exclude results that are too close to the current time. This is done
to account for a delay in reporting by the worker. However, since the
delay was hardcoded in the query, it made it difficult to test.

This moves the delay duration into a parameter that is set on the
repository. The amount of the delay can be set at repository creation
time using the new WithWorkerStateDelay option. This defaults to the
previously hardcoded amount.

This will allow tests to control the delay to exercise this
functionality fully.
2022-03-15 12:11:31 -04:00

124 lines
3.0 KiB
Go

package session
import (
"time"
"github.com/hashicorp/boundary/internal/db"
"github.com/hashicorp/boundary/internal/db/timestamp"
)
// getOpts - iterate the inbound Options and return a struct
func getOpts(opt ...Option) options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
// Option - how Options are passed as arguments
type Option func(*options)
// options = how options are represented
type options struct {
withLimit int
withOrderByCreateTime db.OrderBy
withScopeIds []string
withUserId string
withExpirationTime *timestamp.Timestamp
withTestTofu []byte
withListingConvert bool
withSessionIds []string
withServerId string
withDbOpts []db.Option
withWorkerStateDelay time.Duration
}
func getDefaultOptions() options {
return options{
withWorkerStateDelay: 10 * time.Second,
}
}
// WithLimit provides an option to provide a limit. Intentionally allowing
// negative integers. If WithLimit < 0, then unlimited results are returned. If
// WithLimit == 0, then default limits are used for results.
func WithLimit(limit int) Option {
return func(o *options) {
o.withLimit = limit
}
}
// WithOrderByCreateTime provides an option to specify ordering by the
// CreateTime field.
func WithOrderByCreateTime(orderBy db.OrderBy) Option {
return func(o *options) {
o.withOrderByCreateTime = orderBy
}
}
// WithScopeIds allows specifying a scope ID criteria for the function.
func WithScopeIds(scopeIds []string) Option {
return func(o *options) {
o.withScopeIds = scopeIds
}
}
// WithUserId allows specifying a user ID criteria for the function.
func WithUserId(userId string) Option {
return func(o *options) {
o.withUserId = userId
}
}
// WithExpirationTime allows specifying an expiration time for the session
func WithExpirationTime(exp *timestamp.Timestamp) Option {
return func(o *options) {
o.withExpirationTime = exp
}
}
// WithTestTofu allows specifying a test tofu for a test session
func WithTestTofu(tofu []byte) Option {
return func(o *options) {
o.withTestTofu = tofu
}
}
// WithSessionIds allows the specification of the session ids to use for the
// operation.
func WithSessionIds(ids ...string) Option {
return func(o *options) {
o.withSessionIds = ids
}
}
func withListingConvert(withListingConvert bool) Option {
return func(o *options) {
o.withListingConvert = withListingConvert
}
}
// WithServerId allows the specification of the server id to use for the
// operation.
func WithServerId(id string) Option {
return func(o *options) {
o.withServerId = id
}
}
// WithDbOpts passes through given DB options to the DB layer
func WithDbOpts(opts ...db.Option) Option {
return func(o *options) {
o.withDbOpts = opts
}
}
// WithWorkerStateDelay is used byt queries to account for a delay in state
// propagation between worker and controller.
func WithWorkerStateDelay(d time.Duration) Option {
return func(o *options) {
o.withWorkerStateDelay = d
}
}