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  }