github.com/nsqio/nsq@v1.3.0/nsqadmin/nsqadmin_test.go (about) 1 package nsqadmin 2 3 import ( 4 "fmt" 5 "net" 6 "net/http" 7 "net/url" 8 "os" 9 "testing" 10 11 "github.com/nsqio/nsq/internal/lg" 12 "github.com/nsqio/nsq/internal/test" 13 "github.com/nsqio/nsq/nsqd" 14 ) 15 16 func TestNeitherNSQDAndNSQLookup(t *testing.T) { 17 opts := NewOptions() 18 opts.Logger = lg.NilLogger{} 19 opts.HTTPAddress = "127.0.0.1:0" 20 _, err := New(opts) 21 test.NotNil(t, err) 22 test.Equal(t, "--nsqd-http-address or --lookupd-http-address required", fmt.Sprintf("%s", err)) 23 } 24 25 func TestBothNSQDAndNSQLookup(t *testing.T) { 26 opts := NewOptions() 27 opts.Logger = lg.NilLogger{} 28 opts.HTTPAddress = "127.0.0.1:0" 29 opts.NSQLookupdHTTPAddresses = []string{"127.0.0.1:4161"} 30 opts.NSQDHTTPAddresses = []string{"127.0.0.1:4151"} 31 _, err := New(opts) 32 test.NotNil(t, err) 33 test.Equal(t, "use --nsqd-http-address or --lookupd-http-address not both", fmt.Sprintf("%s", err)) 34 } 35 36 func TestTLSHTTPClient(t *testing.T) { 37 lgr := test.NewTestLogger(t) 38 39 nsqdOpts := nsqd.NewOptions() 40 nsqdOpts.TLSCert = "./test/server.pem" 41 nsqdOpts.TLSKey = "./test/server.key" 42 nsqdOpts.TLSRootCAFile = "./test/ca.pem" 43 nsqdOpts.TLSClientAuthPolicy = "require-verify" 44 nsqdOpts.Logger = lgr 45 _, nsqdHTTPAddr, nsqd := mustStartNSQD(nsqdOpts) 46 defer os.RemoveAll(nsqdOpts.DataPath) 47 defer nsqd.Exit() 48 49 opts := NewOptions() 50 opts.HTTPAddress = "127.0.0.1:0" 51 opts.NSQDHTTPAddresses = []string{nsqdHTTPAddr.String()} 52 opts.HTTPClientTLSRootCAFile = "./test/ca.pem" 53 opts.HTTPClientTLSCert = "./test/client.pem" 54 opts.HTTPClientTLSKey = "./test/client.key" 55 opts.Logger = lgr 56 nsqadmin, err := New(opts) 57 test.Nil(t, err) 58 go func() { 59 err := nsqadmin.Main() 60 if err != nil { 61 panic(err) 62 } 63 }() 64 defer nsqadmin.Exit() 65 66 httpAddr := nsqadmin.RealHTTPAddr() 67 u := url.URL{ 68 Scheme: "http", 69 Host: httpAddr.String(), 70 Path: "/api/nodes/" + nsqdHTTPAddr.String(), 71 } 72 73 resp, err := http.Get(u.String()) 74 test.Nil(t, err) 75 defer resp.Body.Close() 76 77 test.Equal(t, resp.StatusCode < 500, true) 78 } 79 80 func mustStartNSQD(opts *nsqd.Options) (net.Addr, net.Addr, *nsqd.NSQD) { 81 opts.TCPAddress = "127.0.0.1:0" 82 opts.HTTPAddress = "127.0.0.1:0" 83 opts.HTTPSAddress = "127.0.0.1:0" 84 if opts.DataPath == "" { 85 tmpDir, err := os.MkdirTemp("", "nsq-test-") 86 if err != nil { 87 panic(err) 88 } 89 opts.DataPath = tmpDir 90 } 91 nsqd, err := nsqd.New(opts) 92 if err != nil { 93 panic(err) 94 } 95 go func() { 96 err := nsqd.Main() 97 if err != nil { 98 panic(err) 99 } 100 }() 101 return nsqd.RealTCPAddr(), nsqd.RealHTTPAddr(), nsqd 102 }