func TestAuditLog()

in lib/auditlogsapi/itest/main.go [124:229]


func TestAuditLog(ctx context.Context, s *auditlogsapi.AuditLogs, c lgrpcpb.LoggingServiceV2Client, logger *logging.Client, projectName string, userID string) {
	glog.Infof("## TestAuditLog started. ##")
	defer glog.Infof("## TestAuditLog finished. ##\n\n")

	// Generate random user id if no user is specified.
	randomUser := false
	if userID == "" {
		userID = "fake-user-id-" + uuid.New()
		randomUser = true
	}

	// Write an access and a policy log.
	al := &auditlog.RequestLog{
		TokenID:         "fake-token-id",
		TokenSubject:    userID,
		TokenIssuer:     "fake-issuer-id",
		TracingID:       "fake-tracing-id",
		RequestMethod:   "fake-method",
		RequestEndpoint: "fake-endpoint",
		RequestPath:     "fake-path",
		RequestIP:       "fake-requester-ip",
		ErrorType:       "fake-error-type",
		ResponseCode:    1234,
		Request:         httputils.MustNewReq(http.MethodGet, "http://fake.org/fake-path", nil),
		PassAuthCheck:   true,
		Payload:         "fake-reason",
	}
	auditlog.WriteRequestLog(ctx, logger, al)

	pl := &auditlog.PolicyDecisionLog{
		TokenID:       "fake-token-id",
		TokenSubject:  userID,
		TokenIssuer:   "fake-issuer-id",
		Resource:      "fake-resource",
		TTL:           time.Hour.String(),
		PassAuthCheck: true,
		ErrorType:     "fake-error-type",
		Message:       "fake-reason",
	}
	auditlog.WritePolicyDecisionLog(logger, pl)

	// It takes a while before written logs are visible on Stackdriver.
	var got *apb.ListAuditLogsResponse
	end := time.Now().Add(time.Minute)
	for len(got.GetAuditLogs()) < 2 && time.Now().Before(end) {
		var err error
		got, err = s.ListAuditLogs(ctx, &apb.ListAuditLogsRequest{UserId: userID})
		if err != nil {
			glog.Errorf("ListAuditLogs() failed: %v", err)
			return
		}
		time.Sleep(time.Second)
	}

	for _, l := range got.GetAuditLogs() {
		glog.Infof("AuditLog: %v\n\n", l)
	}

	if !randomUser {
		return
	}
	// If it was a randomly generated user, we can check if the logs are correct.

	got.AuditLogs[0].Name = ""
	got.AuditLogs[0].Time = nil
	got.AuditLogs[1].Name = ""
	got.AuditLogs[1].Time = nil

	want := &apb.ListAuditLogsResponse{
		AuditLogs: []*apb.AuditLog{
			{
				Name:             "",
				ServiceName:      "unset-serviceinfo-Name",
				ServiceType:      "unset-serviceinfo-Type",
				TokenId:          "fake-token-id",
				TokenSubject:     userID,
				TokenIssuer:      "fake-issuer-id",
				Decision:         apb.Decision_PASS,
				ErrorType:        "fake-error-type",
				Reason:           "fake-reason",
				MethodName:       http.MethodGet,
				ResourceName:     "fake-endpoint",
				TracingId:        "fake-tracing-id",
				CallerIp:         "fake-requester-ip",
				HttpResponseCode: 1234,
				HttpRequest:      nil,
			},
			{
				Name:         "",
				ServiceName:  "unset-serviceinfo-Name",
				ServiceType:  "unset-serviceinfo-Type",
				TokenId:      "fake-token-id",
				TokenSubject: userID,
				TokenIssuer:  "fake-issuer-id",
				Decision:     apb.Decision_PASS,
				ErrorType:    "fake-error-type",
				Reason:       "fake-reason",
				ResourceName: "fake-resource",
				Ttl:          &dpb.Duration{Seconds: int64(time.Hour / time.Second)},
			},
		},
	}
	if diff := cmp.Diff(want, got, protocmp.Transform()); diff != "" {
		glog.Errorf("ListAuditLogs() returned diff (-want +got):\n%s", diff)
	}
}