@@ -8,18 +8,20 @@ import (
88 "strings"
99
1010 "github.com/ant0ine/go-json-rest/rest"
11+ "github.com/golang/mock/gomock"
1112 . "github.com/onsi/ginkgo/v2"
1213 . "github.com/onsi/gomega"
1314
1415 v1 "github.com/tidepool-org/platform/data/service/api/v1"
16+ "github.com/tidepool-org/platform/data/service/api/v1/mocks"
1517 "github.com/tidepool-org/platform/log"
1618 "github.com/tidepool-org/platform/log/null"
1719 "github.com/tidepool-org/platform/request"
1820)
1921
22+ //go:generate mockgen -destination mocks/mocklogger_test_gen.go -package mocks github.com/tidepool-org/platform/log Logger
23+
2024var _ = Describe ("collectProvenanceInfo" , func () {
21- // logger, err := logJson.NewLogger(os.Stderr, log.DefaultLevelRanks(), log.DefaultLevel())
22- // Expect(err).ShouldNot(HaveOccurred())
2325 logger := null .NewLogger ()
2426 ctx := log .NewContextWithLogger (context .Background (), logger )
2527
@@ -50,6 +52,36 @@ var _ = Describe("collectProvenanceInfo", func() {
5052 It ("handles a missing ClientID" , func () {
5153 req , details := newTestReqAndDetails ("" , "bar" , "192.0.2.1" )
5254 prov := v1 .CollectProvenanceInfo (ctx , req , details )
55+ Expect (prov ).ToNot (BeNil ())
56+ Expect (prov .ByUserID ).To (Equal ("bar" ))
57+ Expect (prov .SourceIP ).To (Equal ("192.0.2.1" ))
58+ Expect (prov .ClientID ).To (Equal ("" ))
59+ })
60+
61+ It ("logs missing ClientIDs when expected, but not found" , func () {
62+ ctrl := gomock .NewController (GinkgoT ())
63+ defer ctrl .Finish ()
64+ mockLogger := mocks .NewMockLogger (ctrl )
65+ mockLogger .EXPECT ().Warn ("Unable to read ClientID: The request's access token is blank" )
66+ ctx := log .NewContextWithLogger (context .Background (), mockLogger )
67+ req , _ := newTestReqAndDetails ("" , "" , "192.0.2.1" )
68+ details := request .NewAuthDetails (request .MethodSessionToken , "bar" , "" )
69+ prov := v1 .CollectProvenanceInfo (ctx , req , details )
70+ Expect (prov ).ToNot (BeNil ())
71+ Expect (prov .ByUserID ).To (Equal ("bar" ))
72+ Expect (prov .SourceIP ).To (Equal ("192.0.2.1" ))
73+ Expect (prov .ClientID ).To (Equal ("" ))
74+ })
75+
76+ It ("doesn't log missing ClientIDs for service secret authenticated requests" , func () {
77+ ctrl := gomock .NewController (GinkgoT ())
78+ defer ctrl .Finish ()
79+ mockLogger := mocks .NewMockLogger (ctrl )
80+ ctx := log .NewContextWithLogger (context .Background (), mockLogger )
81+ req , _ := newTestReqAndDetails ("" , "" , "192.0.2.1" )
82+ details := request .NewAuthDetails (request .MethodServiceSecret , "bar" , "" )
83+ prov := v1 .CollectProvenanceInfo (ctx , req , details )
84+ Expect (prov ).ToNot (BeNil ())
5385 Expect (prov .ByUserID ).To (Equal ("bar" ))
5486 Expect (prov .SourceIP ).To (Equal ("192.0.2.1" ))
5587 Expect (prov .ClientID ).To (Equal ("" ))
@@ -58,18 +90,27 @@ var _ = Describe("collectProvenanceInfo", func() {
5890
5991func newTestReqAndDetails (clientID , userID , sourceIP string ) (* rest.Request , request.AuthDetails ) {
6092 remoteAddr := ""
93+ headers := http.Header {}
6194 if sourceIP != "" {
6295 remoteAddr = sourceIP + ":1234"
96+ headers .Set ("X-Forwarded-For" , sourceIP )
97+ }
98+ token := ""
99+ if clientID != "" {
100+ token = newTestToken (clientID )
101+ headers .Set ("X-Tidepool-Session-Token" , token )
63102 }
64103 req := & rest.Request {
65104 Request : & http.Request {
66105 RemoteAddr : remoteAddr ,
67- Header : http.Header {
68- "X-Tidepool-Session-Token" : {newTestToken (clientID )},
69- "X-Forwarded-For" : {sourceIP }},
106+ Header : headers ,
70107 },
71108 }
72- details := request .NewAuthDetails ("" , userID , "token" )
109+ method := request .MethodSessionToken
110+ if userID == "" {
111+ method = request .MethodServiceSecret
112+ }
113+ details := request .NewAuthDetails (method , userID , token )
73114 return req , details
74115}
75116
0 commit comments