Skip to content

Commit 6952d72

Browse files
committed
Refactor tests, remove unnecessary keys
1 parent 2c567c9 commit 6952d72

17 files changed

+68
-135
lines changed

DEV_GUIDE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ docker run -d -p 8812:8812 -p 9000:9000 --name secure-questdb-server --ulimit no
4141

4242
### Now start the container using the config-secure settings
4343

44-
docker run -d -p 9000:9000 -p 8812:8812 --name secure-questdb-server --ulimit nofile=262144:262144 -v $PWD/config-secure/keys:/var/lib/questdb/conf/keys -v $PWD/config-secure/server.conf:/var/lib/questdb/conf/server.conf questdb/questdb-enterprise
44+
docker run -d -p 9000:9000 -p 8812:8812 --name secure-questdb-server --ulimit nofile=262144:262144 -v $PWD/keys:/var/lib/questdb/conf/keys -v $PWD/config-secure/server.conf:/var/lib/questdb/conf/server.conf questdb/questdb-enterprise
4545

4646
### Login to the container and add the ca cert to trusted certs
4747

config-secure/server.conf

-3
This file was deleted.

config/keys/server.crt

-19
This file was deleted.

config/keys/server.key

-28
This file was deleted.

config/server.conf

-3
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

pkg/plugin/driver.go

-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ func getClientVersion(ctx context.Context) string {
4646
return result
4747
}
4848

