/
audit_trail_integration_test.go
95 lines (74 loc) · 2.5 KB
/
audit_trail_integration_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//go:build integration
// +build integration
package tfe
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestAuditTrailsList(t *testing.T) {
skipIfEnterprise(t)
userClient := testClient(t)
ctx := context.Background()
org, orgCleanup := createOrganization(t, userClient)
t.Cleanup(orgCleanup)
auditTrailClient := testAuditTrailClient(t, userClient, org)
// First let's generate some audit events in this test organization
_, wkspace1Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace1Cleanup)
_, wkspace2Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace2Cleanup)
t.Run("with no specified timeframe", func(t *testing.T) {
atl, err := auditTrailClient.AuditTrails.List(ctx, nil)
require.NoError(t, err)
require.Greater(t, len(atl.Items), 0)
log := atl.Items[0]
assert.NotEmpty(t, log.ID)
assert.NotEmpty(t, log.Timestamp)
assert.NotEmpty(t, log.Type)
assert.NotEmpty(t, log.Version)
assert.NotNil(t, log.Resource)
assert.NotNil(t, log.Auth)
assert.NotNil(t, log.Request)
t.Run("with resource deserialized correctly", func(t *testing.T) {
assert.NotEmpty(t, log.Resource.ID)
assert.NotEmpty(t, log.Resource.Type)
assert.NotEmpty(t, log.Resource.Action)
// we don't test against log.Resource.Meta since we don't know the nature
// of the audit trail log we're testing against as it can be nil or contain a k-v map
})
t.Run("with auth deserialized correctly", func(t *testing.T) {
assert.NotEmpty(t, log.Auth.AccessorID)
assert.NotEmpty(t, log.Auth.Description)
assert.NotEmpty(t, log.Auth.Type)
assert.NotEmpty(t, log.Auth.OrganizationID)
})
t.Run("with request deserialized correctly", func(t *testing.T) {
assert.NotEmpty(t, log.Request.ID)
})
})
t.Run("using since query param", func(t *testing.T) {
since := time.Now()
// Wait some time before creating the event
// otherwise comparing time values can be flaky
time.Sleep(1 * time.Second)
// Let's create an event that is sent to the audit log
_, wsCleanup := createWorkspace(t, userClient, org)
t.Cleanup(wsCleanup)
atl, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
Since: since,
ListOptions: &ListOptions{
PageNumber: 1,
PageSize: 20,
},
})
require.NoError(t, err)
assert.LessOrEqual(t, len(atl.Items), 20)
assert.Greater(t, len(atl.Items), 0)
for _, log := range atl.Items {
assert.True(t, log.Timestamp.After(since))
}
})
}