@@ -2,6 +2,8 @@ package cloudaudit
22
33import (
44 "context"
5+ "fmt"
6+ "io"
57 "net/http"
68 "net/http/httptest"
79 "strings"
@@ -14,10 +16,11 @@ import (
1416
1517func newTestDriver (t * testing.T , baseURL string ) * Driver {
1618 t .Helper ()
17- d := & Driver {Credential : auth .New ("ak" , "sk" , "" )}
19+ clock := func () time.Time { return time .Unix (1776458501 , 0 ).UTC () }
20+ d := & Driver {Credential : auth .New ("AKIDCURRENT" , "sk" , "" ), Clock : clock }
1821 d .SetClientOptions (
1922 api .WithBaseURL (baseURL ),
20- api .WithClock (func () time. Time { return time . Unix ( 1776458501 , 0 ). UTC () } ),
23+ api .WithClock (clock ),
2124 api .WithRetryPolicy (api.RetryPolicy {
2225 MaxAttempts : 1 ,
2326 Sleep : func (context.Context , time.Duration ) error { return nil },
@@ -26,12 +29,24 @@ func newTestDriver(t *testing.T, baseURL string) *Driver {
2629 return d
2730}
2831
29- func TestDumpEventsMapsResponse (t * testing.T ) {
32+ func TestDumpEventsPaginates (t * testing.T ) {
33+ calls := 0
34+ var secondBody string
3035 server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
31- if got := r .Header .Get ("X-TC-Action" ); got != "LookUpEvents" {
32- t .Fatalf ("unexpected action: %s" , got )
36+ calls ++
37+ switch calls {
38+ case 1 :
39+ _ , _ = w .Write ([]byte (`{"Response":{"ListOver":false,"NextToken":2,"Events":[{"EventId":"e1","EventName":"CreateUser"}],"RequestId":"r1"}}` ))
40+ case 2 :
41+ body , err := io .ReadAll (r .Body )
42+ if err != nil {
43+ t .Fatalf ("read body: %v" , err )
44+ }
45+ secondBody = string (body )
46+ _ , _ = w .Write ([]byte (`{"Response":{"ListOver":true,"Events":[{"EventId":"e2","EventName":"DeleteUser"}],"RequestId":"r2"}}` ))
47+ default :
48+ t .Fatalf ("unexpected call: %d" , calls )
3349 }
34- _ , _ = w .Write ([]byte (`{"Response":{"ListOver":true,"Events":[{"EventId":"e1","EventName":"CreateUser","EventNameCn":"创建子用户","EventTime":"2026-04-22 09:10:11","EventRegion":"ap-guangzhou","Username":"alice","SourceIPAddress":"203.0.113.10","ResourceName":"ctk-demo-bot","Status":0,"SecretId":"AKID","ApiVersion":"2019-01-16"}],"RequestId":"r1"}}` ))
3550 }))
3651 defer server .Close ()
3752
@@ -40,33 +55,26 @@ func TestDumpEventsMapsResponse(t *testing.T) {
4055 if err != nil {
4156 t .Fatalf ("DumpEvents: %v" , err )
4257 }
43- if len (got ) != 1 {
44- t .Fatalf ("expected 1 event, got %d" , len (got ))
45- }
46- ev := got [0 ]
47- if ev .Id != "e1" || ev .API != "CreateUser" || ev .Name != "创建子用户" {
48- t .Errorf ("unexpected event: %+v" , ev )
49- }
50- if ev .SourceIp != "203.0.113.10" || ev .AccessKey != "AKID" {
51- t .Errorf ("unexpected event detail: %+v" , ev )
58+ if len (got ) != 2 {
59+ t .Fatalf ("expected 2 events across pages, got %d" , len (got ))
5260 }
53- if ev . Status != "成功" {
54- t .Errorf ("expected status '成功' , got %q " , ev . Status )
61+ if ! strings . Contains ( secondBody , `"NextToken":"2"` ) {
62+ t .Fatalf ("expected numeric response token to be sent as string , got %s " , secondBody )
5563 }
5664}
5765
58- func TestDumpEventsPaginates (t * testing.T ) {
59- calls := 0
66+ func TestDumpEventsCapsDefaultOutputAndFormatsUnixTime (t * testing.T ) {
6067 server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
61- calls ++
62- switch calls {
63- case 1 :
64- _ , _ = w .Write ([]byte (`{"Response":{"ListOver":false,"NextToken":"page-2","Events":[{"EventId":"e1","EventName":"CreateUser"}],"RequestId":"r1"}}` ))
65- case 2 :
66- _ , _ = w .Write ([]byte (`{"Response":{"ListOver":true,"Events":[{"EventId":"e2","EventName":"DeleteUser"}],"RequestId":"r2"}}` ))
67- default :
68- t .Fatalf ("unexpected call: %d" , calls )
68+ var body strings.Builder
69+ body .WriteString (`{"Response":{"ListOver":true,"Events":[` )
70+ for i := 0 ; i < defaultEventLimit + 5 ; i ++ {
71+ if i > 0 {
72+ body .WriteByte (',' )
73+ }
74+ _ , _ = fmt .Fprintf (& body , `{"EventId":"e%d","EventName":"CreateUser","EventTime":"1778317184"}` , i )
6975 }
76+ body .WriteString (`],"RequestId":"r1"}}` )
77+ _ , _ = w .Write ([]byte (body .String ()))
7078 }))
7179 defer server .Close ()
7280
@@ -75,8 +83,15 @@ func TestDumpEventsPaginates(t *testing.T) {
7583 if err != nil {
7684 t .Fatalf ("DumpEvents: %v" , err )
7785 }
78- if len (got ) != 2 {
79- t .Fatalf ("expected 2 events across pages, got %d" , len (got ))
86+ if len (got ) != defaultEventLimit {
87+ t .Fatalf ("expected %d events, got %d" , defaultEventLimit , len (got ))
88+ }
89+ if got [defaultEventLimit - 1 ].Id != "e19" {
90+ t .Fatalf ("expected output to stop at e19, got %s" , got [defaultEventLimit - 1 ].Id )
91+ }
92+ wantTime := time .Unix (1778317184 , 0 ).UTC ().Format (time .RFC3339 )
93+ if got [0 ].Time != wantTime {
94+ t .Fatalf ("expected formatted event time %q, got %q" , wantTime , got [0 ].Time )
8095 }
8196}
8297
0 commit comments