Adds tests for kad replacement and restores kad operator configs (#3094)
* test that all nodes can check in with all satellites * keep kademlia config * add untrusted satellite test * use getversion * remove kademlia config changes in test-sim-backwards.sh * add kademlia flags back to storj-sim storagenode * reset kademlia flags in storagenode entrypoint
This commit is contained in:
parent
69aa0c6cc4
commit
d2502bb51b
@ -11,8 +11,8 @@ RUN_PARAMS="${RUN_PARAMS:-} --identity-dir identity"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --metrics.app-suffix=-alpha"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --metrics.interval=30m"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --contact.external-address=${ADDRESS}"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --operator.email=${EMAIL}"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --operator.wallet=${WALLET}"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --kademlia.operator.email=${EMAIL}"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --kademlia.operator.wallet=${WALLET}"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --console.address=:14002"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --console.static-dir=/app"
|
||||
RUN_PARAMS="${RUN_PARAMS:-} --storage.allocated-bandwidth=${BANDWIDTH}"
|
||||
|
@ -448,8 +448,8 @@ func newNetwork(flags *Flags) (*Processes, error) {
|
||||
"--server.address", process.Address,
|
||||
"--server.private-address", net.JoinHostPort(host, port(storagenodePeer, i, privateGRPC)),
|
||||
|
||||
"--operator.email", fmt.Sprintf("storage%d@mail.test", i),
|
||||
"--operator.wallet", "0x0123456789012345678901234567890123456789",
|
||||
"--kademlia.operator.email", fmt.Sprintf("storage%d@mail.test", i),
|
||||
"--kademlia.operator.wallet", "0x0123456789012345678901234567890123456789",
|
||||
|
||||
"--storage2.monitor.minimum-disk-space", "0",
|
||||
"--storage2.monitor.minimum-bandwidth", "0",
|
||||
|
@ -38,18 +38,22 @@ func TestBasic(t *testing.T) {
|
||||
t.Log("UPLINK", uplink.ID(), uplink.Addr())
|
||||
}
|
||||
|
||||
sat := planet.Satellites[0].Local().Node
|
||||
node := planet.StorageNodes[0].Local()
|
||||
conn, err := planet.StorageNodes[0].Transport.DialNode(ctx, &sat)
|
||||
require.NoError(t, err)
|
||||
_, err = pb.NewNodeClient(conn).CheckIn(ctx, &pb.CheckInRequest{
|
||||
Address: node.GetAddress().GetAddress(),
|
||||
Version: &node.Version,
|
||||
Capacity: &node.Capacity,
|
||||
Operator: &node.Operator,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
for _, sat := range planet.Satellites {
|
||||
satellite := sat.Local().Node
|
||||
for _, sn := range planet.StorageNodes {
|
||||
node := sn.Local()
|
||||
conn, err := sn.Transport.DialNode(ctx, &satellite)
|
||||
require.NoError(t, err)
|
||||
_, err = pb.NewNodeClient(conn).CheckIn(ctx, &pb.CheckInRequest{
|
||||
Address: node.GetAddress().GetAddress(),
|
||||
Version: &node.Version,
|
||||
Capacity: &node.Capacity,
|
||||
Operator: &node.Operator,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
}
|
||||
// wait a bit to see whether some failures occur
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import (
|
||||
"github.com/zeebo/errs"
|
||||
|
||||
"storj.io/storj/internal/memory"
|
||||
"storj.io/storj/pkg/kademlia"
|
||||
"storj.io/storj/pkg/peertls/extensions"
|
||||
"storj.io/storj/pkg/peertls/tlsopts"
|
||||
"storj.io/storj/pkg/revocation"
|
||||
@ -71,9 +72,11 @@ func (planet *Planet) newStorageNodes(count int, whitelistedSatellites storj.Nod
|
||||
},
|
||||
},
|
||||
},
|
||||
Operator: storagenode.OperatorConfig{
|
||||
Email: prefix + "@mail.test",
|
||||
Wallet: "0x" + strings.Repeat("00", 20),
|
||||
Kademlia: kademlia.Config{
|
||||
Operator: kademlia.OperatorConfig{
|
||||
Email: prefix + "@mail.test",
|
||||
Wallet: "0x" + strings.Repeat("00", 20),
|
||||
},
|
||||
},
|
||||
Storage: piecestore.OldConfig{
|
||||
Path: filepath.Join(storageDir, "pieces/"),
|
||||
|
@ -50,13 +50,6 @@ PATH=$RELEASE_DIR/bin:$PATH storj-sim -x --host $STORJ_NETWORK_HOST4 network tes
|
||||
# this replaces anywhere that has "/release/" in the config file, which currently just renames the static dir paths
|
||||
sed -i -e 's#/release/#/branch/#g' `storj-sim network env SATELLITE_0_DIR`/config.yaml
|
||||
|
||||
# remove kademlia from config
|
||||
sed -i -e 's/kademlia.//g' `storj-sim network env STORAGENODE_5_DIR`/config.yaml
|
||||
sed -i -e 's/kademlia.//g' `storj-sim network env STORAGENODE_6_DIR`/config.yaml
|
||||
sed -i -e 's/kademlia.//g' `storj-sim network env STORAGENODE_7_DIR`/config.yaml
|
||||
sed -i -e 's/kademlia.//g' `storj-sim network env STORAGENODE_8_DIR`/config.yaml
|
||||
sed -i -e 's/kademlia.//g' `storj-sim network env STORAGENODE_9_DIR`/config.yaml
|
||||
|
||||
## Ensure that partially upgraded network works
|
||||
|
||||
# keep half of the storage nodes on the old version
|
||||
|
@ -7,10 +7,13 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
"storj.io/storj/internal/testcontext"
|
||||
"storj.io/storj/internal/testplanet"
|
||||
"storj.io/storj/pkg/pb"
|
||||
"storj.io/storj/storagenode"
|
||||
)
|
||||
|
||||
func TestStoragenodeContactEndpoint(t *testing.T) {
|
||||
@ -75,9 +78,9 @@ func TestNodeInfoUpdated(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestRequestInfoEndpoint(t *testing.T) {
|
||||
func TestRequestInfoEndpointTrustedSatellite(t *testing.T) {
|
||||
testplanet.Run(t, testplanet.Config{
|
||||
SatelliteCount: 1, StorageNodeCount: 1, UplinkCount: 0,
|
||||
SatelliteCount: 2, StorageNodeCount: 1, UplinkCount: 0,
|
||||
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
|
||||
nodeDossier := planet.StorageNodes[0].Local()
|
||||
|
||||
@ -92,6 +95,29 @@ func TestRequestInfoEndpoint(t *testing.T) {
|
||||
require.Equal(t, nodeDossier.Type, resp.Type)
|
||||
require.Equal(t, &nodeDossier.Operator, resp.Operator)
|
||||
require.Equal(t, &nodeDossier.Capacity, resp.Capacity)
|
||||
require.Equal(t, nodeDossier.Version.Version, resp.Version.Version)
|
||||
require.Equal(t, nodeDossier.Version.GetVersion(), resp.Version.GetVersion())
|
||||
})
|
||||
}
|
||||
|
||||
func TestRequestInfoEndpointUntrustedSatellite(t *testing.T) {
|
||||
testplanet.Run(t, testplanet.Config{
|
||||
SatelliteCount: 2, StorageNodeCount: 1, UplinkCount: 0,
|
||||
Reconfigure: testplanet.Reconfigure{
|
||||
StorageNode: func(index int, config *storagenode.Config) {
|
||||
config.Storage.WhitelistedSatellites = nil
|
||||
},
|
||||
},
|
||||
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
|
||||
nodeDossier := planet.StorageNodes[0].Local()
|
||||
|
||||
// Satellite Untrusted
|
||||
conn, err := planet.Satellites[0].Transport.DialNode(ctx, &nodeDossier.Node)
|
||||
require.NoError(t, err)
|
||||
defer ctx.Check(conn.Close)
|
||||
|
||||
resp, err := pb.NewNodesClient(conn).RequestInfo(ctx, &pb.InfoRequest{})
|
||||
require.Nil(t, resp)
|
||||
require.Error(t, err)
|
||||
require.Equal(t, status.Errorf(codes.PermissionDenied, "untrusted peer %v", planet.Satellites[0].Local().Id), err)
|
||||
})
|
||||
}
|
||||
|
@ -1,50 +0,0 @@
|
||||
// Copyright (C) 2019 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package storagenode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// OperatorConfig defines properties related to storage node operator metadata
|
||||
type OperatorConfig struct {
|
||||
Email string `user:"true" help:"operator email address" default:""`
|
||||
Wallet string `user:"true" help:"operator wallet address" default:""`
|
||||
}
|
||||
|
||||
// Verify verifies whether operator config is valid.
|
||||
func (c OperatorConfig) Verify(log *zap.Logger) error {
|
||||
if err := isOperatorEmailValid(log, c.Email); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := isOperatorWalletValid(log, c.Wallet); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isOperatorEmailValid(log *zap.Logger, email string) error {
|
||||
if email == "" {
|
||||
log.Sugar().Warn("Operator email address isn't specified.")
|
||||
} else {
|
||||
log.Sugar().Info("Operator email: ", email)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isOperatorWalletValid(log *zap.Logger, wallet string) error {
|
||||
if wallet == "" {
|
||||
return fmt.Errorf("operator wallet address isn't specified")
|
||||
}
|
||||
r := regexp.MustCompile("^0x[a-fA-F0-9]{40}$")
|
||||
if match := r.MatchString(wallet); !match {
|
||||
return fmt.Errorf("operator wallet address isn't valid")
|
||||
}
|
||||
|
||||
log.Sugar().Info("operator wallet: ", wallet)
|
||||
return nil
|
||||
}
|
@ -15,6 +15,7 @@ import (
|
||||
"storj.io/storj/internal/errs2"
|
||||
"storj.io/storj/internal/version"
|
||||
"storj.io/storj/pkg/identity"
|
||||
"storj.io/storj/pkg/kademlia"
|
||||
"storj.io/storj/pkg/pb"
|
||||
"storj.io/storj/pkg/peertls/extensions"
|
||||
"storj.io/storj/pkg/peertls/tlsopts"
|
||||
@ -73,7 +74,7 @@ type Config struct {
|
||||
Server server.Config
|
||||
|
||||
Contact contact.Config
|
||||
Operator OperatorConfig
|
||||
Kademlia kademlia.Config
|
||||
|
||||
// TODO: flatten storage config and only keep the new one
|
||||
Storage piecestore.OldConfig
|
||||
@ -93,7 +94,7 @@ type Config struct {
|
||||
|
||||
// Verify verifies whether configuration is consistent and acceptable.
|
||||
func (config *Config) Verify(log *zap.Logger) error {
|
||||
return config.Operator.Verify(log)
|
||||
return config.Kademlia.Verify(log)
|
||||
}
|
||||
|
||||
// Peer is the representation of a Storage Node.
|
||||
@ -214,8 +215,8 @@ func New(log *zap.Logger, full *identity.FullIdentity, db DB, revocationDB exten
|
||||
},
|
||||
Type: pb.NodeType_STORAGE,
|
||||
Operator: pb.NodeOperator{
|
||||
Email: config.Operator.Email,
|
||||
Wallet: config.Operator.Wallet,
|
||||
Email: config.Kademlia.Operator.Email,
|
||||
Wallet: config.Kademlia.Operator.Wallet,
|
||||
},
|
||||
Version: *pbVersion,
|
||||
}
|
||||
@ -329,7 +330,7 @@ func New(log *zap.Logger, full *identity.FullIdentity, db DB, revocationDB exten
|
||||
peer.Version,
|
||||
config.Storage.AllocatedBandwidth,
|
||||
config.Storage.AllocatedDiskSpace,
|
||||
config.Operator.Wallet,
|
||||
config.Kademlia.Operator.Wallet,
|
||||
versionInfo,
|
||||
peer.Storage2.Trust,
|
||||
peer.DB.Reputation(),
|
||||
|
Loading…
Reference in New Issue
Block a user