github.com/Axway/agent-sdk@v1.1.101/pkg/transaction/httpprotocolbuilder_test.go (about) 1 package transaction 2 3 import ( 4 "testing" 5 6 "github.com/Axway/agent-sdk/pkg/traceability/redaction" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func createHTTPProtocol(uri, method, reqHeaders, resHeaders string, status, reqLen, resLen int, redactionConfig redaction.Redactions) (TransportProtocol, error) { 11 redaction.SetupGlobalRedaction(redaction.Config{}) 12 return NewHTTPProtocolBuilder(). 13 SetURI(uri). 14 SetVersion("1.1"). 15 SetArgs(`{"param1": ["date"], "param2": ["day, time"]}`). 16 SetMethod(method). 17 SetStatus(status, "statusTxt"). 18 SetUserAgent("userAgent"). 19 SetHost("host"). 20 SetByteLength(reqLen, resLen). 21 SetRemoteAddress("remoteName", "remoteAddr", 2222). 22 SetLocalAddress("localAddr", 1111). 23 SetAuthSubjectID("authsubject"). 24 SetSSLProperties("TLS1.1", "sslServer", "sslSubject"). 25 SetHeaders(reqHeaders, resHeaders). 26 SetIndexedHeaders(`{"indexedrequest": "value", "x-amplify-indexed": "random", "x-amplify-indexedagain": "else"}`, 27 `{"indexedresponse": "value", "x-indexedresponse": "random", "x-indexed": "test"}`). 28 SetPayload("requestPayload", "responsePayload"). 29 SetWAFStatus(1). 30 SetRedactionConfig(redactionConfig). 31 Build() 32 } 33 34 func TestHTTPProtocolBuilder(t *testing.T) { 35 config := redaction.Config{ 36 Path: redaction.Path{ 37 Allowed: []redaction.Show{}, 38 }, 39 Args: redaction.Filter{ 40 Allowed: []redaction.Show{}, 41 Sanitize: []redaction.Sanitize{}, 42 }, 43 RequestHeaders: redaction.Filter{ 44 Allowed: []redaction.Show{}, 45 Sanitize: []redaction.Sanitize{}, 46 }, 47 ResponseHeaders: redaction.Filter{ 48 Allowed: []redaction.Show{}, 49 Sanitize: []redaction.Sanitize{}, 50 }, 51 MaskingCharacters: "{*}", 52 JMSProperties: redaction.Filter{ 53 Allowed: []redaction.Show{}, 54 Sanitize: []redaction.Sanitize{}, 55 }, 56 } 57 58 redactionConfig, _ := config.SetupRedactions() 59 60 httpProtocol, err := createHTTPProtocol("/testuri", "GET", `{"request": "value", "x-amplify-something": "random", "x-amplify-somethingelse": "else"}`, 61 `{"response": "value", "x-response": "random", "x-value": "test"}`, 200, 10, 10, redactionConfig) 62 assert.Nil(t, err) 63 assert.NotNil(t, httpProtocol) 64 65 httpProtocolBuilder := NewHTTPProtocolBuilder() 66 67 httpProtocol, err = httpProtocolBuilder.Build() 68 assert.Nil(t, httpProtocol) 69 assert.NotNil(t, err) 70 assert.Equal(t, "Raw Uri property not set in HTTP protocol details", err.Error()) 71 72 httpProtocol, err = httpProtocolBuilder. 73 SetURI("/test"). 74 Build() 75 assert.Nil(t, httpProtocol) 76 assert.NotNil(t, err) 77 assert.Equal(t, "method property not set in HTTP protocol details", err.Error()) 78 httpProtocol, err = httpProtocolBuilder. 79 SetURI("/test"). 80 SetMethod("GET"). 81 Build() 82 assert.Nil(t, httpProtocol) 83 assert.NotNil(t, err) 84 assert.Equal(t, "host property not set in HTTP protocol details", err.Error()) 85 86 httpProtocol, err = httpProtocolBuilder. 87 SetURI("/test"). 88 SetMethod("GET"). 89 SetHost("host"). 90 SetStatus(20, "OK"). 91 Build() 92 assert.Nil(t, httpProtocol) 93 assert.NotNil(t, err) 94 assert.Equal(t, "invalid status code set in HTTP protocol details", err.Error()) 95 96 httpProtocol, err = httpProtocolBuilder. 97 SetURI("/test"). 98 SetMethod("GET"). 99 SetHost("host"). 100 SetStatus(200, "OK"). 101 Build() 102 assert.Nil(t, err) 103 assert.NotNil(t, httpProtocol) 104 105 httpProtocol, err = httpProtocolBuilder. 106 SetURI("/test"). 107 SetMethod("GET"). 108 SetHost("host"). 109 SetStatus(200, "OK"). 110 AddArg("newarg", []string{"one", "two"}). 111 Build() 112 assert.Nil(t, err) 113 assert.NotNil(t, httpProtocol) 114 115 httpProtocol, err = httpProtocolBuilder. 116 SetURI("/test"). 117 SetMethod("GET"). 118 SetHost("host"). 119 SetStatus(200, "OK"). 120 SetArgsMap(map[string][]string{"test": {"one", "two"}}). 121 Build() 122 assert.Nil(t, err) 123 assert.NotNil(t, httpProtocol) 124 125 httpProtocol, err = httpProtocolBuilder. 126 SetURI("/test"). 127 SetMethod("GET"). 128 SetHost("host"). 129 SetStatus(200, "OK"). 130 SetRequestHeaders(map[string]string{"reqHead": "one"}). 131 SetResponseHeaders(map[string]string{"rspHead": "two"}). 132 Build() 133 assert.Nil(t, err) 134 assert.NotNil(t, httpProtocol) 135 136 httpProtocol, err = httpProtocolBuilder. 137 SetURI("/test"). 138 SetMethod("GET"). 139 SetHost("host"). 140 SetStatus(200, "OK"). 141 AddRequestHeader("key", "two"). 142 AddResponseHeader("key", "two"). 143 Build() 144 assert.Nil(t, err) 145 assert.NotNil(t, httpProtocol) 146 147 httpProtocol, err = httpProtocolBuilder. 148 SetURI("/test"). 149 SetMethod("GET"). 150 SetHost("host"). 151 SetStatus(200, "OK"). 152 SetIndexedRequestHeaders(map[string]string{"test": "one"}). 153 SetIndexedResponseHeaders(map[string]string{"test": "two"}). 154 Build() 155 assert.Nil(t, err) 156 assert.NotNil(t, httpProtocol) 157 158 httpProtocol, err = httpProtocolBuilder. 159 SetURI("/test"). 160 SetMethod("GET"). 161 SetHost("host"). 162 SetStatus(200, "OK"). 163 AddIndexedRequestHeader("key", "one"). 164 AddIndexedResponseHeader("key", "two"). 165 Build() 166 assert.Nil(t, err) 167 assert.NotNil(t, httpProtocol) 168 169 httpProtocol, err = httpProtocolBuilder. 170 SetURI("/test"). 171 SetMethod("GET"). 172 SetHost("host"). 173 SetStatus(200, "OK"). 174 SetArgsMap(map[string][]string{"test": {"one", "two"}}). 175 SetRedactionConfig(redactionConfig). 176 Build() 177 assert.Nil(t, err) 178 assert.NotNil(t, httpProtocol) 179 } 180 181 type redactionTest struct { 182 uriRedactionCalled bool 183 pathRedactionCalled bool 184 queryArgsRedactionCalled bool 185 queryArgsRedactionStringCalled bool 186 requestHeadersRedactionCalled bool 187 responseHeadersRedactionCalled bool 188 jmsPropertiesRedactionCalled bool 189 } 190 191 func (r *redactionTest) URIRedaction(uri string) (string, error) { 192 r.uriRedactionCalled = true 193 return "test", nil 194 } 195 196 func (r *redactionTest) PathRedaction(path string) string { 197 r.pathRedactionCalled = true 198 return "test" 199 } 200 201 func (r *redactionTest) QueryArgsRedaction(queryArgs map[string][]string) (map[string][]string, error) { 202 r.queryArgsRedactionCalled = true 203 return queryArgs, nil 204 } 205 206 func (r *redactionTest) QueryArgsRedactionString(queryArgs string) (string, error) { 207 r.queryArgsRedactionStringCalled = true 208 return queryArgs, nil 209 } 210 211 func (r *redactionTest) RequestHeadersRedaction(requestHeaders map[string]string) (map[string]string, error) { 212 r.requestHeadersRedactionCalled = true 213 return requestHeaders, nil 214 } 215 216 func (r *redactionTest) ResponseHeadersRedaction(responseHeaders map[string]string) (map[string]string, error) { 217 r.responseHeadersRedactionCalled = true 218 return responseHeaders, nil 219 } 220 221 func (r *redactionTest) JMSPropertiesRedaction(jmsProperties map[string]string) (map[string]string, error) { 222 r.jmsPropertiesRedactionCalled = true 223 return jmsProperties, nil 224 } 225 func TestRedactionOverride(t *testing.T) { 226 227 redactionConfig := &redactionTest{} 228 229 httpProtocolBuilder := NewHTTPProtocolBuilder() 230 231 httpProtocol, err := httpProtocolBuilder. 232 SetURI("/test"). 233 SetMethod("GET"). 234 SetHost("host"). 235 SetStatus(200, "OK"). 236 SetArgsMap(map[string][]string{"test": {"one", "two"}}). 237 AddRequestHeader("key", "one"). 238 AddResponseHeader("key", "two"). 239 SetRedactionConfig(redactionConfig). 240 Build() 241 assert.Nil(t, err) 242 assert.NotNil(t, httpProtocol) 243 assert.True(t, redactionConfig.uriRedactionCalled) 244 assert.False(t, redactionConfig.pathRedactionCalled) 245 assert.True(t, redactionConfig.queryArgsRedactionCalled) 246 assert.False(t, redactionConfig.queryArgsRedactionStringCalled) 247 assert.True(t, redactionConfig.requestHeadersRedactionCalled) 248 assert.True(t, redactionConfig.responseHeadersRedactionCalled) 249 assert.False(t, redactionConfig.jmsPropertiesRedactionCalled) 250 }