github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_attack_payload_logging_test.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "encoding/json" 6 "errors" 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 11 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/session" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestAppSec_ListAdvancedSettingsAttackPayloadLogging(t *testing.T) { 17 18 result := GetAdvancedSettingsAttackPayloadLoggingResponse{} 19 20 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsAttackPayloadLogging/AdvancedSettingsAttackPayloadLogging.json")) 21 err := json.Unmarshal([]byte(respData), &result) 22 require.NoError(t, err) 23 24 tests := map[string]struct { 25 params GetAdvancedSettingsAttackPayloadLoggingRequest 26 responseStatus int 27 responseBody string 28 expectedPath string 29 expectedResponse *GetAdvancedSettingsAttackPayloadLoggingResponse 30 withError error 31 headers http.Header 32 }{ 33 "200 OK": { 34 params: GetAdvancedSettingsAttackPayloadLoggingRequest{ 35 ConfigID: 43253, 36 Version: 15, 37 }, 38 headers: http.Header{ 39 "Content-Type": []string{"application/json"}, 40 }, 41 responseStatus: http.StatusOK, 42 responseBody: string(respData), 43 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/logging/attack-payload", 44 expectedResponse: &result, 45 }, 46 "500 internal server error": { 47 params: GetAdvancedSettingsAttackPayloadLoggingRequest{ 48 ConfigID: 43253, 49 Version: 15, 50 }, 51 headers: http.Header{}, 52 responseStatus: http.StatusInternalServerError, 53 responseBody: ` 54 { 55 "type": "internal_error", 56 "title": "Internal Server Error", 57 "detail": "Error fetching AdvancedSettingsAttackPayloadLogging", 58 "status": 500 59 }`, 60 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/logging/attack-payload", 61 withError: &Error{ 62 Type: "internal_error", 63 Title: "Internal Server Error", 64 Detail: "Error fetching AdvancedSettingsAttackPayloadLogging", 65 StatusCode: http.StatusInternalServerError, 66 }, 67 }, 68 } 69 70 for name, test := range tests { 71 t.Run(name, func(t *testing.T) { 72 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 73 assert.Equal(t, test.expectedPath, r.URL.String()) 74 assert.Equal(t, http.MethodGet, r.Method) 75 w.WriteHeader(test.responseStatus) 76 _, err := w.Write([]byte(test.responseBody)) 77 assert.NoError(t, err) 78 })) 79 client := mockAPIClient(t, mockServer) 80 result, err := client.GetAdvancedSettingsAttackPayloadLogging( 81 session.ContextWithOptions( 82 context.Background(), 83 session.WithContextHeaders(test.headers), 84 ), 85 test.params) 86 if test.withError != nil { 87 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 88 return 89 } 90 require.NoError(t, err) 91 assert.Equal(t, test.expectedResponse, result) 92 }) 93 } 94 } 95 96 // Test AdvancedSettingsLogging 97 func TestAppSec_GetAdvancedSettingsAttackPayloadLoggingPolicy(t *testing.T) { 98 99 result := GetAdvancedSettingsAttackPayloadLoggingResponse{} 100 101 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsAttackPayloadLogging/AdvancedSettingsAttackPayloadLogging.json")) 102 err := json.Unmarshal([]byte(respData), &result) 103 require.NoError(t, err) 104 105 tests := map[string]struct { 106 params GetAdvancedSettingsAttackPayloadLoggingRequest 107 responseStatus int 108 responseBody string 109 expectedPath string 110 expectedResponse *GetAdvancedSettingsAttackPayloadLoggingResponse 111 withError error 112 }{ 113 "200 OK": { 114 params: GetAdvancedSettingsAttackPayloadLoggingRequest{ 115 ConfigID: 43253, 116 Version: 15, 117 PolicyID: "test_policy", 118 }, 119 responseStatus: http.StatusOK, 120 responseBody: respData, 121 expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/logging/attack-payload", 122 expectedResponse: &result, 123 }, 124 "500 internal server error": { 125 params: GetAdvancedSettingsAttackPayloadLoggingRequest{ 126 ConfigID: 43253, 127 Version: 15, 128 PolicyID: "test_policy", 129 }, 130 responseStatus: http.StatusInternalServerError, 131 responseBody: ` 132 { 133 "type": "internal_error", 134 "title": "Internal Server Error", 135 "detail": "Error fetching AdvancedSettingsLogging" 136 }`, 137 expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/logging/attack-payload", 138 withError: &Error{ 139 Type: "internal_error", 140 Title: "Internal Server Error", 141 Detail: "Error fetching AdvancedSettingsLogging", 142 StatusCode: http.StatusInternalServerError, 143 }, 144 }, 145 } 146 147 for name, test := range tests { 148 t.Run(name, func(t *testing.T) { 149 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 150 assert.Equal(t, test.expectedPath, r.URL.String()) 151 assert.Equal(t, http.MethodGet, r.Method) 152 w.WriteHeader(test.responseStatus) 153 _, err := w.Write([]byte(test.responseBody)) 154 assert.NoError(t, err) 155 })) 156 client := mockAPIClient(t, mockServer) 157 result, err := client.GetAdvancedSettingsAttackPayloadLogging(context.Background(), test.params) 158 if test.withError != nil { 159 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 160 return 161 } 162 require.NoError(t, err) 163 assert.Equal(t, test.expectedResponse, result) 164 }) 165 } 166 } 167 168 // Test Update AdvancedSettingsAttackPayloadLogging config level. 169 func TestAppSec_UpdateAdvancedSettingsAttackPayloadLogging(t *testing.T) { 170 result := UpdateAdvancedSettingsAttackPayloadLoggingResponse{} 171 172 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsLogging/AdvancedSettingsLogging.json")) 173 err := json.Unmarshal([]byte(respData), &result) 174 require.NoError(t, err) 175 176 req := UpdateAdvancedSettingsAttackPayloadLoggingRequest{} 177 178 reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsLogging/AdvancedSettingsLogging.json")) 179 err = json.Unmarshal([]byte(reqData), &req) 180 require.NoError(t, err) 181 182 tests := map[string]struct { 183 params UpdateAdvancedSettingsAttackPayloadLoggingRequest 184 responseStatus int 185 responseBody string 186 expectedPath string 187 expectedResponse *UpdateAdvancedSettingsAttackPayloadLoggingResponse 188 withError error 189 headers http.Header 190 }{ 191 "200 Success": { 192 params: UpdateAdvancedSettingsAttackPayloadLoggingRequest{ 193 ConfigID: 43253, 194 Version: 15, 195 }, 196 headers: http.Header{ 197 "Content-Type": []string{"application/json;charset=UTF-8"}, 198 }, 199 responseStatus: http.StatusCreated, 200 responseBody: respData, 201 expectedResponse: &result, 202 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/logging/attack-payload", 203 }, 204 "500 internal server error": { 205 params: UpdateAdvancedSettingsAttackPayloadLoggingRequest{ 206 ConfigID: 43253, 207 Version: 15, 208 }, 209 responseStatus: http.StatusInternalServerError, 210 responseBody: ` 211 { 212 "type": "internal_error", 213 "title": "Internal Server Error", 214 "detail": "Error creating AdvancedSettingsAttackPayloadLogging" 215 }`, 216 expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/logging/attack-payload", 217 withError: &Error{ 218 Type: "internal_error", 219 Title: "Internal Server Error", 220 Detail: "Error creating AdvancedSettingsAttackPayloadLogging", 221 StatusCode: http.StatusInternalServerError, 222 }, 223 }, 224 } 225 226 for name, test := range tests { 227 t.Run(name, func(t *testing.T) { 228 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 229 assert.Equal(t, http.MethodPut, r.Method) 230 w.WriteHeader(test.responseStatus) 231 if len(test.responseBody) > 0 { 232 _, err := w.Write([]byte(test.responseBody)) 233 assert.NoError(t, err) 234 } 235 })) 236 client := mockAPIClient(t, mockServer) 237 result, err := client.UpdateAdvancedSettingsAttackPayloadLogging( 238 session.ContextWithOptions( 239 context.Background(), 240 session.WithContextHeaders(test.headers)), test.params) 241 if test.withError != nil { 242 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 243 return 244 } 245 require.NoError(t, err) 246 assert.Equal(t, test.expectedResponse, result) 247 }) 248 } 249 } 250 251 // Test Update AdvancedSettingsAttackPayloadLogging policy level. 252 func TestAppSec_UpdateAdvancedSettingsAttackPayloadLoggingPolicy(t *testing.T) { 253 result := UpdateAdvancedSettingsAttackPayloadLoggingResponse{} 254 255 respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsLogging/AdvancedSettingsLogging.json")) 256 err := json.Unmarshal([]byte(respData), &result) 257 require.NoError(t, err) 258 259 req := UpdateAdvancedSettingsAttackPayloadLoggingRequest{} 260 261 reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsLogging/AdvancedSettingsLogging.json")) 262 err = json.Unmarshal([]byte(reqData), &req) 263 require.NoError(t, err) 264 265 tests := map[string]struct { 266 params UpdateAdvancedSettingsAttackPayloadLoggingRequest 267 responseStatus int 268 responseBody string 269 expectedPath string 270 expectedResponse *UpdateAdvancedSettingsAttackPayloadLoggingResponse 271 withError error 272 headers http.Header 273 }{ 274 "200 Success": { 275 params: UpdateAdvancedSettingsAttackPayloadLoggingRequest{ 276 ConfigID: 43253, 277 Version: 15, 278 PolicyID: "test_policy", 279 }, 280 headers: http.Header{ 281 "Content-Type": []string{"application/json;charset=UTF-8"}, 282 }, 283 responseStatus: http.StatusCreated, 284 responseBody: respData, 285 expectedResponse: &result, 286 expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/logging/attack-payload", 287 }, 288 "500 internal server error": { 289 params: UpdateAdvancedSettingsAttackPayloadLoggingRequest{ 290 ConfigID: 43253, 291 Version: 15, 292 PolicyID: "test_policy", 293 }, 294 responseStatus: http.StatusInternalServerError, 295 responseBody: ` 296 { 297 "type": "internal_error", 298 "title": "Internal Server Error", 299 "detail": "Error creating AdvancedSettingsAttackPayloadLogging" 300 }`, 301 expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/logging/attack-payload", 302 withError: &Error{ 303 Type: "internal_error", 304 Title: "Internal Server Error", 305 Detail: "Error creating AdvancedSettingsAttackPayloadLogging", 306 StatusCode: http.StatusInternalServerError, 307 }, 308 }, 309 } 310 311 for name, test := range tests { 312 t.Run(name, func(t *testing.T) { 313 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 314 assert.Equal(t, http.MethodPut, r.Method) 315 w.WriteHeader(test.responseStatus) 316 if len(test.responseBody) > 0 { 317 _, err := w.Write([]byte(test.responseBody)) 318 assert.NoError(t, err) 319 } 320 })) 321 client := mockAPIClient(t, mockServer) 322 result, err := client.UpdateAdvancedSettingsAttackPayloadLogging( 323 session.ContextWithOptions( 324 context.Background(), 325 session.WithContextHeaders(test.headers)), test.params) 326 if test.withError != nil { 327 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 328 return 329 } 330 require.NoError(t, err) 331 assert.Equal(t, test.expectedResponse, result) 332 }) 333 } 334 }