Browse Source

:gear: Handle error on node option constructor

Related to: #6
Ettore Di Giacinto 3 years ago
parent
commit
d7fbab4f81

+ 4 - 1
cmd/api.go

@@ -40,7 +40,10 @@ A simple UI interface is available to display network data.`,
 		),
 		Action: func(c *cli.Context) error {
 			o, _, ll := cliToOpts(c)
-			e := node.New(o...)
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 
 			displayStart(ll)
 

+ 8 - 2
cmd/file.go

@@ -78,7 +78,10 @@ This is also the ID used to refer when receiving it.`,
 			}
 			o = append(o, opts...)
 
-			e := node.New(o...)
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 
 			displayStart(ll)
 
@@ -117,7 +120,10 @@ func FileReceive() cli.Command {
 				return err
 			}
 			o, _, ll := cliToOpts(c)
-			e := node.New(o...)
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 
 			displayStart(ll)
 

+ 4 - 1
cmd/join.go

@@ -32,7 +32,10 @@ Useful for setting up relays or hop nodes to improve the network connectivity.`,
 		Flags:     CommonFlags,
 		Action: func(c *cli.Context) error {
 			o, _, ll := cliToOpts(c)
-			e := node.New(o...)
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 
 			displayStart(ll)
 

+ 4 - 1
cmd/main.go

@@ -184,7 +184,10 @@ func Main() func(c *cli.Context) error {
 			return err
 		}
 
-		e := edgevpn.New(append(o, opts...)...)
+		e, err := edgevpn.New(append(o, opts...)...)
+		if err != nil {
+			return err
+		}
 
 		displayStart(ll)
 

+ 8 - 3
cmd/service.go

@@ -73,7 +73,10 @@ For example, '192.168.1.1:80', or '127.0.0.1:22'.`,
 
 			o = append(o, services.RegisterService(ll, time.Duration(c.Int("ledger-announce-interval"))*time.Second, name, address)...)
 
-			e := node.New(o...)
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 
 			displayStart(ll)
 
