@@ -5,6 +5,87 @@ import (
55 "testing"
66)
77
8+ func TestMongoDB_ExtraData (t * testing.T ) {
9+ tests := []struct {
10+ name string
11+ data string
12+ wantHost string
13+ wantUsername string
14+ wantDatabase string
15+ }{
16+ {
17+ name : "single host with port" ,
18+ data : `mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017` ,
19+ wantHost : "mongodb0.example.com:27017" ,
20+ wantUsername : "myDBReader" ,
21+ },
22+ {
23+ name : "single host without port" ,
24+ data : `mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com` ,
25+ wantHost : "mongodb0.example.com" ,
26+ wantUsername : "myDBReader" ,
27+ },
28+ {
29+ name : "with options and no database" ,
30+ data : `mongodb://username:password@host.docker.internal:27018/?authMechanism=PLAIN&tls=true` ,
31+ wantHost : "host.docker.internal:27018" ,
32+ wantUsername : "username" ,
33+ },
34+ {
35+ name : "cosmos db style with database" ,
36+ data : `mongodb://agenda-live:m21w7PFfRXQwfHZU1Fgx0rTX29ZBQaWMODLeAjsmyslVcMmcmy6CnLyu3byVDtdLYcCokze8lIE4KyAgSCGZxQ==@agenda-live.mongo.cosmos.azure.com:10255/csb-db?retryWrites=false&ssl=true&replicaSet=globaldb&maxIdleTimeMS=120000&appName=@agenda-live@` ,
37+ wantHost : "agenda-live.mongo.cosmos.azure.com:10255" ,
38+ wantUsername : "agenda-live" ,
39+ wantDatabase : "csb-db" ,
40+ },
41+ {
42+ name : "with database in path" ,
43+ data : `mongodb://db-user:db-password@mongodb-instance:27017/db-name` ,
44+ wantHost : "mongodb-instance:27017" ,
45+ wantUsername : "db-user" ,
46+ wantDatabase : "db-name" ,
47+ },
48+ }
49+
50+ for _ , tt := range tests {
51+ t .Run (tt .name , func (t * testing.T ) {
52+ s := Scanner {}
53+ results , err := s .FromData (context .Background (), false , []byte (tt .data ))
54+ if err != nil {
55+ t .Fatalf ("FromData() error = %v" , err )
56+ }
57+ if len (results ) == 0 {
58+ t .Fatal ("expected at least one result" )
59+ }
60+ r := results [0 ]
61+ if got := r .ExtraData ["host" ]; got != tt .wantHost {
62+ t .Errorf ("ExtraData[host] = %q, want %q" , got , tt .wantHost )
63+ }
64+ if tt .wantUsername != "" {
65+ if got := r .ExtraData ["username" ]; got != tt .wantUsername {
66+ t .Errorf ("ExtraData[username] = %q, want %q" , got , tt .wantUsername )
67+ }
68+ } else {
69+ if got , ok := r .ExtraData ["username" ]; ok {
70+ t .Errorf ("ExtraData[username] should be absent, got %q" , got )
71+ }
72+ }
73+ if tt .wantDatabase != "" {
74+ if got := r .ExtraData ["database" ]; got != tt .wantDatabase {
75+ t .Errorf ("ExtraData[database] = %q, want %q" , got , tt .wantDatabase )
76+ }
77+ } else {
78+ if got , ok := r .ExtraData ["database" ]; ok {
79+ t .Errorf ("ExtraData[database] should be absent, got %q" , got )
80+ }
81+ }
82+ if got := r .ExtraData ["rotation_guide" ]; got == "" {
83+ t .Error ("ExtraData[rotation_guide] should still be present" )
84+ }
85+ })
86+ }
87+ }
88+
889func TestMongoDB_Pattern (t * testing.T ) {
990 tests := []struct {
1091 name string
0 commit comments