github.com/epsagon/epsagon-go@v1.39.0/tracer/mask_ignored_keys_test.go (about)

     1  package tracer
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/epsagon/epsagon-go/protocol"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("mask_ignored_keys", func() {
    12  	Describe("maskEventIgnoredKeys", func() {
    13  		config := &Config{
    14  			Disable: true,
    15  		}
    16  		testTracer := CreateTracer(config).(*epsagonTracer)
    17  		Context("sanity", func() {
    18  			It("masks sanity test", func() {
    19  				event := &protocol.Event{
    20  					Resource: &protocol.Resource{
    21  						Metadata: map[string]string{
    22  							"not-ignored": "hello",
    23  							"ignored":     "bye",
    24  						},
    25  					},
    26  				}
    27  				ignoredKeys := []string{"ignored"}
    28  				testTracer.Config.IgnoredKeys = ignoredKeys
    29  				testTracer.maskEventIgnoredKeys(event, ignoredKeys)
    30  				Expect(event.Resource.Metadata["not-ignored"]).To(Equal("hello"))
    31  				Expect(event.Resource.Metadata["ignored"]).To(Equal(maskedValue))
    32  			})
    33  		})
    34  		Context("test matrix", func() {
    35  			type testCase struct {
    36  				metadata         map[string]string
    37  				ignoredKeys      []string
    38  				expectedMetadata map[string]string
    39  			}
    40  			testMatrix := map[string]testCase{
    41  				"handles empty metadata": {
    42  					metadata:         map[string]string{},
    43  					ignoredKeys:      []string{"ignored"},
    44  					expectedMetadata: map[string]string{},
    45  				},
    46  				"handles empty ignoredKeys": {
    47  					metadata:         map[string]string{"ignored": "bye"},
    48  					ignoredKeys:      []string{},
    49  					expectedMetadata: map[string]string{"ignored": "bye"},
    50  				},
    51  				"passes matrix sanity": {
    52  					metadata:         map[string]string{"to-be-ignored": "bye", "not-ignored": "hello"},
    53  					ignoredKeys:      []string{"to-be-ignored"},
    54  					expectedMetadata: map[string]string{"to-be-ignored": maskedValue, "not-ignored": "hello"},
    55  				},
    56  				"handles json map without ignored keys": {
    57  					metadata:         map[string]string{"not-ignored": "hello", "other-not-ignored": "{\"hello\":\"world\"}"},
    58  					ignoredKeys:      []string{"to-be-ignored"},
    59  					expectedMetadata: map[string]string{"not-ignored": "hello", "other-not-ignored": "{\"hello\":\"world\"}"},
    60  				},
    61  				"handles json map *with* ignored keys": {
    62  					metadata:         map[string]string{"not-ignored": "hello", "other-not-ignored": "{\"to-be-ignored\":\"world\"}"},
    63  					ignoredKeys:      []string{"to-be-ignored"},
    64  					expectedMetadata: map[string]string{"not-ignored": "hello", "other-not-ignored": fmt.Sprintf("{\"to-be-ignored\":\"%s\"}", maskedValue)},
    65  				},
    66  				"handles json nested array and map without ignored keys": {
    67  					metadata:         map[string]string{"not-ignored": "hello", "other-not-ignored": "[{\"hello\":\"world\"},{\"erez\":\"is-cool\"}]"},
    68  					ignoredKeys:      []string{"to-be-ignored"},
    69  					expectedMetadata: map[string]string{"not-ignored": "hello", "other-not-ignored": "[{\"hello\":\"world\"},{\"erez\":\"is-cool\"}]"},
    70  				},
    71  				"handles json nested array and map *with* ignored keys": {
    72  					metadata: map[string]string{
    73  						"not-ignored":       "hello",
    74  						"other-not-ignored": "[{\"to-be-ignored\":\"world\"},{\"erez\":\"is-cool\"}]",
    75  					},
    76  					ignoredKeys: []string{"to-be-ignored"},
    77  					expectedMetadata: map[string]string{
    78  						"not-ignored": "hello",
    79  						"other-not-ignored": fmt.Sprintf(
    80  							"[{\"to-be-ignored\":\"%s\"},{\"erez\":\"is-cool\"}]",
    81  							maskedValue),
    82  					},
    83  				},
    84  				"handles json nested map *with* ignored keys": {
    85  					metadata: map[string]string{
    86  						"not-ignored":       "hello",
    87  						"other-not-ignored": "{\"wait\":{\"for\":{\"it\":{\"to-be-ignored\":\"boom\"},\"not\":[\"I\",\"are\",\"baboon\"]},\"not\":\"it\"}}",
    88  					},
    89  					ignoredKeys: []string{"to-be-ignored"},
    90  					expectedMetadata: map[string]string{
    91  						"not-ignored": "hello",
    92  						"other-not-ignored": fmt.Sprintf(
    93  							"{\"wait\":{\"for\":{\"it\":{\"to-be-ignored\":\"%s\"},\"not\":[\"I\",\"are\",\"baboon\"]},\"not\":\"it\"}}",
    94  							maskedValue,
    95  						),
    96  					},
    97  				},
    98  			}
    99  			for testName, value := range testMatrix {
   100  				value := value
   101  				It(testName, func() {
   102  					testMetadata := make(map[string]string)
   103  					for k, v := range value.metadata {
   104  						testMetadata[k] = v
   105  					}
   106  					event := &protocol.Event{
   107  						Resource: &protocol.Resource{
   108  							Metadata: testMetadata,
   109  						},
   110  					}
   111  					testTracer.maskEventIgnoredKeys(event, value.ignoredKeys)
   112  					Expect(event.Resource.Metadata).To(Equal(value.expectedMetadata))
   113  				})
   114  			}
   115  		})
   116  	})
   117  })