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  }