- Notifications
You must be signed in to change notification settings - Fork928
chore(coderd): add MockAuditor.Contains test helper#10421
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -3,6 +3,10 @@ package audit | ||
import ( | ||
"context" | ||
"sync" | ||
"testing" | ||
"github.com/google/uuid" | ||
"golang.org/x/exp/slices" | ||
"github.com/coder/coder/v2/coderd/database" | ||
) | ||
@@ -68,3 +72,76 @@ func (a *MockAuditor) Export(_ context.Context, alog database.AuditLog) error { | ||
func (*MockAuditor) diff(any, any) Map { | ||
return Map{} | ||
} | ||
// Contains returns true if, for each non-zero-valued field in expected, | ||
// there exists a corresponding audit log in the mock auditor that matches | ||
// the expected values. Returns false otherwise. | ||
func (a *MockAuditor) Contains(t testing.TB, expected database.AuditLog) bool { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Might be useful to be able to require multiple log entries and thus, also that the order is correct? Just a thought, feel free to disregard if it's premature. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. We could assert relative ordering perhaps, but asserting absolute ordering would likely run into the same kinds of issues we saw in#10396. | ||
a.mutex.Lock() | ||
defer a.mutex.Unlock() | ||
for idx, al := range a.auditLogs { | ||
if expected.ID != uuid.Nil && al.ID != expected.ID { | ||
t.Logf("audit log %d: expected ID %s, got %s", idx+1, expected.ID, al.ID) | ||
continue | ||
} | ||
if !expected.Time.IsZero() && expected.Time != al.Time { | ||
t.Logf("audit log %d: expected Time %s, got %s", idx+1, expected.Time, al.Time) | ||
continue | ||
} | ||
if expected.UserID != uuid.Nil && al.UserID != expected.UserID { | ||
t.Logf("audit log %d: expected UserID %s, got %s", idx+1, expected.UserID, al.UserID) | ||
continue | ||
} | ||
if expected.OrganizationID != uuid.Nil && al.UserID != expected.UserID { | ||
t.Logf("audit log %d: expected OrganizationID %s, got %s", idx+1, expected.OrganizationID, al.OrganizationID) | ||
continue | ||
} | ||
if expected.Ip.Valid && al.Ip.IPNet.String() != expected.Ip.IPNet.String() { | ||
t.Logf("audit log %d: expected Ip %s, got %s", idx+1, expected.Ip.IPNet, al.Ip.IPNet) | ||
continue | ||
} | ||
if expected.UserAgent.Valid && al.UserAgent.String != expected.UserAgent.String { | ||
t.Logf("audit log %d: expected UserAgent %s, got %s", idx+1, expected.UserAgent.String, al.UserAgent.String) | ||
continue | ||
} | ||
if expected.ResourceType != "" && expected.ResourceType != al.ResourceType { | ||
t.Logf("audit log %d: expected ResourceType %s, got %s", idx+1, expected.ResourceType, al.ResourceType) | ||
continue | ||
} | ||
if expected.ResourceID != uuid.Nil && expected.ResourceID != al.ResourceID { | ||
t.Logf("audit log %d: expected ResourceID %s, got %s", idx+1, expected.ResourceID, al.ResourceID) | ||
continue | ||
} | ||
if expected.ResourceTarget != "" && expected.ResourceTarget != al.ResourceTarget { | ||
t.Logf("audit log %d: expected ResourceTarget %s, got %s", idx+1, expected.ResourceTarget, al.ResourceTarget) | ||
continue | ||
} | ||
if expected.Action != "" && expected.Action != al.Action { | ||
t.Logf("audit log %d: expected Action %s, got %s", idx+1, expected.Action, al.Action) | ||
continue | ||
} | ||
if len(expected.Diff) > 0 && slices.Compare(expected.Diff, al.Diff) != 0 { | ||
t.Logf("audit log %d: expected Diff %s, got %s", idx+1, string(expected.Diff), string(al.Diff)) | ||
continue | ||
} | ||
if expected.StatusCode != 0 && expected.StatusCode != al.StatusCode { | ||
t.Logf("audit log %d: expected StatusCode %d, got %d", idx+1, expected.StatusCode, al.StatusCode) | ||
continue | ||
} | ||
if len(expected.AdditionalFields) > 0 && slices.Compare(expected.AdditionalFields, al.AdditionalFields) != 0 { | ||
t.Logf("audit log %d: expected AdditionalFields %s, got %s", idx+1, string(expected.AdditionalFields), string(al.AdditionalFields)) | ||
continue | ||
} | ||
if expected.RequestID != uuid.Nil && expected.RequestID != al.RequestID { | ||
t.Logf("audit log %d: expected RequestID %s, got %s", idx+1, expected.RequestID, al.RequestID) | ||
continue | ||
} | ||
if expected.ResourceIcon != "" && expected.ResourceIcon != al.ResourceIcon { | ||
t.Logf("audit log %d: expected ResourceIcon %s, got %s", idx+1, expected.ResourceIcon, al.ResourceIcon) | ||
continue | ||
} | ||
return true | ||
} | ||
return false | ||
} |