@@ -115,8 +118,10 @@ to the service over the network`,
 				return err
 			}
 			o, _, ll := cliToOpts(c)
-			e := node.New(o...)
-
+			e, err := node.New(o...)
+			if err != nil {
+				return err
+			}
 			displayStart(ll)
 
 			// Join the node to the network, using our ledger

+ 9 - 5
pkg/node/node.go

@@ -50,8 +50,8 @@ var defaultLibp2pOptions = []libp2p.Option{
 	libp2p.EnableAutoRelay(),
 }
 
-func New(p ...Option) *Node {
-	c := Config{
+func New(p ...Option) (*Node, error) {
+	c := &Config{
 		DiscoveryInterval:        120 * time.Second,
 		StreamHandlers:           make(map[protocol.Protocol]StreamHandler),
 		LedgerAnnounceTime:       5 * time.Second,
@@ -60,14 +60,18 @@ func New(p ...Option) *Node {
 		Options:                  defaultLibp2pOptions,
 		Logger:                   logger.New(log.LevelDebug),
 		Sealer:                   &crypto.AESSealer{},
+		Store:                    &blockchain.MemoryStore{},
+	}
+
+	if err := c.Apply(p...); err != nil {
+		return nil, err
 	}
-	c.Apply(p...)
 
 	return &Node{
-		config:  c,
+		config:  *c,
 		inputCh: make(chan *hub.Message, 3000),
 		seed:    0,
-	}
+	}, nil
 }
 
 // Ledger return the ledger which uses the node

+ 14 - 5
pkg/node/node_test.go

@@ -34,13 +34,22 @@ var _ = Describe("Node", func() {
 
 	l := Logger(logger.New(log.LevelFatal))
 
+	Context("Configuration", func() {
+		It("fails if is not valid", func() {
+			_, err := New(FromBase64(true, true, "  "), WithStore(&blockchain.MemoryStore{}), l)
+			Expect(err).To(HaveOccurred())
+			_, err = New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
+			Expect(err).ToNot(HaveOccurred())
+		})
+	})
+
 	Context("Connection", func() {
 		It("see each other node ID", func() {
 			ctx, cancel := context.WithCancel(context.Background())
 			defer cancel()
 
-			e := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
-			e2 := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
+			e, _ := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
+			e2, _ := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
 
 			e.Start(ctx)
 			e2.Start(ctx)
@@ -54,8 +63,8 @@ var _ = Describe("Node", func() {
 			ctx, cancel := context.WithCancel(context.Background())
 			defer cancel()
 
-			e := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
-			e2 := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
+			e, _ := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
+			e2, _ := New(FromBase64(true, true, token), WithStore(&blockchain.MemoryStore{}), l)
 
 			e.Start(ctx)
 			e2.Start(ctx)
@@ -82,7 +91,7 @@ var _ = Describe("Node", func() {
 		It("blacklists", func() {
 			ctx, cancel := context.WithCancel(context.Background())
 			defer cancel()
-			e := New(
+			e, _ := New(
 				WithBlacklist("1.1.1.1/32", "1.1.1.0/24"),
 				FromBase64(true, true, token),
 				WithStore(&blockchain.MemoryStore{}),

+ 4 - 4
pkg/services/alive_test.go

@@ -44,8 +44,8 @@ var _ = Describe("Alive service", func() {
 		It("detect both nodes alive after a while", func() {
 			ctx, cancel := context.WithCancel(context.Background())
 			defer cancel()
-			e2 := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
-			e1 := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
+			e2, _ := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
+			e1, _ := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
 
 			e1.Start(ctx)
 			e2.Start(ctx)
@@ -81,8 +81,8 @@ var _ = Describe("Alive service", func() {
 		It("cleans up after a while", func() {
 			ctx, cancel := context.WithCancel(context.Background())
 			defer cancel()
-			e2 := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
-			e1 := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
+			e2, _ := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
+			e1, _ := node.New(append(opts, node.WithStore(&blockchain.MemoryStore{}))...)
 
 			e1.Start(ctx)
 			e2.Start(ctx)

+ 2 - 2
pkg/services/dns_test.go

@@ -38,7 +38,7 @@ var _ = Describe("DNS service", func() {
 	logg := logger.New(log.LevelDebug)
 	l := node.Logger(logg)
 
-	e2 := node.New(
+	e2, _ := node.New(
 		append(Alive(15*time.Second, 90*time.Minute, 15*time.Minute),
 			node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)...)
 
@@ -49,7 +49,7 @@ var _ = Describe("DNS service", func() {
 
 			opts := DNS("127.0.0.1:19192", true, []string{"8.8.8.8:53"}, 10)
 			opts = append(opts, node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
-			e := node.New(opts...)
+			e, _  := node.New(opts...)
 
 			e.Start(ctx)
 			e2.Start(ctx)

+ 2 - 2
pkg/services/files_test.go

@@ -37,7 +37,7 @@ var _ = Describe("File services", func() {
 	logg := logger.New(log.LevelError)
 	l := node.Logger(logg)
 
-	e2 := node.New(node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
+	e2, _ := node.New(node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
 
 	Context("File sharing", func() {
 		It("sends and receive files between two nodes", func() {
@@ -58,7 +58,7 @@ var _ = Describe("File services", func() {
 			Expect(err).ToNot(HaveOccurred())
 
 			opts = append(opts, node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
-			e := node.New(opts...)
+			e, _ := node.New(opts...)
 
 			e.Start(ctx)
 			e2.Start(ctx)

+ 2 - 2
pkg/services/services_test.go

@@ -59,7 +59,7 @@ var _ = Describe("Expose services", func() {
 	logg := logger.New(log.LevelFatal)
 	l := node.Logger(logg)
 
-	e2 := node.New(node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
+	e2, _ := node.New(node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
 
 	Context("Service sharing", func() {
 		It("expose services and can connect to them", func() {
@@ -70,7 +70,7 @@ var _ = Describe("Expose services", func() {
 
 			opts := RegisterService(logg, 1*time.Second, serviceUUID, "142.250.184.35:80")
 			opts = append(opts, node.FromBase64(true, true, token), node.WithStore(&blockchain.MemoryStore{}), l)
-			e := node.New(opts...)
+			e, _ := node.New(opts...)
 
 			// First node expose a service
 			// redirects to google:80