@@ -294,25 +294,68 @@ func TestObfuscateSensitiveData_MatchButNothingToObfuscate(t *testing.T) {
294294 assert .True (t , isField )
295295 assert .Equal (t , data , result )
296296}
297-
298297func TestObfuscateSensitiveData_CommandLineWithArgs (t * testing.T ) {
299- data := "/usr/bin/custom_cmd -pwd 1234 -arg2 abc"
300- expected := "/usr/bin/custom_cmd -pwd <HIDDEN> -arg2 abc"
301- matched , isField , actual := ObfuscateSensitiveData (data )
298+ tests := []struct {
299+ name string
300+ data string
301+ expected string
302+ isField bool
303+ }{
304+ {
305+ name : "Custom command with password and mongodb uri" ,
306+ data : "/usr/bin/custom_cmd -pwd 1234 --mongodb.uri mongodb://admin:testrw@host:27017/admin -arg2 abc" ,
307+ expected : "/usr/bin/custom_cmd -pwd <HIDDEN> --mongodb.uri mongodb://admin:<HIDDEN>@host:27017/admin -arg2 abc" ,
308+ isField : false ,
309+ },
310+ {
311+ name : "Prometheus exporter with mongodb uri and sensitive word in password" ,
312+ data : "/usr/local/prometheus-exporters/bin/mongodb3-exporter --mongodb.uri mongodb://admin:testpass@localhost:27017/admin --no-mongodb.direct-connect --collector.dbstats --collector.collstats" ,
313+ expected : "/usr/local/prometheus-exporters/bin/mongodb3-exporter --mongodb.uri mongodb://admin:<HIDDEN>@localhost:27017/admin --no-mongodb.direct-connect --collector.dbstats --collector.collstats" ,
314+ isField : true ,
315+ },
316+ }
302317
303- assert .True (t , matched )
304- assert .False (t , isField )
305- assert .Equal (t , expected , actual )
318+ for _ , tt := range tests {
319+ t .Run (tt .name , func (t * testing.T ) {
320+ t .Parallel ()
321+ matched , isField , actual := ObfuscateSensitiveData (tt .data )
322+ assert .True (t , matched )
323+ assert .Equal (t , tt .isField , isField )
324+ assert .Equal (t , tt .expected , actual )
325+ })
326+ }
306327}
307328
308329func TestObfuscateSensitiveData_ConfigProtocolOutput (t * testing.T ) {
309- data := `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://root:supercomplex@localhost:17017","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"passw0rd","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}`
310- expected := `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://root:<HIDDEN>@localhost:17017","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"<HIDDEN>","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}`
311- matched , isField , actual := ObfuscateSensitiveData (data )
330+ tests := []struct {
331+ name string
332+ data string
333+ expected string
334+ isField bool
335+ }{
336+ {
337+ name : "Config protocol output with password and mongodb uri" ,
338+ data : `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://root:supercomplex@localhost:17017","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"passw0rd","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}` , //nolint
339+ expected : `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://root:<HIDDEN>@localhost:17017","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"<HIDDEN>","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}` , //nolint
340+ isField : false ,
341+ },
342+ {
343+ name : "Config protocol output with special characters password and mongodb uri" ,
344+ data : `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://user:r#wsq@localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://newrelic:rW#ord@host:27017/admin","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"passw0rd","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}` , //nolint
345+ expected : `{"config_protocol_version":"1","action":"register_config","config_name":"cfg-nri-ibmmq","config":{"variables":{},"integrations":[{"name":"nri-prometheus","config":{"standalone":false,"verbose":"1","transformations":[],"integration_metadata":{"version":"0.3.0","name":"nri-ibmmq""targets":["urls":["http://user:<HIDDEN>@localhost:9157"]}]}},{"name":"ibmmq-exporter","timeout":0, "exec":[ "/usr/local/prometheus-exporters/bin/ibmmq-exporter","--mongodb.uri","mongodb://newrelic:<HIDDEN>@host:27017/admin","--ibmmq.connName","localhost(1414)","--ibmmq.queueManager","QM1","--ibmmq.channel","DEV.ADMIN.SVRCONN","--ibmmq.userid","admin","--ibmmq.httpListenPort","9157","--ibmmq.monitoredQueues","!SYSTEM.*,*","--ibmmq.monitoredChannels","*","--ibmmq.httpMetricPath","/metrics","--ibmmq.useStatus"],"env":{"IBMMQ_CONNECTION_PASSWORD":"<HIDDEN>","LD_LIBRARY_PATH":"/opt/mqm/lib64:/usr/lib64","HOME":"/tmp"}}]}}` , //nolint
346+ isField : false ,
347+ },
348+ }
312349
313- assert .True (t , matched )
314- assert .False (t , isField )
315- assert .Equal (t , expected , actual )
350+ for _ , tt := range tests {
351+ t .Run (tt .name , func (t * testing.T ) {
352+ t .Parallel ()
353+ matched , isField , actual := ObfuscateSensitiveData (tt .data )
354+ assert .True (t , matched )
355+ assert .Equal (t , tt .isField , isField )
356+ assert .Equal (t , tt .expected , actual )
357+ })
358+ }
316359}
317360
318361func TestObfuscateSensitiveData_EnvironmentVariable (t * testing.T ) {
@@ -417,7 +460,9 @@ func TestObfuscateSensitiveData_ObfuscateSensitiveDataFromArray(t *testing.T) {
417460 "obfuscare_next_pass" ,
418461 "12345" ,
419462 "NRIA_KEY=1234" ,
463+ "NewrelicMongoDB=pa$$word@" ,
420464 "final" ,
465+ "mongodb_uri mongodb://newrelictest:NewrelicMongoDB@localhost:27017/admin" ,
421466 }
422467
423468 expected := []string {
@@ -427,7 +472,9 @@ func TestObfuscateSensitiveData_ObfuscateSensitiveDataFromArray(t *testing.T) {
427472 "obfuscare_next_pass" ,
428473 "<HIDDEN>" ,
429474 "NRIA_KEY=<HIDDEN>" ,
475+ "NewrelicMongoDB=pa$$word@" ,
430476 "final" ,
477+ "mongodb_uri mongodb://newrelictest:<HIDDEN>@localhost:27017/admin" ,
431478 }
432479
433480 actual := ObfuscateSensitiveDataFromArray (data )
0 commit comments