-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathread_only_test.go
More file actions
83 lines (72 loc) · 2.85 KB
/
Copy pathread_only_test.go
File metadata and controls
83 lines (72 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"context"
"os"
"path/filepath"
"strconv"
"strings"
"testing"
"github.com/apecloud/myduckserver/testutil"
"github.com/jackc/pgx/v5"
"github.com/stretchr/testify/require"
)
func TestReadOnlyProtocols(t *testing.T) {
testDir := testutil.CreateTestDir(t)
testEnv := testutil.NewTestEnv()
workingDir, err := os.Getwd()
require.NoError(t, err)
// testutil starts `go run .` from the parent of OriginalWorkingDir.
testEnv.OriginalWorkingDir = filepath.Join(workingDir, "pgserver")
testEnv.ExtraArgs = []string{"--read-only"}
require.NoError(t, testutil.StartDuckSqlServer(t, testDir, nil, testEnv))
defer testutil.StopDuckSqlServer(t, testEnv.DuckProcess)
assertReadOnlyError := func(err error) {
require.Error(t, err)
require.Contains(t, strings.ToLower(err.Error()), "read only")
}
_, err = testEnv.MyDuckServer.Exec("SELECT 1")
require.NoError(t, err)
_, err = testEnv.MyDuckServer.Exec("INSERT INTO missing_table VALUES (1)")
assertReadOnlyError(err)
_, err = testEnv.MyDuckServer.Exec("CREATE TABLE blocked_table (id INT)")
assertReadOnlyError(err)
_, err = testEnv.MyDuckServer.Exec("CREATE OR REPLACE TABLE blocked_replace (id INT)")
assertReadOnlyError(err)
ctx := context.Background()
pgConn, err := pgx.Connect(ctx, "postgresql://postgres@127.0.0.1:"+strconv.Itoa(testEnv.DuckPgPort)+"/postgres")
require.NoError(t, err)
defer pgConn.Close(ctx)
_, err = pgConn.Exec(ctx, "SELECT 1")
require.NoError(t, err)
_, err = pgConn.Exec(ctx, "INSERT INTO missing_table VALUES (1)")
assertReadOnlyError(err)
_, err = pgConn.Exec(ctx, "CREATE TABLE blocked_table (id INT)")
assertReadOnlyError(err)
_, err = pgConn.Exec(ctx, "CREATE OR REPLACE TABLE blocked_replace (id INT)")
assertReadOnlyError(err)
}
func TestReadOnlyDefaultOff(t *testing.T) {
testDir := testutil.CreateTestDir(t)
testEnv := testutil.NewTestEnv()
workingDir, err := os.Getwd()
require.NoError(t, err)
testEnv.OriginalWorkingDir = filepath.Join(workingDir, "pgserver")
require.NoError(t, testutil.StartDuckSqlServer(t, testDir, nil, testEnv))
defer testutil.StopDuckSqlServer(t, testEnv.DuckProcess)
_, err = testEnv.MyDuckServer.Exec("CREATE DATABASE default_off_mysql")
require.NoError(t, err)
_, err = testEnv.MyDuckServer.Exec("USE default_off_mysql")
require.NoError(t, err)
_, err = testEnv.MyDuckServer.Exec("CREATE TABLE default_off_mysql (id INT)")
require.NoError(t, err)
_, err = testEnv.MyDuckServer.Exec("INSERT INTO default_off_mysql VALUES (1)")
require.NoError(t, err)
ctx := context.Background()
pgConn, err := pgx.Connect(ctx, "postgresql://postgres@127.0.0.1:"+strconv.Itoa(testEnv.DuckPgPort)+"/postgres")
require.NoError(t, err)
defer pgConn.Close(ctx)
_, err = pgConn.Exec(ctx, "CREATE TABLE default_off_pg (id INT)")
require.NoError(t, err)
_, err = pgConn.Exec(ctx, "INSERT INTO default_off_pg VALUES (1)")
require.NoError(t, err)
}