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  }