github.com/Axway/agent-sdk@v1.1.101/pkg/transaction/logeventbuilder_test.go (about) 1 package transaction 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 "time" 8 9 "github.com/Axway/agent-sdk/pkg/agent" 10 "github.com/Axway/agent-sdk/pkg/traceability/redaction" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestTransactionEventBuilder(t *testing.T) { 15 s := httptest.NewServer(http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { 16 token := "{\"access_token\":\"somevalue\",\"expires_in\": 12235677}" 17 resp.Write([]byte(token)) 18 })) 19 defer s.Close() 20 21 cfg := createMapperTestConfig(s.URL, "1111", "aaa", "env1", "1111") 22 agent.Initialize(cfg.Central) 23 timeStamp := time.Now().Unix() 24 25 config := redaction.Config{ 26 Path: redaction.Path{ 27 Allowed: []redaction.Show{}, 28 }, 29 Args: redaction.Filter{ 30 Allowed: []redaction.Show{}, 31 Sanitize: []redaction.Sanitize{}, 32 }, 33 RequestHeaders: redaction.Filter{ 34 Allowed: []redaction.Show{}, 35 Sanitize: []redaction.Sanitize{}, 36 }, 37 ResponseHeaders: redaction.Filter{ 38 Allowed: []redaction.Show{}, 39 Sanitize: []redaction.Sanitize{}, 40 }, 41 MaskingCharacters: "{*}", 42 JMSProperties: redaction.Filter{ 43 Allowed: []redaction.Show{}, 44 Sanitize: []redaction.Sanitize{}, 45 }, 46 } 47 48 redactionConfig, _ := config.SetupRedactions() 49 httpProtocol, _ := createHTTPProtocol("/testuri", "GET", "{}", "{}", 200, 10, 10, redactionConfig) 50 51 logEvent, err := NewTransactionEventBuilder(). 52 SetTargetPath("/targetPath"). 53 SetResourcePath("/resourcePath"). 54 Build() 55 assert.Nil(t, logEvent) 56 assert.NotNil(t, err) 57 assert.Equal(t, "id property not set in transaction event", err.Error()) 58 59 logEvent, err = NewTransactionEventBuilder(). 60 SetTargetPath("/targetPath"). 61 SetResourcePath("/resourcePath"). 62 SetTransactionID("11111"). 63 SetTimestamp(timeStamp). 64 SetID("1111"). 65 Build() 66 assert.Nil(t, logEvent) 67 assert.NotNil(t, err) 68 assert.Equal(t, "direction property not set in transaction event", err.Error()) 69 70 logEvent, err = NewTransactionEventBuilder(). 71 SetTargetPath("/targetPath"). 72 SetResourcePath("/resourcePath"). 73 SetTransactionID("11111"). 74 SetTimestamp(timeStamp). 75 SetID("1111"). 76 SetDirection("Inbound"). 77 Build() 78 assert.Nil(t, logEvent) 79 assert.NotNil(t, err) 80 assert.Equal(t, "status property not set in transaction event", err.Error()) 81 82 logEvent, err = NewTransactionEventBuilder(). 83 SetTargetPath("/targetPath"). 84 SetResourcePath("/resourcePath"). 85 SetTransactionID("11111"). 86 SetTimestamp(timeStamp). 87 SetID("1111"). 88 SetDirection("Inbound"). 89 SetStatus("Success"). 90 Build() 91 assert.Nil(t, logEvent) 92 assert.NotNil(t, err) 93 assert.Equal(t, "invalid transaction event status", err.Error()) 94 95 logEvent, err = NewTransactionEventBuilder(). 96 SetTargetPath("/targetPath"). 97 SetResourcePath("/resourcePath"). 98 SetTransactionID("11111"). 99 SetTimestamp(timeStamp). 100 SetID("1111"). 101 SetParentID("0000"). 102 SetSource("source"). 103 SetDestination("destination"). 104 SetDuration(10). 105 SetDirection("Inbound"). 106 SetStatus(TxEventStatusPass). 107 Build() 108 assert.Nil(t, logEvent) 109 assert.NotNil(t, err) 110 assert.Equal(t, "protocol details not set in transaction event", err.Error()) 111 112 logEvent, err = NewTransactionEventBuilder(). 113 SetTargetPath("/targetPath"). 114 SetResourcePath("/resourcePath"). 115 SetTransactionID("11111"). 116 SetTimestamp(timeStamp). 117 SetID("1111"). 118 SetParentID("0000"). 119 SetSource("source"). 120 SetDestination("destination"). 121 SetDuration(10). 122 SetDirection("Inbound"). 123 SetStatus(TxEventStatusPass). 124 SetProtocolDetail(""). 125 Build() 126 127 assert.Nil(t, logEvent) 128 assert.NotNil(t, err) 129 assert.Equal(t, "unsupported protocol type", err.Error()) 130 131 logEvent, err = NewTransactionEventBuilder(). 132 SetTargetPath("/targetPath"). 133 SetResourcePath("/resourcePath"). 134 SetTransactionID("11111"). 135 SetTimestamp(timeStamp). 136 SetID("1111"). 137 SetParentID("0000"). 138 SetSource("source"). 139 SetDestination("destination"). 140 SetDuration(10). 141 SetDirection("Inbound"). 142 SetStatus(TxEventStatusPass). 143 SetProtocolDetail(httpProtocol). 144 SetRedactionConfig(redactionConfig). 145 Build() 146 assert.NotNil(t, logEvent) 147 assert.Nil(t, err) 148 149 logEvent, err = NewTransactionEventBuilder(). 150 SetTargetPath("/targetPath"). 151 SetResourcePath("/resourcePath"). 152 SetTransactionID("11111"). 153 SetTimestamp(timeStamp). 154 SetID("1111"). 155 SetParentID("0000"). 156 SetSource("source"). 157 SetDestination("destination"). 158 SetDuration(10). 159 SetDirection("Inbound"). 160 SetStatus(TxEventStatusPass). 161 SetProtocolDetail(httpProtocol). 162 Build() 163 164 assert.Nil(t, err) 165 assert.Equal(t, "1.0", logEvent.Version) 166 assert.Equal(t, "1111", logEvent.TenantID) 167 assert.Equal(t, "1111", logEvent.TrcbltPartitionID) 168 assert.Equal(t, "env1", logEvent.EnvironmentName) 169 assert.Equal(t, "1111", logEvent.EnvironmentID) 170 assert.Equal(t, "aaa", logEvent.APICDeployment) 171 assert.Equal(t, "", logEvent.Environment) 172 assert.Equal(t, timeStamp, logEvent.Stamp) 173 assert.Equal(t, TypeTransactionEvent, logEvent.Type) 174 175 assert.Nil(t, logEvent.TransactionSummary) 176 assert.NotNil(t, logEvent.TransactionEvent) 177 178 assert.Equal(t, "1111", logEvent.TransactionEvent.ID) 179 assert.Equal(t, "0000", logEvent.TransactionEvent.ParentID) 180 assert.Equal(t, "source", logEvent.TransactionEvent.Source) 181 assert.Equal(t, "destination", logEvent.TransactionEvent.Destination) 182 assert.Equal(t, 10, logEvent.TransactionEvent.Duration) 183 assert.Equal(t, "Inbound", logEvent.TransactionEvent.Direction) 184 assert.Equal(t, string(TxEventStatusPass), logEvent.TransactionEvent.Status) 185 assert.NotNil(t, logEvent.TransactionEvent.Protocol) 186 _, ok := logEvent.TransactionEvent.Protocol.(*Protocol) 187 assert.True(t, ok) 188 189 logEvent, err = NewTransactionEventBuilder(). 190 SetTargetPath("/targetPath"). 191 SetResourcePath("/resourcePath"). 192 SetTenantID("2222"). 193 SetTrcbltPartitionID("2222"). 194 SetEnvironmentName("env2"). 195 SetEnvironmentID("2222"). 196 SetAPICDeployment("bbb"). 197 SetTransactionID("11111"). 198 SetTimestamp(timeStamp). 199 SetID("1111"). 200 SetStatus(TxEventStatusPass). 201 SetDirection("Inbound"). 202 SetProtocolDetail(httpProtocol). 203 Build() 204 205 assert.Nil(t, err) 206 assert.Equal(t, "1.0", logEvent.Version) 207 assert.Equal(t, "2222", logEvent.TenantID) 208 assert.Equal(t, "2222", logEvent.TrcbltPartitionID) 209 assert.Equal(t, "env2", logEvent.EnvironmentName) 210 assert.Equal(t, "2222", logEvent.EnvironmentID) 211 assert.Equal(t, "bbb", logEvent.APICDeployment) 212 assert.Equal(t, "", logEvent.Environment) 213 } 214 215 func TestSummaryBuilder(t *testing.T) { 216 s := httptest.NewServer(http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { 217 token := "{\"access_token\":\"somevalue\",\"expires_in\": 12235677}" 218 resp.Write([]byte(token)) 219 })) 220 defer s.Close() 221 222 cfg := createMapperTestConfig(s.URL, "1111", "aaa", "env1", "1111") 223 // authCfg := cfg.Central.GetAuthConfig() 224 agent.Initialize(cfg.Central) 225 timeStamp := time.Now().Unix() 226 config := redaction.Config{ 227 Path: redaction.Path{ 228 Allowed: []redaction.Show{}, 229 }, 230 Args: redaction.Filter{ 231 Allowed: []redaction.Show{}, 232 Sanitize: []redaction.Sanitize{}, 233 }, 234 RequestHeaders: redaction.Filter{ 235 Allowed: []redaction.Show{}, 236 Sanitize: []redaction.Sanitize{}, 237 }, 238 ResponseHeaders: redaction.Filter{ 239 Allowed: []redaction.Show{}, 240 Sanitize: []redaction.Sanitize{}, 241 }, 242 MaskingCharacters: "{*}", 243 JMSProperties: redaction.Filter{ 244 Allowed: []redaction.Show{}, 245 Sanitize: []redaction.Sanitize{}, 246 }, 247 } 248 249 redactionConfig, _ := config.SetupRedactions() 250 251 logEvent, err := NewTransactionSummaryBuilder(). 252 SetRedactionConfig(redactionConfig). 253 SetTransactionID("11111"). 254 SetTargetPath("/targetPath"). 255 SetResourcePath("/resourcePath"). 256 SetTimestamp(timeStamp). 257 SetStatus(TxSummaryStatusSuccess, "200"). 258 SetDuration(10). 259 SetApplication("1111", "TestApp"). 260 SetTeam("1111"). 261 SetProxy("", "proxy", 1). 262 SetEntryPoint("http", "GET", "/test", "somehost.com"). 263 SetIsInMetricEvent(true). 264 Build() 265 266 assert.Nil(t, err) 267 assert.Equal(t, "1.0", logEvent.Version) 268 assert.Equal(t, "1111", logEvent.TenantID) 269 assert.Equal(t, "1111", logEvent.TrcbltPartitionID) 270 assert.Equal(t, "env1", logEvent.EnvironmentName) 271 assert.Equal(t, "1111", logEvent.EnvironmentID) 272 assert.Equal(t, "aaa", logEvent.APICDeployment) 273 assert.Equal(t, "", logEvent.Environment) 274 assert.Equal(t, timeStamp, logEvent.Stamp) 275 assert.Equal(t, TypeTransactionSummary, logEvent.Type) 276 277 assert.Nil(t, logEvent.TransactionEvent) 278 assert.NotNil(t, logEvent.TransactionSummary) 279 280 assert.Equal(t, string(TxSummaryStatusSuccess), logEvent.TransactionSummary.Status) 281 assert.Equal(t, "200", logEvent.TransactionSummary.StatusDetail) 282 assert.Equal(t, 10, logEvent.TransactionSummary.Duration) 283 284 assert.NotNil(t, logEvent.TransactionSummary.Application) 285 assert.Equal(t, "1111", logEvent.TransactionSummary.Application.ID) 286 assert.Equal(t, "TestApp", logEvent.TransactionSummary.Application.Name) 287 288 assert.NotNil(t, logEvent.TransactionSummary.Team) 289 assert.Equal(t, "1111", logEvent.TransactionSummary.Team.ID) 290 291 assert.NotNil(t, logEvent.TransactionSummary.Proxy) 292 assert.Equal(t, "unknown", logEvent.TransactionSummary.Proxy.ID) 293 assert.Equal(t, "proxy", logEvent.TransactionSummary.Proxy.Name) 294 assert.Equal(t, 1, logEvent.TransactionSummary.Proxy.Revision) 295 296 assert.NotNil(t, logEvent.TransactionSummary.EntryPoint) 297 assert.Equal(t, "http", logEvent.TransactionSummary.EntryPoint.Type) 298 assert.Equal(t, "GET", logEvent.TransactionSummary.EntryPoint.Method) 299 assert.Equal(t, "/{*}", logEvent.TransactionSummary.EntryPoint.Path, "Path was not redacted as it should have been") 300 assert.Equal(t, "somehost.com", logEvent.TransactionSummary.EntryPoint.Host) 301 assert.Equal(t, true, logEvent.TransactionSummary.IsInMetricEvent) 302 303 logEvent, err = NewTransactionSummaryBuilder(). 304 SetRedactionConfig(redactionConfig). 305 SetTargetPath("/targetPath"). 306 SetResourcePath("/resourcePath"). 307 SetDuration(10). 308 Build() 309 assert.Nil(t, logEvent) 310 assert.NotNil(t, err) 311 assert.Equal(t, "transaction entry point details are not set in transaction summary event", err.Error()) 312 313 logEvent, err = NewTransactionSummaryBuilder(). 314 SetRedactionConfig(redactionConfig). 315 SetTargetPath("/targetPath"). 316 SetResourcePath("/resourcePath"). 317 SetEntryPoint("http", "GET", "/test", "somehost.com"). 318 SetDuration(10). 319 Build() 320 assert.Nil(t, logEvent) 321 assert.NotNil(t, err) 322 assert.Equal(t, "status property not set in transaction summary event", err.Error()) 323 324 logEvent, err = NewTransactionSummaryBuilder(). 325 SetRedactionConfig(redactionConfig). 326 SetTargetPath("/targetPath"). 327 SetResourcePath("/resourcePath"). 328 SetEntryPoint("http", "GET", "/test", "somehost.com"). 329 SetDuration(10). 330 SetStatus("Pass", "200"). 331 Build() 332 assert.Nil(t, logEvent) 333 assert.NotNil(t, err) 334 assert.Equal(t, "invalid transaction summary status", err.Error()) 335 336 // Test with explicitly setting properties that are set thru agent config by default 337 logEvent, err = NewTransactionSummaryBuilder(). 338 SetRedactionConfig(redactionConfig). 339 SetTargetPath("/targetPath"). 340 SetResourcePath("/resourcePath"). 341 SetEntryPoint("http", "GET", "/test", "somehost.com"). 342 SetTenantID("2222"). 343 SetTrcbltPartitionID("2222"). 344 SetEnvironmentName("env2"). 345 SetEnvironmentID("2222"). 346 SetAPICDeployment("bbb"). 347 SetTimestamp(timeStamp). 348 SetStatus(TxSummaryStatusSuccess, "200"). 349 SetDuration(10). 350 SetProduct("2222", "productname", "1.0"). 351 SetRunTime("1111", "runtime1"). 352 SetIsInMetricEvent(false). 353 Build() 354 355 assert.Nil(t, err) 356 assert.Equal(t, "1.0", logEvent.Version) 357 assert.Equal(t, "2222", logEvent.TenantID) 358 assert.Equal(t, "2222", logEvent.TrcbltPartitionID) 359 assert.Equal(t, "env2", logEvent.EnvironmentName) 360 assert.Equal(t, "2222", logEvent.EnvironmentID) 361 assert.Equal(t, "bbb", logEvent.APICDeployment) 362 assert.Equal(t, timeStamp, logEvent.Stamp) 363 364 assert.Equal(t, string(TxSummaryStatusSuccess), logEvent.TransactionSummary.Status) 365 assert.Equal(t, "200", logEvent.TransactionSummary.StatusDetail) 366 assert.Equal(t, 10, logEvent.TransactionSummary.Duration) 367 368 assert.Nil(t, logEvent.TransactionSummary.Application) 369 assert.Nil(t, logEvent.TransactionSummary.Team) 370 371 assert.NotNil(t, logEvent.TransactionSummary.Proxy) 372 assert.Equal(t, "unknown", logEvent.TransactionSummary.Proxy.ID) 373 assert.Equal(t, "", logEvent.TransactionSummary.Proxy.Name) 374 assert.Equal(t, 1, logEvent.TransactionSummary.Proxy.Revision) 375 376 assert.NotNil(t, logEvent.TransactionSummary.Product) 377 assert.Equal(t, "2222", logEvent.TransactionSummary.Product.ID) 378 assert.Equal(t, "1.0", logEvent.TransactionSummary.Product.VersionID) 379 380 assert.NotNil(t, logEvent.TransactionSummary.Runtime) 381 assert.Equal(t, "1111", logEvent.TransactionSummary.Runtime.ID) 382 assert.Equal(t, "runtime1", logEvent.TransactionSummary.Runtime.Name) 383 384 assert.NotNil(t, logEvent.TransactionSummary.EntryPoint) 385 assert.Equal(t, "http", logEvent.TransactionSummary.EntryPoint.Type) 386 assert.Equal(t, "GET", logEvent.TransactionSummary.EntryPoint.Method) 387 assert.Equal(t, "/{*}", logEvent.TransactionSummary.EntryPoint.Path, "Path was not redacted as it should have been") 388 assert.Equal(t, "somehost.com", logEvent.TransactionSummary.EntryPoint.Host) 389 assert.Equal(t, false, logEvent.TransactionSummary.IsInMetricEvent) 390 } 391 392 func TestLogRedactionOverride(t *testing.T) { 393 394 redactionConfig := &redactionTest{} 395 396 timeStamp := time.Now().Unix() 397 398 httpProtocol, _ := createHTTPProtocol("/testuri", "GET", "{}", "{}", 200, 10, 10, redactionConfig) 399 400 logEvent, err := NewTransactionEventBuilder(). 401 SetTargetPath("/targetPath"). 402 SetResourcePath("/resourcePath"). 403 SetTenantID("2222"). 404 SetTrcbltPartitionID("2222"). 405 SetEnvironmentName("env2"). 406 SetEnvironmentID("2222"). 407 SetAPICDeployment("bbb"). 408 SetTransactionID("11111"). 409 SetTimestamp(timeStamp). 410 SetID("1111"). 411 SetStatus(TxEventStatusPass). 412 SetDirection("Inbound"). 413 SetProtocolDetail(httpProtocol). 414 Build() 415 assert.Nil(t, err) 416 assert.NotNil(t, logEvent) 417 assert.True(t, redactionConfig.uriRedactionCalled) 418 assert.False(t, redactionConfig.pathRedactionCalled) 419 assert.True(t, redactionConfig.queryArgsRedactionCalled) 420 assert.False(t, redactionConfig.queryArgsRedactionStringCalled) 421 assert.False(t, redactionConfig.requestHeadersRedactionCalled) 422 assert.False(t, redactionConfig.responseHeadersRedactionCalled) 423 assert.False(t, redactionConfig.jmsPropertiesRedactionCalled) 424 425 redactionConfig = &redactionTest{} 426 427 logEvent, err = NewTransactionSummaryBuilder(). 428 SetRedactionConfig(redactionConfig). 429 SetTargetPath("/targetPath"). 430 SetResourcePath("/resourcePath"). 431 SetEntryPoint("http", "GET", "/test", "somehost.com"). 432 SetTenantID("2222"). 433 SetTrcbltPartitionID("2222"). 434 SetEnvironmentName("env2"). 435 SetEnvironmentID("2222"). 436 SetAPICDeployment("bbb"). 437 SetTimestamp(timeStamp). 438 SetStatus(TxSummaryStatusSuccess, "200"). 439 SetDuration(10). 440 SetProduct("2222", "productname", "1.0"). 441 SetRunTime("1111", "runtime1"). 442 SetIsInMetricEvent(false). 443 Build() 444 assert.Nil(t, err) 445 assert.NotNil(t, logEvent) 446 assert.True(t, redactionConfig.uriRedactionCalled) 447 assert.False(t, redactionConfig.pathRedactionCalled) 448 assert.False(t, redactionConfig.queryArgsRedactionCalled) 449 assert.False(t, redactionConfig.queryArgsRedactionStringCalled) 450 assert.False(t, redactionConfig.requestHeadersRedactionCalled) 451 assert.False(t, redactionConfig.responseHeadersRedactionCalled) 452 assert.False(t, redactionConfig.jmsPropertiesRedactionCalled) 453 }