You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/cmd/base/event_flags_test.go

214 lines
5.7 KiB

package base
import (
"testing"
"github.com/hashicorp/boundary/internal/observability/event"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestEventFlags_Validate(t *testing.T) {
tests := []struct {
name string
flags EventFlags
wantErr bool
wantErrContains string
wantErrIs error
}{
{
name: "valid-JsonFormat",
flags: EventFlags{
Format: event.JSONSinkFormat,
},
},
{
name: "valid-TextFormat",
flags: EventFlags{
Format: event.TextSinkFormat,
},
},
{
name: "empty",
flags: EventFlags{},
wantErr: true,
wantErrContains: "not a valid sink format",
wantErrIs: event.ErrInvalidParameter,
},
{
name: "invalid-format",
flags: EventFlags{
Format: "invalid-format",
},
wantErr: true,
wantErrContains: "not a valid sink format",
wantErrIs: event.ErrInvalidParameter,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
err := tt.flags.Validate()
if tt.wantErr {
require.Error(err)
if tt.wantErrIs != nil {
assert.ErrorIs(err, tt.wantErrIs)
}
if tt.wantErrContains != "" {
assert.Contains(err.Error(), tt.wantErrContains)
}
return
}
require.NoError(err)
})
}
}
func Test_NewEventFlags(t *testing.T) {
setTrue := true
setFalse := false
tests := []struct {
name string
defaultFormat event.SinkFormat
composedOf ComposedOfEventArgs
wantFlags *EventFlags
wantErr bool
wantErrIs error
wantErrContains string
}{
{
name: "missing-default-format",
wantErr: true,
wantErrContains: "missing default sink format",
},
{
name: "invalid-default-format",
defaultFormat: "invalid-format",
wantErr: true,
wantErrIs: event.ErrInvalidParameter,
wantErrContains: "'invalid-format' is not a valid sink format",
},
{
name: "defaults",
defaultFormat: "cloudevents-json",
wantFlags: &EventFlags{
Format: "cloudevents-json",
},
},
{
name: "override-format",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-text"},
wantFlags: &EventFlags{
Format: "cloudevents-text",
},
},
{
name: "observations-true",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Observations: "true"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
ObservationsEnabled: &setTrue,
},
},
{
name: "observations-false",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Observations: "false"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
ObservationsEnabled: &setFalse,
},
},
{
name: "audit-true",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Audit: "true"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
AuditEnabled: &setTrue,
},
},
{
name: "audit-false",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Audit: "false"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
AuditEnabled: &setFalse,
},
},
{
name: "sysevents-true",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", SysEvents: "true"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
SysEventsEnabled: &setTrue,
},
},
{
name: "sysevents-false",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", SysEvents: "false"},
wantFlags: &EventFlags{
Format: "cloudevents-json",
SysEventsEnabled: &setFalse,
},
},
{
name: "valid-allow",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Allow: []string{`"/Data/Header/status" == 401`}},
wantFlags: &EventFlags{
Format: "cloudevents-json",
AllowFilters: []string{`"/Data/Header/status" == 401`},
},
},
{
name: "invalid-allow",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Allow: []string{`"/Data/Header/status" $$== 401`}},
wantErr: true,
wantErrContains: "invalid allow filter",
},
{
name: "valid-deny",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Deny: []string{`"/Data/Header/status" == 401`}},
wantFlags: &EventFlags{
Format: "cloudevents-json",
DenyFilters: []string{`"/Data/Header/status" == 401`},
},
},
{
name: "invalid-deny",
defaultFormat: "cloudevents-json",
composedOf: ComposedOfEventArgs{Format: "cloudevents-json", Deny: []string{`"/Data/Header/status" $$== 401`}},
wantErr: true,
wantErrContains: "invalid deny filter",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
got, err := NewEventFlags(tt.defaultFormat, tt.composedOf)
if tt.wantErr {
require.Error(err)
assert.Nil(got)
if tt.wantErrIs != nil {
assert.ErrorIs(err, tt.wantErrIs)
}
if tt.wantErrContains != "" {
assert.Contains(err.Error(), tt.wantErrContains)
}
return
}
require.NoError(err)
assert.NotNil(got)
assert.Equal(tt.wantFlags, got)
})
}
}