Merge pull request #2140 from cfromknecht/wtserver-move
[watchtower/wtserver] rename server package, add godocs, general code health
This commit is contained in:
commit
fd82200a15
@ -1,4 +1,4 @@
|
||||
package server
|
||||
package wtserver
|
||||
|
||||
import (
|
||||
"io"
|
@ -1,4 +1,4 @@
|
||||
package server
|
||||
package wtserver
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btclog"
|
||||
@ -12,7 +12,7 @@ var log btclog.Logger
|
||||
|
||||
// The default amount of logging is none.
|
||||
func init() {
|
||||
UseLogger(build.NewSubLogger("WTSV", nil))
|
||||
UseLogger(build.NewSubLogger("WTWR", nil))
|
||||
}
|
||||
|
||||
// DisableLog disables all library log output. Logging output is disabled
|
@ -1,6 +1,6 @@
|
||||
// +build dev
|
||||
|
||||
package server
|
||||
package wtserver
|
||||
|
||||
import (
|
||||
"fmt"
|
@ -1,4 +1,4 @@
|
||||
package server
|
||||
package wtserver
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@ -108,8 +108,12 @@ func (s *Server) Start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Infof("Starting watchtower server")
|
||||
|
||||
s.connMgr.Start()
|
||||
|
||||
log.Infof("Watchtower server started successfully")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -120,11 +124,15 @@ func (s *Server) Stop() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Infof("Stopping watchtower server")
|
||||
|
||||
s.connMgr.Stop()
|
||||
|
||||
close(s.quit)
|
||||
s.wg.Wait()
|
||||
|
||||
log.Infof("Watchtower server stopped successfully")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -287,6 +295,8 @@ func (s *Server) handleClient(peer Peer) {
|
||||
}
|
||||
}
|
||||
|
||||
// handleInit accepts the local and remote Init messages, and verifies that the
|
||||
// client is not requesting any required features that are unknown to the tower.
|
||||
func (s *Server) handleInit(localInit, remoteInit *wtwire.Init) error {
|
||||
remoteLocalFeatures := lnwire.NewFeatureVector(
|
||||
remoteInit.LocalFeatures, wtwire.LocalFeatures,
|
||||
@ -312,33 +322,6 @@ func (s *Server) handleInit(localInit, remoteInit *wtwire.Init) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) readMessage(peer Peer) (wtwire.Message, error) {
|
||||
// Set a read timeout to ensure we drop the client if not sent in a
|
||||
// timely manner.
|
||||
err := peer.SetReadDeadline(time.Now().Add(s.cfg.ReadTimeout))
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to set read deadline: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Pull the next message off the wire, and parse it according to the
|
||||
// watchtower wire specification.
|
||||
rawMsg, err := peer.ReadNextMessage()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to read message: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
msgReader := bytes.NewReader(rawMsg)
|
||||
nextMsg, err := wtwire.ReadMessage(msgReader, 0)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to parse message: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nextMsg, nil
|
||||
}
|
||||
|
||||
// handleCreateSession processes a CreateSession message from the peer, and returns
|
||||
// a CreateSessionReply in response. This method will only succeed if no existing
|
||||
// session info is known about the session id. If an existing session is found,
|
||||
@ -550,6 +533,37 @@ func (s *Server) replyStateUpdate(peer Peer, id *wtdb.SessionID,
|
||||
}
|
||||
}
|
||||
|
||||
// readMessage receives and parses the next message from the given Peer. An
|
||||
// error is returned if a message is not received before the server's read
|
||||
// timeout, the read off the wire failed, or the message could not be
|
||||
// deserialized.
|
||||
func (s *Server) readMessage(peer Peer) (wtwire.Message, error) {
|
||||
// Set a read timeout to ensure we drop the client if not sent in a
|
||||
// timely manner.
|
||||
err := peer.SetReadDeadline(time.Now().Add(s.cfg.ReadTimeout))
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to set read deadline: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Pull the next message off the wire, and parse it according to the
|
||||
// watchtower wire specification.
|
||||
rawMsg, err := peer.ReadNextMessage()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to read message: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
msgReader := bytes.NewReader(rawMsg)
|
||||
nextMsg, err := wtwire.ReadMessage(msgReader, 0)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to parse message: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nextMsg, nil
|
||||
}
|
||||
|
||||
// sendMessage sends a watchtower wire message to the target peer.
|
||||
func (s *Server) sendMessage(peer Peer, msg wtwire.Message) error {
|
||||
// TODO(conner): use buffer pool?
|
@ -1,6 +1,6 @@
|
||||
// +build dev
|
||||
|
||||
package server_test
|
||||
package wtserver_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@ -12,8 +12,8 @@ import (
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/watchtower/server"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtdb"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtserver"
|
||||
"github.com/lightningnetwork/lnd/watchtower/wtwire"
|
||||
)
|
||||
|
||||
@ -36,8 +36,8 @@ func randPubKey(t *testing.T) *btcec.PublicKey {
|
||||
|
||||
// initServer creates and starts a new server using the server.DB and timeout.
|
||||
// If the provided database is nil, a mock db will be used.
|
||||
func initServer(t *testing.T, db server.DB,
|
||||
timeout time.Duration) server.Interface {
|
||||
func initServer(t *testing.T, db wtserver.DB,
|
||||
timeout time.Duration) wtserver.Interface {
|
||||
|
||||
t.Helper()
|
||||
|
||||
@ -45,7 +45,7 @@ func initServer(t *testing.T, db server.DB,
|
||||
db = wtdb.NewMockDB()
|
||||
}
|
||||
|
||||
s, err := server.New(&server.Config{
|
||||
s, err := wtserver.New(&wtserver.Config{
|
||||
DB: db,
|
||||
ReadTimeout: timeout,
|
||||
WriteTimeout: timeout,
|
||||
@ -79,8 +79,8 @@ func TestServerOnlyAcceptOnePeer(t *testing.T) {
|
||||
|
||||
// Create two peers using the same session id.
|
||||
peerPub := randPubKey(t)
|
||||
peer1 := server.NewMockPeer(peerPub, nil, 0)
|
||||
peer2 := server.NewMockPeer(peerPub, nil, 0)
|
||||
peer1 := wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
peer2 := wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
|
||||
// Serialize a Init message to be sent by both peers.
|
||||
init := wtwire.NewInitMessage(
|
||||
@ -106,8 +106,8 @@ func TestServerOnlyAcceptOnePeer(t *testing.T) {
|
||||
// Try to send a message on either peer, and record the opposite peer as
|
||||
// the one we assume to be rejected.
|
||||
var (
|
||||
rejectedPeer *server.MockPeer
|
||||
acceptedPeer *server.MockPeer
|
||||
rejectedPeer *wtserver.MockPeer
|
||||
acceptedPeer *wtserver.MockPeer
|
||||
)
|
||||
select {
|
||||
case peer1.IncomingMsgs <- msg:
|
||||
@ -192,7 +192,7 @@ func testServerCreateSession(t *testing.T, i int, test createSessionTestCase) {
|
||||
|
||||
// Create a new client and connect to server.
|
||||
peerPub := randPubKey(t)
|
||||
peer := server.NewMockPeer(peerPub, nil, 0)
|
||||
peer := wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
connect(t, i, s, peer, test.initMsg, timeoutDuration)
|
||||
|
||||
// Send the CreateSession message, and wait for a reply.
|
||||
@ -220,7 +220,7 @@ func testServerCreateSession(t *testing.T, i int, test createSessionTestCase) {
|
||||
|
||||
// Simulate a peer with the same session id connection to the server
|
||||
// again.
|
||||
peer = server.NewMockPeer(peerPub, nil, 0)
|
||||
peer = wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
connect(t, i, s, peer, test.initMsg, timeoutDuration)
|
||||
|
||||
// Send the _same_ CreateSession message as the first attempt.
|
||||
@ -492,7 +492,7 @@ func testServerStateUpdates(t *testing.T, i int, test stateUpdateTestCase) {
|
||||
|
||||
// Create a new client and connect to the server.
|
||||
peerPub := randPubKey(t)
|
||||
peer := server.NewMockPeer(peerPub, nil, 0)
|
||||
peer := wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
connect(t, i, s, peer, test.initMsg, timeoutDuration)
|
||||
|
||||
// Register a session for this client to use in the subsequent tests.
|
||||
@ -512,7 +512,7 @@ func testServerStateUpdates(t *testing.T, i int, test stateUpdateTestCase) {
|
||||
|
||||
// Now that the original connection has been closed, connect a new
|
||||
// client with the same session id.
|
||||
peer = server.NewMockPeer(peerPub, nil, 0)
|
||||
peer = wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
connect(t, i, s, peer, test.initMsg, timeoutDuration)
|
||||
|
||||
// Send the intended StateUpdate messages in series.
|
||||
@ -523,7 +523,7 @@ func testServerStateUpdates(t *testing.T, i int, test stateUpdateTestCase) {
|
||||
if update == nil {
|
||||
assertConnClosed(t, peer, 2*timeoutDuration)
|
||||
|
||||
peer = server.NewMockPeer(peerPub, nil, 0)
|
||||
peer = wtserver.NewMockPeer(peerPub, nil, 0)
|
||||
connect(t, i, s, peer, test.initMsg, timeoutDuration)
|
||||
|
||||
continue
|
||||
@ -547,7 +547,7 @@ func testServerStateUpdates(t *testing.T, i int, test stateUpdateTestCase) {
|
||||
assertConnClosed(t, peer, 2*timeoutDuration)
|
||||
}
|
||||
|
||||
func connect(t *testing.T, i int, s server.Interface, peer *server.MockPeer,
|
||||
func connect(t *testing.T, i int, s wtserver.Interface, peer *wtserver.MockPeer,
|
||||
initMsg *wtwire.Init, timeout time.Duration) {
|
||||
|
||||
s.InboundPeerConnected(peer)
|
||||
@ -555,9 +555,9 @@ func connect(t *testing.T, i int, s server.Interface, peer *server.MockPeer,
|
||||
recvReply(t, i, "Init", peer, timeout)
|
||||
}
|
||||
|
||||
// sendMsg sends a wtwire.Message message via a server.MockPeer.
|
||||
// sendMsg sends a wtwire.Message message via a wtserver.MockPeer.
|
||||
func sendMsg(t *testing.T, i int, msg wtwire.Message,
|
||||
peer *server.MockPeer, timeout time.Duration) {
|
||||
peer *wtserver.MockPeer, timeout time.Duration) {
|
||||
|
||||
t.Helper()
|
||||
|
||||
@ -579,7 +579,7 @@ func sendMsg(t *testing.T, i int, msg wtwire.Message,
|
||||
// expected reply type. The supported replies are CreateSessionReply and
|
||||
// StateUpdateReply.
|
||||
func recvReply(t *testing.T, i int, name string,
|
||||
peer *server.MockPeer, timeout time.Duration) wtwire.Message {
|
||||
peer *wtserver.MockPeer, timeout time.Duration) wtwire.Message {
|
||||
|
||||
t.Helper()
|
||||
|
||||
@ -623,7 +623,7 @@ func recvReply(t *testing.T, i int, name string,
|
||||
|
||||
// assertConnClosed checks that the peer's connection is closed before the
|
||||
// timeout expires.
|
||||
func assertConnClosed(t *testing.T, peer *server.MockPeer, duration time.Duration) {
|
||||
func assertConnClosed(t *testing.T, peer *wtserver.MockPeer, duration time.Duration) {
|
||||
t.Helper()
|
||||
|
||||
select {
|
Loading…
Reference in New Issue
Block a user