master
go 100 lines 1.83 KB
Raw
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 }