-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnsqadmin_test.go
126 lines (114 loc) · 3.26 KB
/
nsqadmin_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
package nsqadmin
import (
"fmt"
"io/ioutil"
"net"
"net/http"
"net/url"
"os"
"os/exec"
"testing"
"github.com/nsqio/nsq/internal/lg"
"github.com/nsqio/nsq/internal/test"
"github.com/nsqio/nsq/nsqd"
)
func TestNeitherNSQDAndNSQLookup(t *testing.T) {
if os.Getenv("BE_CRASHER") == "1" {
opts := NewOptions()
opts.Logger = lg.NilLogger{}
opts.HTTPAddress = "127.0.0.1:0"
New(opts)
return
}
cmd := exec.Command(os.Args[0], "-test.run=TestNeitherNSQDAndNSQLookup")
cmd.Env = append(os.Environ(), "BE_CRASHER=1")
err := cmd.Run()
test.Equal(t, "exit status 1", fmt.Sprintf("%v", err))
if e, ok := err.(*exec.ExitError); ok && !e.Success() {
return
}
t.Fatalf("process ran with err %v, want exit status 1", err)
}
func TestBothNSQDAndNSQLookup(t *testing.T) {
if os.Getenv("BE_CRASHER") == "1" {
opts := NewOptions()
opts.Logger = lg.NilLogger{}
opts.HTTPAddress = "127.0.0.1:0"
opts.NSQLookupdHTTPAddresses = []string{"127.0.0.1:4161"}
opts.NSQDHTTPAddresses = []string{"127.0.0.1:4151"}
New(opts)
return
}
cmd := exec.Command(os.Args[0], "-test.run=TestBothNSQDAndNSQLookup")
cmd.Env = append(os.Environ(), "BE_CRASHER=1")
err := cmd.Run()
test.Equal(t, "exit status 1", fmt.Sprintf("%v", err))
if e, ok := err.(*exec.ExitError); ok && !e.Success() {
return
}
t.Fatalf("process ran with err %v, want exit status 1", err)
}
func TestTLSHTTPClient(t *testing.T) {
lgr := test.NewTestLogger(t)
nsqdOpts := nsqd.NewOptions()
nsqdOpts.TLSCert = "./test/server.pem"
nsqdOpts.TLSKey = "./test/server.key"
nsqdOpts.TLSRootCAFile = "./test/ca.pem"
nsqdOpts.TLSClientAuthPolicy = "require-verify"
nsqdOpts.Logger = lgr
_, nsqdHTTPAddr, nsqd := mustStartNSQD(nsqdOpts)
defer os.RemoveAll(nsqdOpts.DataPath)
defer nsqd.Exit()
opts := NewOptions()
opts.HTTPAddress = "127.0.0.1:0"
opts.NSQDHTTPAddresses = []string{nsqdHTTPAddr.String()}
opts.HTTPClientTLSRootCAFile = "./test/ca.pem"
opts.HTTPClientTLSCert = "./test/client.pem"
opts.HTTPClientTLSKey = "./test/client.key"
opts.Logger = lgr
nsqadmin := New(opts)
nsqadmin.Main()
defer nsqadmin.Exit()
httpAddr := nsqadmin.RealHTTPAddr()
u := url.URL{
Scheme: "http",
Host: httpAddr.String(),
Path: "/api/nodes/" + nsqdHTTPAddr.String(),
}
resp, err := http.Get(u.String())
test.Equal(t, nil, err)
defer resp.Body.Close()
test.Equal(t, resp.StatusCode < 500, true)
}
func mustStartNSQD(opts *nsqd.Options) (*net.TCPAddr, *net.TCPAddr, *nsqd.NSQD) {
opts.TCPAddress = "127.0.0.1:0"
opts.HTTPAddress = "127.0.0.1:0"
opts.HTTPSAddress = "127.0.0.1:0"
if opts.DataPath == "" {
tmpDir, err := ioutil.TempDir("", "nsq-test-")
if err != nil {
panic(err)
}
opts.DataPath = tmpDir
}
nsqd := nsqd.New(opts)
nsqd.Main()
return nsqd.RealTCPAddr(), nsqd.RealHTTPAddr(), nsqd
}
func TestCrashingLogger(t *testing.T) {
if os.Getenv("BE_CRASHER") == "1" {
// Test invalid log level causes error
opts := NewOptions()
opts.LogLevel = "bad"
opts.NSQLookupdHTTPAddresses = []string{"127.0.0.1:4161"}
_ = New(opts)
return
}
cmd := exec.Command(os.Args[0], "-test.run=TestCrashingLogger")
cmd.Env = append(os.Environ(), "BE_CRASHER=1")
err := cmd.Run()
if e, ok := err.(*exec.ExitError); ok && !e.Success() {
return
}
t.Fatalf("process ran with err %v, want exit status 1", err)
}