Merge pull request #2580 from fjl/p2p-config

node, p2p: move network config out of Server
This commit is contained in:
Felix Lange 2016-05-18 12:37:15 +02:00
commit e27af97a3c
4 changed files with 36 additions and 28 deletions

View File

@ -49,7 +49,7 @@ type Node struct {
datadir string // Path to the currently used data directory datadir string // Path to the currently used data directory
eventmux *event.TypeMux // Event multiplexer used between the services of a stack eventmux *event.TypeMux // Event multiplexer used between the services of a stack
serverConfig *p2p.Server // Configuration of the underlying P2P networking layer serverConfig p2p.Config
server *p2p.Server // Currently running P2P networking layer server *p2p.Server // Currently running P2P networking layer
serviceFuncs []ServiceConstructor // Service constructors (in dependency order) serviceFuncs []ServiceConstructor // Service constructors (in dependency order)
@ -97,7 +97,7 @@ func New(conf *Config) (*Node, error) {
} }
return &Node{ return &Node{
datadir: conf.DataDir, datadir: conf.DataDir,
serverConfig: &p2p.Server{ serverConfig: p2p.Config{
PrivateKey: conf.NodeKey(), PrivateKey: conf.NodeKey(),
Name: conf.Name, Name: conf.Name,
Discovery: !conf.NoDiscovery, Discovery: !conf.NoDiscovery,
@ -151,9 +151,7 @@ func (n *Node) Start() error {
return ErrNodeRunning return ErrNodeRunning
} }
// Otherwise copy and specialize the P2P configuration // Otherwise copy and specialize the P2P configuration
running := new(p2p.Server) running := &p2p.Server{Config: n.serverConfig}
*running = *n.serverConfig
services := make(map[reflect.Type]Service) services := make(map[reflect.Type]Service)
for _, constructor := range n.serviceFuncs { for _, constructor := range n.serviceFuncs {
// Create a new context for the particular service // Create a new context for the particular service

View File

@ -478,7 +478,8 @@ func TestDialResolve(t *testing.T) {
} }
// Now run the task, it should resolve the ID once. // Now run the task, it should resolve the ID once.
srv := &Server{ntab: table, Dialer: &net.Dialer{Deadline: time.Now().Add(-5 * time.Minute)}} config := Config{Dialer: &net.Dialer{Deadline: time.Now().Add(-5 * time.Minute)}}
srv := &Server{ntab: table, Config: config}
tasks[0].Do(srv) tasks[0].Do(srv)
if !reflect.DeepEqual(table.resolveCalls, []discover.NodeID{dest.ID}) { if !reflect.DeepEqual(table.resolveCalls, []discover.NodeID{dest.ID}) {
t.Fatalf("wrong resolve calls, got %v", table.resolveCalls) t.Fatalf("wrong resolve calls, got %v", table.resolveCalls)

View File

@ -54,12 +54,8 @@ var errServerStopped = errors.New("server stopped")
var srvjslog = logger.NewJsonLogger() var srvjslog = logger.NewJsonLogger()
// Server manages all peer connections. // Config holds Server options.
// type Config struct {
// The fields of Server are used as configuration parameters.
// You should set them before starting the Server. Fields may not be
// modified while the server is running.
type Server struct {
// This field must be set to a valid secp256k1 private key. // This field must be set to a valid secp256k1 private key.
PrivateKey *ecdsa.PrivateKey PrivateKey *ecdsa.PrivateKey
@ -120,6 +116,12 @@ type Server struct {
// If NoDial is true, the server will not dial any peers. // If NoDial is true, the server will not dial any peers.
NoDial bool NoDial bool
}
// Server manages all peer connections.
type Server struct {
// Config fields may not be modified while the server is running.
Config
// Hooks for testing. These are useful because we can inhibit // Hooks for testing. These are useful because we can inhibit
// the whole protocol stack. // the whole protocol stack.

View File

@ -67,11 +67,14 @@ func (c *testTransport) close(err error) {
} }
func startTestServer(t *testing.T, id discover.NodeID, pf func(*Peer)) *Server { func startTestServer(t *testing.T, id discover.NodeID, pf func(*Peer)) *Server {
config := Config{
Name: "test",
MaxPeers: 10,
ListenAddr: "127.0.0.1:0",
PrivateKey: newkey(),
}
server := &Server{ server := &Server{
Name: "test", Config: config,
MaxPeers: 10,
ListenAddr: "127.0.0.1:0",
PrivateKey: newkey(),
newPeerHook: pf, newPeerHook: pf,
newTransport: func(fd net.Conn) transport { return newTestTransport(id, fd) }, newTransport: func(fd net.Conn) transport { return newTestTransport(id, fd) },
} }
@ -200,10 +203,10 @@ func TestServerTaskScheduling(t *testing.T) {
// The Server in this test isn't actually running // The Server in this test isn't actually running
// because we're only interested in what run does. // because we're only interested in what run does.
srv := &Server{ srv := &Server{
MaxPeers: 10, Config: Config{MaxPeers: 10},
quit: make(chan struct{}), quit: make(chan struct{}),
ntab: fakeTable{}, ntab: fakeTable{},
running: true, running: true,
} }
srv.loopWG.Add(1) srv.loopWG.Add(1)
go func() { go func() {
@ -314,10 +317,12 @@ func (t *testTask) Do(srv *Server) {
func TestServerAtCap(t *testing.T) { func TestServerAtCap(t *testing.T) {
trustedID := randomID() trustedID := randomID()
srv := &Server{ srv := &Server{
PrivateKey: newkey(), Config: Config{
MaxPeers: 10, PrivateKey: newkey(),
NoDial: true, MaxPeers: 10,
TrustedNodes: []*discover.Node{{ID: trustedID}}, NoDial: true,
TrustedNodes: []*discover.Node{{ID: trustedID}},
},
} }
if err := srv.Start(); err != nil { if err := srv.Start(); err != nil {
t.Fatalf("could not start: %v", err) t.Fatalf("could not start: %v", err)
@ -415,10 +420,12 @@ func TestServerSetupConn(t *testing.T) {
for i, test := range tests { for i, test := range tests {
srv := &Server{ srv := &Server{
PrivateKey: srvkey, Config: Config{
MaxPeers: 10, PrivateKey: srvkey,
NoDial: true, MaxPeers: 10,
Protocols: []Protocol{discard}, NoDial: true,
Protocols: []Protocol{discard},
},
newTransport: func(fd net.Conn) transport { return test.tt }, newTransport: func(fd net.Conn) transport { return test.tt },
} }
if !test.dontstart { if !test.dontstart {