forked from rqlite/rqlite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathservice_mux_test.go
127 lines (103 loc) · 2.99 KB
/
service_mux_test.go
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package cluster
import (
"crypto/tls"
"fmt"
"net"
"os"
"testing"
"time"
"github.com/rqlite/rqlite/v8/rtls"
"github.com/rqlite/rqlite/v8/tcp"
"github.com/rqlite/rqlite/v8/testdata/x509"
)
func Test_NewServiceSetGetNodeAPIAddrMuxed(t *testing.T) {
ln, mux := mustNewMux()
go mux.Serve()
tn := mux.Listen(1) // Could be any byte value.
s := New(tn, mustNewMockDatabase(), mustNewMockManager(), mustNewMockCredentialStore())
if s == nil {
t.Fatalf("failed to create cluster service")
}
if err := s.Open(); err != nil {
t.Fatalf("failed to open cluster service")
}
s.SetAPIAddr("foo")
c := NewClient(mustNewDialer(1, false, false), 30*time.Second)
addr, err := c.GetNodeAPIAddr(s.Addr(), noRetries, 5*time.Second)
if err != nil {
t.Fatalf("failed to get node API address: %s", err)
}
if addr != "http://foo" {
t.Fatalf("failed to get correct node API address")
}
if err := ln.Close(); err != nil {
t.Fatalf("failed to close Mux's listener: %s", err)
}
if err := s.Close(); err != nil {
t.Fatalf("failed to close cluster service")
}
}
func Test_NewServiceSetGetNodeAPIAddrMuxedTLS(t *testing.T) {
ln, mux := mustNewTLSMux()
go mux.Serve()
tn := mux.Listen(1) // Could be any byte value.
s := New(tn, mustNewMockDatabase(), mustNewMockManager(), mustNewMockCredentialStore())
if s == nil {
t.Fatalf("failed to create cluster service")
}
if err := s.Open(); err != nil {
t.Fatalf("failed to open cluster service")
}
s.SetAPIAddr("foo")
c := NewClient(mustNewDialer(1, true, true), 30*time.Second)
addr, err := c.GetNodeAPIAddr(s.Addr(), noRetries, 5*time.Second)
if err != nil {
t.Fatalf("failed to get node API address: %s", err)
}
if addr != "http://foo" {
t.Fatalf("failed to get correct node API address")
}
if err := ln.Close(); err != nil {
t.Fatalf("failed to close Mux's listener: %s", err)
}
if err := s.Close(); err != nil {
t.Fatalf("failed to close cluster service")
}
}
func mustNewMux() (net.Listener, *tcp.Mux) {
ln, err := net.Listen("tcp", "localhost:0")
if err != nil {
panic("failed to create mock listener")
}
mux, err := tcp.NewMux(ln, nil)
if err != nil {
panic(fmt.Sprintf("failed to create mux: %s", err))
}
return ln, mux
}
func mustNewTLSMux() (net.Listener, *tcp.Mux) {
ln, err := net.Listen("tcp", "localhost:0")
if err != nil {
panic("failed to create mock listener")
}
cert := x509.CertExampleDotComFile("")
defer os.Remove(cert)
key := x509.KeyExampleDotComFile("")
defer os.Remove(key)
mux, err := tcp.NewTLSMux(ln, nil, cert, key, "", true, false)
if err != nil {
panic(fmt.Sprintf("failed to create TLS mux: %s", err))
}
return ln, mux
}
func mustNewDialer(header byte, remoteEncrypted, skipVerify bool) *tcp.Dialer {
var tlsConfig *tls.Config
var err error
if remoteEncrypted {
tlsConfig, err = rtls.CreateClientConfig("", "", rtls.NoCACert, rtls.NoServerName, skipVerify)
if err != nil {
panic(fmt.Sprintf("failed to create client TLS config: %s", err))
}
}
return tcp.NewDialer(header, tlsConfig)
}