From 928b857a6e853339f68d2ad16d0f8376bb275357 Mon Sep 17 00:00:00 2001 From: Yana Kurysheva Date: Tue, 7 Nov 2023 16:58:27 +0300 Subject: [PATCH] Host check + tests --- config.go | 7 ++++++- config_test.go | 17 +++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/config.go b/config.go index ccd527c..7d197fa 100644 --- a/config.go +++ b/config.go @@ -118,6 +118,11 @@ func ParseDSN(dsn string) (*Config, error) { if err != nil { return nil, err } + + if u.Host == "" { + return nil, fmt.Errorf("invalid host") + } + cfg := NewConfig() cfg.Scheme, cfg.Host = u.Scheme, u.Host @@ -184,7 +189,7 @@ func parseDSNParams(cfg *Config, params map[string][]string) (err error) { func ensureHavePort(addr string) string { if _, _, err := net.SplitHostPort(addr); err != nil { // we get the missing port error here - if addr[0] == '[' && addr[len(addr)-1] == ']' { + if len(addr) > 1 && addr[0] == '[' && addr[len(addr)-1] == ']' { // ipv6 brackets addr = addr[1 : len(addr)-1] } diff --git a/config_test.go b/config_test.go index cc0667b..0d14cca 100644 --- a/config_test.go +++ b/config_test.go @@ -1,6 +1,7 @@ package clickhouse import ( + "fmt" "testing" "time" @@ -53,14 +54,18 @@ func TestDefaultConfig(t *testing.T) { } func TestParseWrongDSN(t *testing.T) { - testCases := []string{ - "http://localhost:8123/?database=test", - "http://localhost:8123/?default_format=Native", - "http://localhost:8123/?query=SELECT%201", + testCases := []struct { + dsn string + errExpected error + }{ + {dsn: "http:bad://localhost:8123/?database=test", errExpected: fmt.Errorf("invalid host")}, + {dsn: "http://localhost:8123/?database=test", errExpected: fmt.Errorf("unknown option 'database'")}, + {dsn: "http://localhost:8123/?default_format=Native", errExpected: fmt.Errorf("unknown option 'default_format'")}, + {dsn: "http://localhost:8123/?query=SELECT%201", errExpected: fmt.Errorf("unknown option 'query'")}, } for _, tc := range testCases { - _, err := ParseDSN(tc) - assert.Error(t, err) + _, err := ParseDSN(tc.dsn) + assert.Equal(t, tc.errExpected, err) } }