github.com/vipernet-xyz/tm@v0.34.24/rpc/jsonrpc/client/http_json_client_test.go (about)

     1  package client
     2  
     3  import (
     4  	"io"
     5  	"log"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestHTTPClientMakeHTTPDialer(t *testing.T) {
    14  	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    15  		_, _ = w.Write([]byte("Hi!\n"))
    16  	})
    17  	ts := httptest.NewServer(handler)
    18  	defer ts.Close()
    19  
    20  	tsTLS := httptest.NewTLSServer(handler)
    21  	defer tsTLS.Close()
    22  	// This silences a TLS handshake error, caused by the dialer just immediately
    23  	// disconnecting, which we can just ignore.
    24  	tsTLS.Config.ErrorLog = log.New(io.Discard, "", 0)
    25  
    26  	for _, testURL := range []string{ts.URL, tsTLS.URL} {
    27  		u, err := newParsedURL(testURL)
    28  		require.NoError(t, err)
    29  		dialFn, err := makeHTTPDialer(testURL)
    30  		require.Nil(t, err)
    31  
    32  		addr, err := dialFn(u.Scheme, u.GetHostWithPath())
    33  		require.NoError(t, err)
    34  		require.NotNil(t, addr)
    35  	}
    36  }
    37  
    38  func Test_parsedURL(t *testing.T) {
    39  	type test struct {
    40  		url                  string
    41  		expectedURL          string
    42  		expectedHostWithPath string
    43  		expectedDialAddress  string
    44  	}
    45  
    46  	tests := map[string]test{
    47  		"unix endpoint": {
    48  			url:                  "unix:///tmp/test",
    49  			expectedURL:          "unix://.tmp.test",
    50  			expectedHostWithPath: "/tmp/test",
    51  			expectedDialAddress:  "/tmp/test",
    52  		},
    53  
    54  		"http endpoint": {
    55  			url:                  "https://example.com",
    56  			expectedURL:          "https://example.com",
    57  			expectedHostWithPath: "example.com",
    58  			expectedDialAddress:  "example.com",
    59  		},
    60  
    61  		"http endpoint with port": {
    62  			url:                  "https://example.com:8080",
    63  			expectedURL:          "https://example.com:8080",
    64  			expectedHostWithPath: "example.com:8080",
    65  			expectedDialAddress:  "example.com:8080",
    66  		},
    67  
    68  		"http path routed endpoint": {
    69  			url:                  "https://example.com:8080/rpc",
    70  			expectedURL:          "https://example.com:8080/rpc",
    71  			expectedHostWithPath: "example.com:8080/rpc",
    72  			expectedDialAddress:  "example.com:8080",
    73  		},
    74  	}
    75  
    76  	for name, tt := range tests {
    77  		tt := tt // suppressing linter
    78  		t.Run(name, func(t *testing.T) {
    79  			parsed, err := newParsedURL(tt.url)
    80  			require.NoError(t, err)
    81  			require.Equal(t, tt.expectedDialAddress, parsed.GetDialAddress())
    82  			require.Equal(t, tt.expectedURL, parsed.GetTrimmedURL())
    83  			require.Equal(t, tt.expectedHostWithPath, parsed.GetHostWithPath())
    84  		})
    85  	}
    86  }