Files
threshold/internal/event/event_audit_test.go
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

298 lines
6.4 KiB
Go
Raw Normal View History

2023-02-02 17:15:17 -08:00
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
2021-06-06 07:57:24 -04:00
package event
import (
"testing"
"time"
"github.com/hashicorp/eventlogger"
2024-04-06 13:48:47 -07:00
"github.com/hashicorp/go-uuid"
2021-06-06 07:57:24 -04:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_newAudit(t *testing.T) {
t.Parallel()
testNow := time.Now()
2024-04-06 13:48:47 -07:00
corId, err := uuid.GenerateUUID()
require.NoError(t, err)
2021-06-06 07:57:24 -04:00
tests := []struct {
2021-06-22 16:23:27 -05:00
name string
fromOp Op
opts []Option
want *audit
wantErrIs error
2021-06-06 07:57:24 -04:00
}{
{
2021-06-22 16:23:27 -05:00
name: "missing-op",
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
},
{
name: "valid-no-opts",
fromOp: "valid-no-opts",
want: &audit{
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
},
},
{
name: "all-opts",
fromOp: "all-opts",
opts: []Option{
WithId("all-opts"),
WithNow(testNow),
WithRequestInfo(TestRequestInfo(t)),
WithAuth(testAuth(t)),
WithRequest(testRequest(t)),
WithResponse(testResponse(t)),
WithFlush(),
2024-04-06 13:48:47 -07:00
withCorrelationId(corId),
2021-06-06 07:57:24 -04:00
},
want: &audit{
2024-04-06 13:48:47 -07:00
Id: "all-opts",
Version: auditVersion,
Type: string(ApiRequest),
Timestamp: testNow,
RequestInfo: TestRequestInfo(t),
Auth: testAuth(t),
Request: testRequest(t),
Response: testResponse(t),
Flush: true,
CorrelationId: corId,
2021-06-06 07:57:24 -04:00
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
got, err := newAudit(tt.fromOp, tt.opts...)
2021-06-22 16:23:27 -05:00
if tt.wantErrIs != nil {
2021-06-06 07:57:24 -04:00
require.Error(err)
assert.Nil(got)
2021-06-22 16:23:27 -05:00
assert.ErrorIs(err, tt.wantErrIs)
2021-06-06 07:57:24 -04:00
return
}
require.NoError(err)
require.NotNil(got)
opts := getOpts(tt.opts...)
if opts.withId == "" {
tt.want.Id = got.Id
}
if opts.withNow.IsZero() {
tt.want.Timestamp = got.Timestamp
}
assert.Equal(tt.want, got)
})
}
}
func TestAudit_validate(t *testing.T) {
t.Parallel()
tests := []struct {
name string
id string
2021-06-22 16:23:27 -05:00
wantErrIs error
2021-06-06 07:57:24 -04:00
wantErrContains string
}{
{
name: "missing-id",
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "missing id",
},
{
name: "valid",
id: "valid",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
a := audit{Id: tt.id}
err := a.validate()
2021-06-22 16:23:27 -05:00
if tt.wantErrIs != nil {
2021-06-06 07:57:24 -04:00
require.Error(err)
2021-06-22 16:23:27 -05:00
assert.ErrorIs(err, tt.wantErrIs)
2021-06-06 07:57:24 -04:00
if tt.wantErrContains != "" {
assert.Contains(err.Error(), tt.wantErrContains)
}
return
}
assert.NoError(err)
})
}
}
func TestAudit_EventType(t *testing.T) {
t.Parallel()
a := &audit{}
assert.Equal(t, string(AuditType), a.EventType())
}
func TestAudit_GetID(t *testing.T) {
t.Parallel()
a := &audit{Id: "test"}
assert.Equal(t, "test", a.GetID())
}
func TestAudit_FlushEvent(t *testing.T) {
t.Parallel()
a := &audit{Flush: true}
assert.True(t, a.FlushEvent())
a.Flush = false
assert.False(t, a.FlushEvent())
}
func TestAudit_ComposeFrom(t *testing.T) {
t.Parallel()
2024-04-06 13:48:47 -07:00
corId, err := uuid.GenerateUUID()
require.NoError(t, err)
2021-06-06 07:57:24 -04:00
testNow := time.Now()
tests := []struct {
name string
events []*eventlogger.Event
want audit
2021-06-22 16:23:27 -05:00
wantErrIs error
2021-06-06 07:57:24 -04:00
wantErrContains string
}{
{
name: "missing-events",
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "missing events",
},
{
name: "not-an-audit",
events: []*eventlogger.Event{{
Payload: struct{}{},
}},
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "not an audit payload",
},
{
name: "invalid-type",
events: []*eventlogger.Event{
{
Payload: &audit{
Id: "test-id",
Version: auditVersion,
Type: "invalid-type",
},
},
},
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "invalid type",
},
{
name: "invalid-version",
events: []*eventlogger.Event{
{
Payload: &audit{
Id: "test-id",
Version: "invalid-version",
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
},
},
},
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "invalid version",
},
{
name: "invalid-id",
events: []*eventlogger.Event{
{
Payload: &audit{
Id: "invalid-id",
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
},
},
{
Payload: &audit{
Id: "bad-id",
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
},
},
},
2021-06-22 16:23:27 -05:00
wantErrIs: ErrInvalidParameter,
2021-06-06 07:57:24 -04:00
wantErrContains: "invalid id",
},
{
name: "valid",
events: []*eventlogger.Event{
{
Payload: &audit{
Id: "valid",
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
Timestamp: testNow,
Auth: testAuth(t),
RequestInfo: TestRequestInfo(t),
},
},
{
Payload: &audit{
Id: "valid",
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
Timestamp: testNow,
Request: testRequest(t),
},
},
2024-04-06 13:48:47 -07:00
{
Payload: &audit{
Id: "valid",
Version: auditVersion,
Type: string(ApiRequest),
Timestamp: testNow,
CorrelationId: corId,
},
},
2021-06-06 07:57:24 -04:00
{
Payload: &audit{
Id: "valid",
Version: auditVersion,
2021-07-08 15:50:25 -04:00
Type: string(ApiRequest),
2021-06-06 07:57:24 -04:00
Timestamp: testNow,
Response: testResponse(t),
},
},
},
want: audit{
2024-04-06 13:48:47 -07:00
Id: "valid",
Version: auditVersion,
Type: string(ApiRequest),
Timestamp: testNow,
Auth: testAuth(t),
Request: testRequest(t),
Response: testResponse(t),
RequestInfo: TestRequestInfo(t),
CorrelationId: corId,
2021-06-06 07:57:24 -04:00
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
a := &audit{}
gotType, gotAudit, err := a.ComposeFrom(tt.events)
2021-06-22 16:23:27 -05:00
if tt.wantErrIs != nil {
2021-06-06 07:57:24 -04:00
require.Error(err)
assert.Nil(gotAudit)
2021-06-22 16:23:27 -05:00
assert.ErrorIs(err, tt.wantErrIs)
2021-06-06 07:57:24 -04:00
if tt.wantErrContains != "" {
assert.Contains(err.Error(), tt.wantErrContains)
}
return
}
require.NoError(err)
require.NotNil(gotAudit)
assert.Equal(eventlogger.EventType(a.EventType()), gotType)
tt.want.Timestamp = gotAudit.(audit).Timestamp
assert.Equal(tt.want, gotAudit)
})
}
}