From d1a50fe91c0ee2d0e890614af5c6fe8cc7b74827 Mon Sep 17 00:00:00 2001 From: mrekucci Date: Thu, 4 Nov 2021 09:37:32 +0100 Subject: [PATCH] fix: panic on stewardship endpoints in dev mode (#2640) --- pkg/api/bzz_test.go | 13 +++++++------ pkg/api/stewardship_test.go | 27 +++++++-------------------- pkg/node/devnode.go | 3 ++- pkg/steward/mock/steward.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 pkg/steward/mock/steward.go diff --git a/pkg/api/bzz_test.go b/pkg/api/bzz_test.go index c7e826b0183..5f3042f19b2 100644 --- a/pkg/api/bzz_test.go +++ b/pkg/api/bzz_test.go @@ -25,6 +25,7 @@ import ( pinning "github.com/ethersphere/bee/pkg/pinning/mock" mockpost "github.com/ethersphere/bee/pkg/postage/mock" statestore "github.com/ethersphere/bee/pkg/statestore/mock" + "github.com/ethersphere/bee/pkg/steward/mock" "github.com/ethersphere/bee/pkg/storage" smock "github.com/ethersphere/bee/pkg/storage/mock" "github.com/ethersphere/bee/pkg/swarm" @@ -649,16 +650,16 @@ func TestFeedIndirection(t *testing.T) { func TestBzzReupload(t *testing.T) { var ( logger = logging.New(io.Discard, 0) - mockStatestore = statestore.NewStateStore() - m = &mockSteward{} + statestoreMock = statestore.NewStateStore() + stewardMock = &mock.Steward{} storer = smock.NewStorer() addr = swarm.NewAddress([]byte{31: 128}) ) client, _, _ := newTestServer(t, testServerOptions{ Storer: storer, - Tags: tags.NewTags(mockStatestore, logger), + Tags: tags.NewTags(statestoreMock, logger), Logger: logger, - Steward: m, + Steward: stewardMock, }) jsonhttptest.Request(t, client, http.MethodPatch, "/v1/bzz/"+addr.String(), http.StatusOK, jsonhttptest.WithExpectedJSONResponse(jsonhttp.StatusResponse{ @@ -666,7 +667,7 @@ func TestBzzReupload(t *testing.T) { Code: http.StatusOK, }), ) - if !m.addr.Equal(addr) { - t.Fatalf("got address %s want %s", m.addr.String(), addr.String()) + if !stewardMock.LastAddress().Equal(addr) { + t.Fatalf("got address %s want %s", stewardMock.LastAddress().String(), addr.String()) } } diff --git a/pkg/api/stewardship_test.go b/pkg/api/stewardship_test.go index 3466ac73e19..f2efe1de323 100644 --- a/pkg/api/stewardship_test.go +++ b/pkg/api/stewardship_test.go @@ -5,7 +5,6 @@ package api_test import ( - "context" "encoding/hex" "io" "net/http" @@ -16,6 +15,7 @@ import ( "github.com/ethersphere/bee/pkg/jsonhttp/jsonhttptest" "github.com/ethersphere/bee/pkg/logging" statestore "github.com/ethersphere/bee/pkg/statestore/mock" + "github.com/ethersphere/bee/pkg/steward/mock" smock "github.com/ethersphere/bee/pkg/storage/mock" "github.com/ethersphere/bee/pkg/swarm" "github.com/ethersphere/bee/pkg/tags" @@ -24,16 +24,16 @@ import ( func TestStewardship(t *testing.T) { var ( logger = logging.New(io.Discard, 0) - mockStatestore = statestore.NewStateStore() - m = &mockSteward{} + statestoreMock = statestore.NewStateStore() + stewardMock = &mock.Steward{} storer = smock.NewStorer() addr = swarm.NewAddress([]byte{31: 128}) ) client, _, _ := newTestServer(t, testServerOptions{ Storer: storer, - Tags: tags.NewTags(mockStatestore, logger), + Tags: tags.NewTags(statestoreMock, logger), Logger: logger, - Steward: m, + Steward: stewardMock, }) t.Run("re-upload", func(t *testing.T) { @@ -43,8 +43,8 @@ func TestStewardship(t *testing.T) { Code: http.StatusOK, }), ) - if !m.addr.Equal(addr) { - t.Fatalf("\nhave address: %q\nwant address: %q", m.addr.String(), addr.String()) + if !stewardMock.LastAddress().Equal(addr) { + t.Fatalf("\nhave address: %q\nwant address: %q", stewardMock.LastAddress().String(), addr.String()) } }) @@ -60,16 +60,3 @@ func TestStewardship(t *testing.T) { ) }) } - -type mockSteward struct { - addr swarm.Address -} - -func (m *mockSteward) Reupload(_ context.Context, addr swarm.Address) error { - m.addr = addr - return nil -} - -func (m *mockSteward) IsRetrievable(_ context.Context, _ swarm.Address) (bool, error) { - return true, nil -} diff --git a/pkg/node/devnode.go b/pkg/node/devnode.go index 1a4a82ba74b..6e5a12a6a07 100644 --- a/pkg/node/devnode.go +++ b/pkg/node/devnode.go @@ -41,6 +41,7 @@ import ( swapmock "github.com/ethersphere/bee/pkg/settlement/swap/mock" "github.com/ethersphere/bee/pkg/statestore/leveldb" mockStateStore "github.com/ethersphere/bee/pkg/statestore/mock" + "github.com/ethersphere/bee/pkg/steward/mock" "github.com/ethersphere/bee/pkg/swarm" "github.com/ethersphere/bee/pkg/tags" "github.com/ethersphere/bee/pkg/topology/lightnode" @@ -272,7 +273,7 @@ func NewDevBee(logger logging.Logger, o *DevOptions) (b *DevBee, err error) { feedFactory := factory.New(storer) - apiService := api.New(tagService, storer, nil, pssService, traversalService, pinningService, feedFactory, post, postageContract, nil, signer, logger, tracer, api.Options{ + apiService := api.New(tagService, storer, nil, pssService, traversalService, pinningService, feedFactory, post, postageContract, new(mock.Steward), signer, logger, tracer, api.Options{ CORSAllowedOrigins: o.CORSAllowedOrigins, GatewayMode: false, WsPingPeriod: 60 * time.Second, diff --git a/pkg/steward/mock/steward.go b/pkg/steward/mock/steward.go new file mode 100644 index 00000000000..dd9bbae9ce1 --- /dev/null +++ b/pkg/steward/mock/steward.go @@ -0,0 +1,34 @@ +// Copyright 2021 The Swarm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mock + +import ( + "context" + + "github.com/ethersphere/bee/pkg/swarm" +) + +// Steward represents steward.Interface mock. +type Steward struct { + addr swarm.Address +} + +// Reupload implements steward.Interface Reupload method. +// The given address is recorded. +func (s *Steward) Reupload(_ context.Context, addr swarm.Address) error { + s.addr = addr + return nil +} + +// IsRetrievable implements steward.Interface IsRetrievable method. +// The method always returns true. +func (s *Steward) IsRetrievable(_ context.Context, _ swarm.Address) (bool, error) { + return true, nil +} + +// LastAddress returns the last address given to the Reupload method call. +func (s *Steward) LastAddress() swarm.Address { + return s.addr +}