-
Notifications
You must be signed in to change notification settings - Fork 198
Expand file tree
/
Copy pathssh_keepalive_test.go
More file actions
97 lines (80 loc) · 2.81 KB
/
Copy pathssh_keepalive_test.go
File metadata and controls
97 lines (80 loc) · 2.81 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package connpostgres
import (
"context"
"os"
"strconv"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/PeerDB-io/peerdb/flow/connectors/utils"
"github.com/PeerDB-io/peerdb/flow/generated/protos"
)
const (
toxiproxyDownProxyPort = 49001
toxiproxyLatencyProxyPort = 49002
toxiproxyResetProxyPort = 49003
)
func setupPostgresConnectorWithSSH(ctx context.Context, t *testing.T, proxyName string, proxyPort int,
) (*PostgresConnector, utils.SSHKeepaliveTestConfig) {
t.Helper()
toxiproxyClient := utils.NewToxiproxyClient(t)
sshProxy := utils.CreateSSHProxy(t, toxiproxyClient, proxyName, proxyPort)
pgHost := "localhost" // Default for local environments
// In local set-up environments like Tilt, when a non catalog
// instance of Postgres is present, we use it instead of the catalog.
if envHost := os.Getenv("PG_HOST"); envHost != "" {
pgHost = envHost
}
// In CI, TOXIPROXY_POSTGRES_HOST is set, usually pointing to 'catalog'
// network.
if toxiproxyPgHost := os.Getenv("TOXIPROXY_POSTGRES_HOST"); toxiproxyPgHost != "" {
pgHost = toxiproxyPgHost
}
var pgPort uint32 = 5432
if envPortStr := os.Getenv("PG_PORT"); envPortStr != "" {
envPort, err := strconv.ParseUint(strings.TrimSpace(strings.Split(envPortStr, "#")[0]), 10, 32)
require.NoError(t, err, "Failed to parse PG_PORT")
pgPort = uint32(envPort)
}
connector, err := NewPostgresConnector(ctx, nil, &protos.PostgresConfig{
Host: pgHost,
Port: pgPort,
User: "postgres",
Password: "postgres",
Database: "postgres",
SshConfig: &protos.SSHConfig{
Host: "localhost",
Port: uint32(proxyPort),
User: "testuser",
Password: "testpass",
},
})
require.NoError(t, err)
// Test initial connection works
err = connector.ConnectionActive(ctx)
require.NoError(t, err, "Initial connection should work")
keepaliveChan := connector.ssh.GetKeepaliveChan(ctx)
return connector, utils.SSHKeepaliveTestConfig{
SSHProxy: sshProxy,
KeepaliveChan: keepaliveChan,
RunLongQuery: func(ctx context.Context) error {
_, err := connector.conn.Exec(ctx, "SELECT pg_sleep(60)")
return err
},
}
}
func TestPostgresSSHKeepaliveWithToxiproxy(t *testing.T) {
connector, cfg := setupPostgresConnectorWithSSH(t.Context(), t, "pg-ssh-keepalive-test", toxiproxyDownProxyPort)
defer connector.Close()
utils.RunSSHKeepaliveDownTest(t, cfg)
}
func TestPostgresSSHKeepaliveLatency(t *testing.T) {
connector, cfg := setupPostgresConnectorWithSSH(t.Context(), t, "pg-ssh-latency-test", toxiproxyLatencyProxyPort)
defer connector.Close()
utils.RunSSHKeepaliveLatencyTest(t, cfg)
}
func TestPostgresSSHResetPeer(t *testing.T) {
connector, cfg := setupPostgresConnectorWithSSH(t.Context(), t, "pg-ssh-reset-peer-test", toxiproxyResetProxyPort)
defer connector.Close()
utils.RunSSHResetPeerTest(t, cfg)
}