storj/cmd/storagenode/main_test.go
Cameron 10b364a2da
cmd/storagenode: enable migration of configs of different types (#3189)
* move deprecated flags code to deprecated.go, refactor to allow migration of other flags
* hide deprecated flags
2019-10-08 14:26:53 -04:00

134 lines
3.8 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package main
import (
"reflect"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
func TestMapDeprecatedConfigs(t *testing.T) {
log := zap.L()
cases := []struct {
testID string
newExternalAddr string
deprecatedExternalAddr string
expectedAddr string
newWallet string
deprecatedWallet string
expectedWallet string
newEmail string
deprecatedEmail string
expectedEmail string
}{
{testID: "deprecated present, override",
newExternalAddr: "newAddr",
deprecatedExternalAddr: "oldAddr",
expectedAddr: "oldAddr",
newWallet: "newWallet",
deprecatedWallet: "oldWallet",
expectedWallet: "oldWallet",
newEmail: "newEmail",
deprecatedEmail: "oldEmail",
expectedEmail: "oldEmail",
},
{testID: "deprecated absent, do not override",
newExternalAddr: "newAddr",
deprecatedExternalAddr: "",
expectedAddr: "newAddr",
newWallet: "newWallet",
deprecatedWallet: "",
expectedWallet: "newWallet",
newEmail: "newEmail",
deprecatedEmail: "",
expectedEmail: "newEmail",
},
}
for _, c := range cases {
testCase := c
t.Run(testCase.testID, func(t *testing.T) {
runCfg.Contact.ExternalAddress = testCase.newExternalAddr
runCfg.Deprecated.Kademlia.ExternalAddress = testCase.deprecatedExternalAddr
runCfg.Operator.Wallet = testCase.newWallet
runCfg.Deprecated.Kademlia.Operator.Wallet = testCase.deprecatedWallet
runCfg.Operator.Email = testCase.newEmail
runCfg.Deprecated.Kademlia.Operator.Email = testCase.deprecatedEmail
mapDeprecatedConfigs(log)
require.Equal(t, testCase.expectedAddr, runCfg.Contact.ExternalAddress)
require.Equal(t, testCase.expectedWallet, runCfg.Operator.Wallet)
require.Equal(t, testCase.expectedEmail, runCfg.Operator.Email)
})
}
}
func TestParseOverride(t *testing.T) {
cases := []struct {
testID string
newConfigValue interface{}
oldConfigValue string
expectedNewConfig interface{}
}{
{testID: "test new config is untouched if deprecated is undefined",
newConfigValue: "test-string",
oldConfigValue: "",
expectedNewConfig: "test-string",
},
{testID: "test migrate int",
newConfigValue: int(1),
oldConfigValue: "100",
expectedNewConfig: int(100),
},
{testID: "test migrate int64",
newConfigValue: int64(1),
oldConfigValue: "100",
expectedNewConfig: int64(100),
},
{testID: "test migrate uint",
newConfigValue: uint(1),
oldConfigValue: "2",
expectedNewConfig: uint(2),
},
{testID: "test migrate uint64",
newConfigValue: uint64(1),
oldConfigValue: "100",
expectedNewConfig: uint64(100),
},
{testID: "test migrate time.Duration",
newConfigValue: 1 * time.Hour,
oldConfigValue: "100h",
expectedNewConfig: 100 * time.Hour,
},
{testID: "test migrate float64",
newConfigValue: 0.5,
oldConfigValue: "1.5",
expectedNewConfig: 1.5,
},
{testID: "test migrate string",
newConfigValue: "example@example.com",
oldConfigValue: "migrate@migrate.com",
expectedNewConfig: "migrate@migrate.com",
},
{testID: "test migrate bool",
newConfigValue: false,
oldConfigValue: "true",
expectedNewConfig: true,
},
}
for _, c := range cases {
testCase := c
t.Run(testCase.testID, func(t *testing.T) {
if testCase.oldConfigValue != "" {
typ := reflect.TypeOf(testCase.newConfigValue)
testCase.newConfigValue = parseOverride(typ, testCase.oldConfigValue)
}
require.Equal(t, testCase.expectedNewConfig, testCase.newConfigValue)
})
}
}