Skip to content

Commit

Permalink
rpcclient: Implement fmt.Stringer for Client
Browse files Browse the repository at this point in the history
This implements fmt.Stringer by returning the URL of the RPC server
that the client makes requests to.

Since the client config is not exported by Client, this is now the
only way to return the scheme, host, and endpoint the server.
  • Loading branch information
jrick authored and davecgh committed Jun 14, 2018
1 parent 543ebff commit 773b3c0
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
19 changes: 19 additions & 0 deletions rpcclient/infrastructure.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,25 @@ type Client struct {
wg sync.WaitGroup
}

// String implements fmt.Stringer by returning the URL of the RPC server the
// client makes requests to.
func (c *Client) String() string {
var u url.URL
switch {
case c.config.HTTPPostMode && c.config.DisableTLS:
u.Scheme = "http"
case c.config.HTTPPostMode:
u.Scheme = "https"
case c.config.DisableTLS:
u.Scheme = "ws"
default:
u.Scheme = "wss"
}
u.Host = c.config.Host
u.Path = c.config.Endpoint
return u.String()
}

// NextID returns the next id to be used when sending a JSON-RPC message. This
// ID allows responses to be associated with particular requests per the
// JSON-RPC specification. Typically the consumer of the client does not need
Expand Down
38 changes: 38 additions & 0 deletions rpcclient/infrastructure_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) 2018 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.

package rpcclient

import "testing"

func TestClientStringer(t *testing.T) {
type test struct {
url string
host string
endpoint string
post bool
}
tests := []test{
{"https://localhost:9109", "localhost:9109", "", true},
{"wss://localhost:9109/ws", "localhost:9109", "ws", false},
}
for _, test := range tests {
cfg := &ConnConfig{
Host: test.host,
Endpoint: test.endpoint,
HTTPPostMode: test.post,
DisableTLS: false,
DisableConnectOnNew: true,
}
c, err := New(cfg, nil)
if err != nil {
t.Errorf("%v rpcclient.New: %v", test.url, err)
continue
}
s := c.String()
if s != test.url {
t.Errorf("Expected %q, got %q", test.url, s)
}
}
}

0 comments on commit 773b3c0

Please sign in to comment.