github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/util/mask_test.go (about) 1 package util 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/mundipagg/boleto-api/config" 9 "github.com/mundipagg/boleto-api/log" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var jsonParameters = []UtilTestParameter{ 14 {Input: `{"access_token":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"access_token":"[REDACTED]"`}, 15 {Input: `{"refresh_token":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"refresh_token":"[REDACTED]"`}, 16 {Input: `{"AUTENTICACAO":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"AUTENTICACAO":"[REDACTED]"`}, 17 {Input: `{"CdtrId":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"CdtrId":"[REDACTED]"`}, 18 {Input: `{"ticket":"token","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`}, 19 {Input: `{"nested":{"access_token":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"access_token":"[REDACTED]"`}, 20 {Input: `{"nested":{"refresh_token":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"refresh_token":"[REDACTED]"`}, 21 {Input: `{"nested":{"AUTENTICACAO":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"AUTENTICACAO":"[REDACTED]"`}, 22 {Input: `{"nested":{"CdtrId":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"CdtrId":"[REDACTED]"`}, 23 {Input: `{"nested":{"ticket":"token"},"token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`}, 24 {Input: `{"nested":"{\"ticket\":\"token\"}","token_type":"Bearer","expires_in":1200,"scope":"cobranca.registro-boletos"}`, Expected: `"ticket":"[REDACTED]"`}, 25 } 26 27 var xmlParameters = []UtilTestParameter{ 28 {Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 29 <Body><Create dlwmin="http://service.com/"> 30 <Response> 31 <retCode>0</retCode> 32 <ticket>token</ticket> 33 </Response> 34 </Create></Body> </Envelope>`, Expected: `<ticket>[REDACTED]</ticket>`}, 35 {Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 36 <Body><Create dlwmin="http://service.com/"> 37 <Response> 38 <retCode>0</retCode> 39 <refresh_token>token</refresh_token> 40 </Response> 41 </Create></Body> </Envelope>`, Expected: `<refresh_token>[REDACTED]</refresh_token>`}, 42 {Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 43 <Body><Create dlwmin="http://service.com/"> 44 <Response> 45 <retCode>0</retCode> 46 <AUTENTICACAO>token</AUTENTICACAO> 47 </Response> 48 </Create></Body> </Envelope>`, Expected: `<AUTENTICACAO>[REDACTED]</AUTENTICACAO>`}, 49 {Input: `<Envelope soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 50 <Body><Create dlwmin="http://service.com/"> 51 <Response> 52 <retCode>0</retCode> 53 <CdtrId>token</CdtrId> 54 </Response> 55 </Create></Body> </Envelope>`, Expected: `<CdtrId>[REDACTED]</CdtrId>`}, 56 } 57 58 var queryParamsParameters = []UtilTestParameter{ 59 {Input: `scope=readonly&grant_type=client_credentials&clientSecret=token`, Expected: `clientSecret=[REDACTED]`}, 60 {Input: `scope=readonly&grant_type=client_credentials&ticket=token`, Expected: `ticket=[REDACTED]`}, 61 {Input: `scope=readonly&grant_type=client_credentials&CdtrId=123`, Expected: `CdtrId=[REDACTED]`}, 62 {Input: `scope=readonly&grant_type=client_credentials&clientId=token`, Expected: `clientId=[REDACTED]`}, 63 } 64 65 var ( 66 clientId = "VsKkTASTTdri0" 67 clientSecret = "Tkms6VwoPdjLWFCLOLhYt_KbV2hIvdWqmNKQX7XOVclTnigKXmn6CqQMf2UxhVoojmqvXc7fhTCjzKCuX9mxiw2" 68 ) 69 70 func TestMaskJsonContentFieldsWithMaskLogsTrue(t *testing.T) { 71 mask := setEnv("true") 72 73 for _, fact := range jsonParameters { 74 result := mask.MaskJsonContentFields(fact.Input.(string)) 75 assert.Contains(t, result, fact.Expected, "O Payload deve ser mascarado corretamente") 76 } 77 } 78 79 func TestMaskJsonContentFieldsWithMaskLogsFalse(t *testing.T) { 80 mask := setEnv("false") 81 82 for _, fact := range jsonParameters { 83 result := mask.MaskJsonContentFields(fact.Input.(string)) 84 assert.NotContains(t, result, fact.Expected, "O Payload não deve ser mascarado") 85 } 86 } 87 func TestMaskXmlContentFieldsWithMaskLogsTrue(t *testing.T) { 88 mask := setEnv("true") 89 90 for _, fact := range xmlParameters { 91 result := mask.MaskXMLContentFields(fact.Input.(string)) 92 assert.Contains(t, result, fact.Expected, "O Payload deve ser mascarado corretamente") 93 } 94 } 95 func TestMaskXmlContentFieldsWithMaskLogsFalse(t *testing.T) { 96 mask := setEnv("false") 97 98 for _, fact := range xmlParameters { 99 result := mask.MaskXMLContentFields(fact.Input.(string)) 100 assert.NotContains(t, result, fact.Expected, "O Payload não deve ser mascarado") 101 } 102 } 103 104 func TestMaskQueryParamsFieldsWithMaskLogsTrue(t *testing.T) { 105 mask := setEnv("true") 106 107 for _, fact := range queryParamsParameters { 108 result := mask.MaskQueryParamsContentFields(fact.Input.(string)) 109 assert.Contains(t, result, fact.Expected, "O payload deve ser mascarado corretamente") 110 } 111 } 112 func TestMaskQueryParamsFieldsWithMaskLogsFalse(t *testing.T) { 113 mask := setEnv("false") 114 for _, fact := range queryParamsParameters { 115 result := mask.MaskQueryParamsContentFields(fact.Input.(string)) 116 assert.NotContains(t, result, fact.Expected, "O payload não deve ser mascarado") 117 } 118 } 119 120 func TestQueryParamsToMap(t *testing.T) { 121 mask := setEnv("true") 122 123 queryParamsInput := fmt.Sprintf(`scope=readonly&grant_type=client_credentials&clientId=%v&clientSecret=%v`, clientId, clientSecret) 124 mapExpected := queryParamsMapFactory() 125 126 result := mask.queryParamsStringToMap(queryParamsInput) 127 assert.NotNil(t, result) 128 assert.Len(t, result, 4) 129 130 for k, v := range mapExpected { 131 assert.Contains(t, result, k) 132 assert.Equal(t, v, result[k]) 133 } 134 } 135 136 func TestMapToQueryParams(t *testing.T) { 137 mask := setEnv("true") 138 mapInput := queryParamsMapFactory() 139 140 result := mask.mapToQueryParams(mapInput) 141 142 assert.Contains(t, result, "scope=readonly") 143 assert.Contains(t, result, "grant_type=client_credentials") 144 assert.Contains(t, result, fmt.Sprintf("clientId=%v", clientId)) 145 assert.Contains(t, result, fmt.Sprintf("clientSecret=%v", clientSecret)) 146 } 147 148 func queryParamsMapFactory() map[string]interface{} { 149 m := map[string]interface{}{ 150 "scope": "readonly", 151 "grant_type": "client_credentials", 152 "clientId": clientId, 153 "clientSecret": clientSecret, 154 } 155 156 return m 157 } 158 159 func setEnv(maskLogs string) *Mask { 160 os.Setenv("MASK_LOGS", maskLogs) 161 config.Install(true, true, false) 162 163 log := log.CreateLog() 164 mask := NewMask(log, "") 165 166 return mask 167 }