49-
// Connect opens a sql.DB connection using datasource settings
5049
func (h *QuestDB) Connect(config backend.DataSourceInstanceSettings, message json.RawMessage) (*sql.DB, error) {
5150
settings, err := LoadSettings(config)
5251
if err != nil {

pkg/plugin/driver_test.go

+47-53
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"time"
1818

1919
"github.com/docker/docker/api/types/container"
20-
"github.com/docker/go-units"
2120
"github.com/grafana/grafana-plugin-sdk-go/backend"
2221
"github.com/grafana/grafana-plugin-sdk-go/data"
2322
"github.com/grafana/grafana-plugin-sdk-go/data/sqlutil"
@@ -57,35 +56,29 @@ func TestMain(m *testing.M) {
5756
}
5857
questDbName := GetEnv("QUESTDB_NAME", "questdb/questdb")
5958
questDbVersion := GetEnv("QUESTDB_VERSION", "latest")
59+
questDbTlsEnabled := GetEnv("QUESTDB_TLS_ENABLED", "false")
6060
fmt.Printf("Using Docker for tests with QuestDB %s:%s\n", questDbName, questDbVersion)
61+
6162
cwd, err := os.Getwd()
6263
if err != nil {
6364
panic(err)
6465
}
6566

66-
keysPath := "../../config/keys"
67-
serverConfPath := "../../config/server.conf"
67+
keysPath := "../../keys"
6868

6969
req := testcontainers.ContainerRequest{
7070
Env: map[string]string{
71-
"TZ": "UTC",
71+
"TZ": "UTC",
72+
"QDB_PG_TLS_ENABLED": questDbTlsEnabled,
73+
"QDB_PG_TLS_CERT_PATH": "/var/lib/questdb/conf/keys/server.crt",
74+
"QDB_PG_TLS_PRIVATE_KEY_PATH": "/var/lib/questdb/conf/keys/server.key",
7275
},
7376
ExposedPorts: []string{"9000/tcp", "8812/tcp"},
7477
HostConfigModifier: func(config *container.HostConfig) {
7578
config.Mounts = append(config.Mounts,
76-
mount.Mount{Source: path.Join(cwd, serverConfPath), Target: "/var/lib/questdb/conf/server.conf", ReadOnly: true, Type: mount.TypeBind},
7779
mount.Mount{Source: path.Join(cwd, keysPath), Target: "/var/lib/questdb/conf/keys", ReadOnly: true, Type: mount.TypeBind})
7880
},
79-
Image: fmt.Sprintf("%s:%s", questDbName, questDbVersion),
80-
Resources: container.Resources{
81-
Ulimits: []*units.Ulimit{
82-
{
83-
Name: "nofile",
84-
Hard: 262144,
85-
Soft: 262144,
86-
},
87-
},
88-
},
81+
Image: fmt.Sprintf("%s:%s", questDbName, questDbVersion),
8982
WaitingFor: wait.ForLog("A server-main enjoy"),
9083
}
9184
questdbContainer, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
@@ -115,45 +108,40 @@ func TestConnect(t *testing.T) {
115108
host := getEnv("QUESTDB_HOST", "localhost")
116109
username := getEnv("QUESTDB_USERNAME", "admin")
117110
password := getEnv("QUESTDB_PASSWORD", "quest")
118-
tlsMode := getEnv("QUESTDB_SSL", "disable")
119-
queryTimeoutNumber := 3600
120-
queryTimeoutString := "3600"
121-
questdb := plugin.QuestDB{}
122-
t.Run("should not error when valid settings passed", func(t *testing.T) {
123-
secure := map[string]string{}
124-
secure["password"] = password
125-
settings := backend.DataSourceInstanceSettings{JSONData: []byte(fmt.Sprintf(`{ "server": "%s", "port": %s, "username": "%s", "queryTimeout": "%s", "tlsMode": "%s"}`,
126-
host, port, username, queryTimeoutString, tlsMode)), DecryptedSecureJSONData: secure}
127-
_, err := questdb.Connect(settings, json.RawMessage{})
128-
assert.Equal(t, nil, err)
129-
})
130-
t.Run("should not error when valid settings passed - with query timeout as number", func(t *testing.T) {
131-
secure := map[string]string{}
132-
secure["password"] = password
133-
settings := backend.DataSourceInstanceSettings{JSONData: []byte(fmt.Sprintf(`{ "server": "%s", "port": %s, "username": "%s", "queryTimeout": %d, "tlsMode": "%s"}`,
134-
host, port, username, queryTimeoutNumber, tlsMode)), DecryptedSecureJSONData: secure}
135-
_, err := questdb.Connect(settings, json.RawMessage{})
136-
assert.Equal(t, nil, err)
137-
})
138-
}
111+
tlsEnabled := getEnv("QUESTDB_TLS_ENABLED", "false")
112+
queryTimeout := 3600
113+
connectTimeout := 1000
114+
maxOpenConns := 10
115+
maxIdleConns := 5
116+
maxConnLife := 14400
139117

140-
func TestPgWireConnect(t *testing.T) {
141-
port := getEnv("QUESTDB_PORT", "8812")
142-
host := getEnv("QUESTDB_HOST", "localhost")
143-
username := getEnv("QUESTDB_USERNAME", "admin")
144-
password := getEnv("QUESTDB_PASSWORD", "quest")
145-
tlsMode := getEnv("QUESTDB_SSL", "disable")
146118
questdb := plugin.QuestDB{}
147-
t.Run("should not error when valid settings passed", func(t *testing.T) {
148-
secure := map[string]string{}
149-
secure["password"] = password
150-
settings := backend.DataSourceInstanceSettings{JSONData: []byte(fmt.Sprintf(`{ "server": "%s", "port": %s, "username": "%s", "password": "%s", "tlsMode": "%s"}`, host, port, username, password, tlsMode)), DecryptedSecureJSONData: secure}
151-
_, err := questdb.Connect(settings, json.RawMessage{})
152-
assert.Equal(t, nil, err)
153-
})
119+
120+
var tlsModes []string
121+
if tlsEnabled == "true" {
122+
tlsModes = []string{"require", "verify-ca", "verify-full"}
123+
} else {
124+
tlsModes = []string{"disable"}
125+
}
126+
127+
for _, tlsMode := range tlsModes {
128+
t.Run("should not error when valid settings passed, tlsMode: "+tlsMode, func(t *testing.T) {
129+
secure := map[string]string{}
130+
secure["password"] = password
131+
settings := backend.DataSourceInstanceSettings{JSONData: []byte(fmt.Sprintf(
132+
`{ "server": "%s", "port": %s, "username": "%s", "tlsMode": "%s", "queryTimeout": "%d", "timeout": "%d", "maxOpenConnections": "%d", "maxIdleConnections": "%d", "maxConnectionLifetime": "%d" }`,
133+
host, port, username, tlsMode, queryTimeout, connectTimeout, maxOpenConns, maxIdleConns, maxConnLife)), DecryptedSecureJSONData: secure}
134+
135+
db, err := questdb.Connect(settings, json.RawMessage{})
136+
assert.Equal(t, nil, err)
137+
138+
err = db.Ping()
139+
assert.Equal(t, nil, err)
140+
})
141+
}
154142
}
155143

156-
func setupConnection(t *testing.T, settings *plugin.Settings) *sql.DB {
144+
func setupConnection(t *testing.T) *sql.DB {
157145
port, err := strconv.ParseInt(getEnv("QUESTDB_PORT", "8812"), 10, 64)
158146
if err != nil {
159147
panic(err)
@@ -162,7 +150,7 @@ func setupConnection(t *testing.T, settings *plugin.Settings) *sql.DB {
162150
host := getEnv("QUESTDB_HOST", "localhost")
163151
username := getEnv("QUESTDB_USERNAME", "admin")
164152
password := getEnv("QUESTDB_PASSWORD", "quest")
165-
tlsMode := getEnv("QUESTDB_SSL", "disable")
153+
tlsEnabled := getEnv("QUESTDB_TLS_ENABLED", "false")
166154
tlsConfigurationMethod := getEnv("QUESTDB_METHOD", "file-content")
167155
tlsCaCert := getEnv("QUESTDB_CA_CERT", `
168156
-----BEGIN CERTIFICATE-----
@@ -189,7 +177,13 @@ TIFr7kfJsOwa+y1x3aTs/7VSwNjfS4FqbvXy3S7OAOs=
189177
pool := x509.NewCertPool()
190178
pool.AppendCertsFromPEM([]byte(tlsCaCert))
191179

192-
// we create a direct connection since we need specific settings for insert
180+
var tlsMode string
181+
if tlsEnabled == "true" {
182+
tlsMode = "verify-full"
183+
} else {
184+
tlsMode = "disable"
185+
}
186+
193187
cnnstr, err := plugin.GenerateConnectionString(plugin.Settings{
194188
Server: host,
195189
Port: port,
@@ -209,7 +203,7 @@ TIFr7kfJsOwa+y1x3aTs/7VSwNjfS4FqbvXy3S7OAOs=
209203
}
210204

211205
func TestInsertAndQueryData(t *testing.T) {
212-
conn := setupConnection(t, nil)
206+
conn := setupConnection(t)
213207

214208
_, err := conn.Exec("DROP TABLE IF EXISTS all_types")
215209
require.NoError(t, err)

pkg/plugin/settings_test.go

+15-15
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ func TestLoadSettings(t *testing.T) {
1818
config backend.DataSourceInstanceSettings
1919
}
2020
tests := []struct {
21-
name string
22-
args args
23-
wantSettings Settings
24-
wantErr error
21+
name string
22+
args args
23+
expectedSettings Settings
24+
expectedErr error
2525
}{
2626
{
2727
name: "should parse json with tls disabled",
@@ -34,7 +34,7 @@ func TestLoadSettings(t *testing.T) {
3434
DecryptedSecureJSONData: map[string]string{"password": "doe"},
3535
},
3636
},
37-
wantSettings: Settings{
37+
expectedSettings: Settings{
3838
Server: "test",
3939
Port: 8812,
4040
Username: "john",
@@ -46,7 +46,7 @@ func TestLoadSettings(t *testing.T) {
4646
MaxConnectionLifetime: 14400,
4747
TlsMode: "disable",
4848
},
49-
wantErr: nil,
49+
expectedErr: nil,
5050
},
5151
{
5252
name: "should parse json with tls and file-content mode",
@@ -59,7 +59,7 @@ func TestLoadSettings(t *testing.T) {
5959
DecryptedSecureJSONData: map[string]string{"password": "doe", "tlsCACert": "caCert", "tlsClientCert": "clientCert", "tlsClientKey": "clientKey", "secureSocksProxyPassword": "test"},
6060
},
6161
},
62-
wantSettings: Settings{
62+
expectedSettings: Settings{
6363
Server: "test",
6464
Port: 1000,
6565
Username: "john",
@@ -86,7 +86,7 @@ func TestLoadSettings(t *testing.T) {
8686
},
8787
},
8888
},
89-
wantErr: nil,
89+
expectedErr: nil,
9090
},
9191
{
9292
name: "should parse json with tls and file-path mode",
@@ -100,7 +100,7 @@ func TestLoadSettings(t *testing.T) {
100100
DecryptedSecureJSONData: map[string]string{"password": "rambo", "secureSocksProxyPassword": "test"},
101101
},
102102
},
103-
wantSettings: Settings{
103+
expectedSettings: Settings{
104104
Server: "test",
105105
Port: 8812,
106106
Username: "john",
@@ -127,7 +127,7 @@ func TestLoadSettings(t *testing.T) {
127127
},
128128
},
129129
},
130-
wantErr: nil,
130+
expectedErr: nil,
131131
},
132132
{
133133
name: "should converting string values to the correct type",
@@ -137,7 +137,7 @@ func TestLoadSettings(t *testing.T) {
137137
DecryptedSecureJSONData: map[string]string{"password": "p"},
138138
},
139139
},
140-
wantSettings: Settings{
140+
expectedSettings: Settings{
141141
Server: "test",
142142
Port: 1234,
143143
Username: "u",
@@ -149,15 +149,15 @@ func TestLoadSettings(t *testing.T) {
149149
MaxConnectionLifetime: 3600,
150150
ProxyOptions: nil,
151151
},
152-
wantErr: nil,
152+
expectedErr: nil,
153153
},
154154
}
155155
for _, tt := range tests {
156156
t.Run(tt.name, func(t *testing.T) {
157157
gotSettings, err := LoadSettings(tt.args.config)
158-
assert.Equal(t, tt.wantErr, err)
159-
if !reflect.DeepEqual(gotSettings, tt.wantSettings) {
160-
t.Errorf("LoadSettings() = %v, want %v", gotSettings, tt.wantSettings)
158+
assert.Equal(t, tt.expectedErr, err)
159+
if !reflect.DeepEqual(gotSettings, tt.expectedSettings) {
160+
t.Errorf("LoadSettings() = %v, want %v", gotSettings, tt.expectedSettings)
161161
}
162162
})
163163
}

scripts/ca-cert.sh

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# Generate server.key and server.crt signed by our local CA.
2-
openssl genrsa -out $PWD/config-secure/keys/server.key 2048
2+
openssl genrsa -out $PWD/keys/server.key 2048
33

4-
openssl req -sha256 -new -key $PWD/config-secure/keys/server.key -out $PWD/config-secure/keys/server.csr \
4+
openssl req -sha256 -new -key $PWD/keys/server.key -out $PWD/keys/server.csr \
55
-subj "/CN=localhost" \
66

7-
openssl x509 -req -in $PWD/config-secure/keys/server.csr -CA $PWD/config-secure/keys/my-own-ca.crt -CAkey $PWD/config-secure/keys/my-own-ca.key \
8-
-CAcreateserial -out $PWD/config-secure/keys/server.crt -days 825 -sha256 -extfile $PWD/config-secure/keys/server.ext
7+
openssl x509 -req -in $PWD/keys/server.csr -CA $PWD/keys/my-own-ca.crt -CAkey $PWD/keys/my-own-ca.key \
8+
-CAcreateserial -out $PWD/keys/server.crt -days 825 -sha256 -extfile $PWD/keys/server.ext
99

1010
# Confirm the certificate is valid.
11-
openssl verify -CAfile $PWD/config-secure/keys/my-own-ca.crt $PWD/config-secure/keys/server.crt
11+
openssl verify -CAfile $PWD/keys/my-own-ca.crt $PWD/keys/server.crt

scripts/certs.sh

-7
This file was deleted.

0 commit comments

Comments
 (0)