github.com/netdata/go.d.plugin@v0.58.1/modules/mysql/mycnf_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package mysql 4 5 import ( 6 "os" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func Test_dsnFromFile(t *testing.T) { 14 user := getUser() 15 tests := map[string]struct { 16 config string 17 expectedDSN string 18 wantErr bool 19 }{ 20 "socket": { 21 config: ` 22 [client] 23 socket=/opt/bitnami/mariadb/tmp/mysql.sock 24 `, 25 expectedDSN: user + "@unix(/opt/bitnami/mariadb/tmp/mysql.sock)/", 26 }, 27 "socket, host, port": { 28 config: ` 29 [client] 30 host=10.0.0.0 31 port=3307 32 socket=/opt/bitnami/mariadb/tmp/mysql.sock 33 `, 34 expectedDSN: user + "@unix(/opt/bitnami/mariadb/tmp/mysql.sock)/", 35 }, 36 "host, port": { 37 config: ` 38 [client] 39 host=10.0.0.0 40 port=3307 41 `, 42 expectedDSN: user + "@tcp(10.0.0.0:3307)/", 43 }, 44 "only host": { 45 config: ` 46 [client] 47 host=10.0.0.0 48 `, 49 expectedDSN: user + "@tcp(10.0.0.0:3306)/", 50 }, 51 "only port": { 52 config: ` 53 [client] 54 port=3307 55 `, 56 expectedDSN: user + "@tcp(localhost:3307)/", 57 }, 58 "user, password": { 59 config: ` 60 [client] 61 user=user 62 password=password 63 `, 64 expectedDSN: "user:password@/", 65 }, 66 "empty": { 67 config: ` 68 [client] 69 `, 70 expectedDSN: user + "@/", 71 }, 72 "no client section": { 73 config: ` 74 [no_client] 75 `, 76 wantErr: true, 77 }, 78 } 79 pattern := "netdata-godplugin-mysql-dsnFromFile-*" 80 dir, err := os.MkdirTemp(os.TempDir(), pattern) 81 require.NoError(t, err) 82 defer func() { _ = os.RemoveAll(dir) }() 83 84 for name, test := range tests { 85 t.Run(name, func(t *testing.T) { 86 f, err := os.CreateTemp(dir, name) 87 require.NoError(t, err) 88 _ = f.Close() 89 defer func() { _ = os.Remove(f.Name()) }() 90 _ = os.WriteFile(f.Name(), []byte(test.config), 0644) 91 92 if dsn, err := dsnFromFile(f.Name()); test.wantErr { 93 assert.Error(t, err) 94 } else { 95 assert.NoError(t, err) 96 assert.Equal(t, test.expectedDSN, dsn) 97 } 98 }) 99 } 100 }