Skip to content

Commit

Permalink
Merge branch 'master' into issue/570
Browse files Browse the repository at this point in the history
  • Loading branch information
robdefeo committed Feb 16, 2020
2 parents 3c1c26b + d79fd7f commit 03b0fdb
Show file tree
Hide file tree
Showing 43 changed files with 1,764 additions and 196 deletions.
56 changes: 56 additions & 0 deletions cmd/mailchain/internal/settings/blockscout_pkf.go
@@ -0,0 +1,56 @@
package settings //nolint: dupl

import (
"github.com/mailchain/mailchain/cmd/internal/settings/output"
"github.com/mailchain/mailchain/cmd/internal/settings/values"
"github.com/mailchain/mailchain/cmd/mailchain/internal/settings/defaults"
"github.com/mailchain/mailchain/internal/clients/blockscout"
"github.com/mailchain/mailchain/internal/mailbox"
"github.com/mailchain/mailchain/internal/protocols/ethereum"
)

// BlockscoutPublicKeyFinder configuration settings.
type BlockscoutPublicKeyFinder struct {
EnabledProtocolNetworks values.StringSlice
APIKey values.String
kind string
}

func blockscoutPublicKeyFinderNoAuth(s values.Store) *BlockscoutPublicKeyFinder {
kind := defaults.ClientBlockscoutNoAuth

return &BlockscoutPublicKeyFinder{
kind: kind,
EnabledProtocolNetworks: values.NewDefaultStringSlice(
[]string{"ethereum/" + ethereum.Mainnet},
s,
"public-key-finders."+kind+".enabled-networks",
),
APIKey: values.NewDefaultString("", s, "public-key-finders."+kind+".api-key"),
}
}

// Supports a map of what protocol and network combinations are supported.
func (r BlockscoutPublicKeyFinder) Supports() map[string]bool {
m := map[string]bool{}
for _, np := range r.EnabledProtocolNetworks.Get() {
m[np] = true
}

return m
}

// Produce `mailbox.PubKeyFinder` based on configuration settings.
func (r BlockscoutPublicKeyFinder) Produce() (mailbox.PubKeyFinder, error) {
return blockscout.NewAPIClient()
}

// Output configuration as an `output.Element` for use in exporting configuration.
func (r BlockscoutPublicKeyFinder) Output() output.Element {
return output.Element{
FullName: "public-key-finders." + r.kind,
Attributes: []output.Attribute{
r.EnabledProtocolNetworks.Attribute(),
},
}
}
122 changes: 122 additions & 0 deletions cmd/mailchain/internal/settings/blockscout_pkf_test.go
@@ -0,0 +1,122 @@
package settings

import (
"testing"

"github.com/golang/mock/gomock"
"github.com/mailchain/mailchain/cmd/internal/settings/values"
"github.com/mailchain/mailchain/cmd/internal/settings/values/valuestest"
"github.com/mailchain/mailchain/internal/clients/blockscout"
"github.com/mailchain/mailchain/internal/mailbox"
"github.com/stretchr/testify/assert"
)

func Test_blockscoutPublicKeyFinderNoAuth(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
type args struct {
s values.Store
}
tests := []struct {
name string
args args
wantEnabledProtocolNetworks []string
}{
{
"success",
args{
func() values.Store {
m := valuestest.NewMockStore(mockCtrl)
m.EXPECT().IsSet("public-key-finders.blockscout-no-auth.enabled-networks").Return(false)
return m
}(),
},
[]string{"ethereum/mainnet"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := blockscoutPublicKeyFinderNoAuth(tt.args.s)
assert.Equal(t, tt.wantEnabledProtocolNetworks, got.EnabledProtocolNetworks.Get())
})
}
}

func TestBlockscoutPublicKeyFinder_Supports(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
type fields struct {
EnabledProtocolNetworks values.StringSlice
}
tests := []struct {
name string
fields fields
want map[string]bool
}{
{
"success",
fields{
func() values.StringSlice {
m := valuestest.NewMockStringSlice(mockCtrl)
m.EXPECT().Get().Return([]string{"ethereum/mainnet", "ethereum/ropsten"})
return m
}(),
},
map[string]bool{"ethereum/mainnet": true, "ethereum/ropsten": true},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
r := BlockscoutPublicKeyFinder{
EnabledProtocolNetworks: tt.fields.EnabledProtocolNetworks,
}
if got := r.Supports(); !assert.Equal(t, tt.want, got) {
t.Errorf("BlockscoutPublicKeyFinder.Supports() = %v, want %v", got, tt.want)
}
})
}
}

func TestBlockscoutPublicKeyFinder_Produce(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
type fields struct {
kind string
EnabledProtocolNetworks values.StringSlice
}
tests := []struct {
name string
fields fields
want mailbox.PubKeyFinder
wantErr bool
}{
{
"success",
fields{
"test",
func() values.StringSlice {
m := valuestest.NewMockStringSlice(mockCtrl)
return m
}(),
},
&blockscout.APIClient{},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
r := BlockscoutPublicKeyFinder{
kind: tt.fields.kind,
EnabledProtocolNetworks: tt.fields.EnabledProtocolNetworks,
}
got, err := r.Produce()
if (err != nil) != tt.wantErr {
t.Errorf("BlockscoutPublicKeyFinder.Produce() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !assert.IsType(t, tt.want, got) {
t.Errorf("BlockscoutPublicKeyFinder.Produce() = %v, want %v", got, tt.want)
}
})
}
}
9 changes: 2 additions & 7 deletions cmd/mailchain/internal/settings/blockscout_receiver.go
Expand Up @@ -13,22 +13,18 @@ import (
type BlockscoutReceiver struct {
kind string
EnabledProtocolNetworks values.StringSlice
APIKey values.String
}

func blockscoutReceiverNoAuth(s values.Store) *BlockscoutReceiver {
return blockscoutReceiverAny(s, defaults.ClientBlockscoutNoAuth)
}
kind := defaults.ClientBlockscoutNoAuth

func blockscoutReceiverAny(s values.Store, kind string) *BlockscoutReceiver {
return &BlockscoutReceiver{
kind: kind,
EnabledProtocolNetworks: values.NewDefaultStringSlice(
[]string{"ethereum/" + ethereum.Mainnet},
s,
"receivers."+kind+".enabled-networks",
),
APIKey: values.NewDefaultString("", s, "receivers."+kind+".api-key"),
}
}

Expand All @@ -44,7 +40,7 @@ func (r BlockscoutReceiver) Supports() map[string]bool {

// Produce `mailbox.Receiver` based on configuration settings.
func (r BlockscoutReceiver) Produce() (mailbox.Receiver, error) {
return blockscout.NewAPIClient(r.APIKey.Get())
return blockscout.NewAPIClient()
}

// Output configuration as an `output.Element` for use in exporting configuration.
Expand All @@ -53,7 +49,6 @@ func (r BlockscoutReceiver) Output() output.Element {
FullName: r.kind,
Attributes: []output.Attribute{
r.EnabledProtocolNetworks.Attribute(),
r.APIKey.Attribute(),
},
}
}
52 changes: 1 addition & 51 deletions cmd/mailchain/internal/settings/blockscout_receiver_test.go
@@ -1,7 +1,6 @@
package settings

import (
"reflect"
"testing"

"github.com/golang/mock/gomock"
Expand All @@ -12,43 +11,6 @@ import (
"github.com/stretchr/testify/assert"
)

func Test_blockscoutReceiverAny(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
type args struct {
s values.Store
kind string
}
tests := []struct {
name string
args args
wantEnabledProtocolNetworks []string
wantAPIKey string
}{
{
"success",
args{
func() values.Store {
m := valuestest.NewMockStore(mockCtrl)
m.EXPECT().IsSet("receivers.type.enabled-networks").Return(false)
m.EXPECT().IsSet("receivers.type.api-key").Return(false)
return m
}(),
"type",
},
[]string{"ethereum/mainnet"},
"",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := blockscoutReceiverAny(tt.args.s, tt.args.kind)
assert.Equal(t, tt.wantEnabledProtocolNetworks, got.EnabledProtocolNetworks.Get())
assert.Equal(t, tt.wantAPIKey, got.APIKey.Get())
})
}
}

func Test_blockscoutReceiverNoAuth(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
Expand All @@ -59,27 +21,23 @@ func Test_blockscoutReceiverNoAuth(t *testing.T) {
name string
args args
wantEnabledProtocolNetworks []string
wantAPIKey string
}{
{
"success",
args{
func() values.Store {
m := valuestest.NewMockStore(mockCtrl)
m.EXPECT().IsSet("receivers.blockscout-no-auth.enabled-networks").Return(false)
m.EXPECT().IsSet("receivers.blockscout-no-auth.api-key").Return(false)
return m
}(),
},
[]string{"ethereum/mainnet"},
"",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := blockscoutReceiverNoAuth(tt.args.s)
assert.Equal(t, tt.wantEnabledProtocolNetworks, got.EnabledProtocolNetworks.Get())
assert.Equal(t, tt.wantAPIKey, got.APIKey.Get())
})
}
}
Expand Down Expand Up @@ -113,9 +71,8 @@ func TestBlockscoutReceiver_Supports(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
r := BlockscoutReceiver{
EnabledProtocolNetworks: tt.fields.EnabledProtocolNetworks,
APIKey: tt.fields.APIKey,
}
if got := r.Supports(); !reflect.DeepEqual(got, tt.want) {
if got := r.Supports(); !assert.Equal(t, tt.want, got) {
t.Errorf("blockscoutReceiver.Supports() = %v, want %v", got, tt.want)
}
})
Expand All @@ -128,7 +85,6 @@ func TestBlockscoutReceiver_Produce(t *testing.T) {
type fields struct {
kind string
EnabledProtocolNetworks values.StringSlice
APIKey values.String
}
tests := []struct {
name string
Expand All @@ -144,11 +100,6 @@ func TestBlockscoutReceiver_Produce(t *testing.T) {
m := valuestest.NewMockStringSlice(mockCtrl)
return m
}(),
func() values.String {
m := valuestest.NewMockString(mockCtrl)
m.EXPECT().Get().Return("apikey")
return m
}(),
},
&blockscout.APIClient{},
false,
Expand All @@ -159,7 +110,6 @@ func TestBlockscoutReceiver_Produce(t *testing.T) {
r := BlockscoutReceiver{
kind: tt.fields.kind,
EnabledProtocolNetworks: tt.fields.EnabledProtocolNetworks,
APIKey: tt.fields.APIKey,
}
got, err := r.Produce()
if (err != nil) != tt.wantErr {
Expand Down
3 changes: 1 addition & 2 deletions cmd/mailchain/internal/settings/etherscan_pkf_test.go
@@ -1,7 +1,6 @@
package settings

import (
"reflect"
"testing"

"github.com/golang/mock/gomock"
Expand Down Expand Up @@ -148,7 +147,7 @@ func TestEtherscanPublicKeyFinder_Supports(t *testing.T) {
EnabledProtocolNetworks: tt.fields.EnabledProtocolNetworks,
APIKey: tt.fields.APIKey,
}
if got := r.Supports(); !reflect.DeepEqual(got, tt.want) {
if got := r.Supports(); !assert.Equal(t, tt.want, got) {
t.Errorf("EtherscanPublicKeyFinder.Supports() = %v, want %v", got, tt.want)
}
})
Expand Down
1 change: 0 additions & 1 deletion cmd/mailchain/internal/settings/ethrpc_test.go
Expand Up @@ -32,7 +32,6 @@ func TestEthereumRPC2_Produce(t *testing.T) {
func() values.String {
m := valuestest.NewMockString(mockCtrl)
m.EXPECT().Get().Return(server.URL)
// m.EXPECT().IsSet("server.cors.allowedOrigins").Return(false)
return m
}(),
"mainnet",
Expand Down
1 change: 1 addition & 0 deletions cmd/mailchain/internal/settings/pkf.go
Expand Up @@ -13,6 +13,7 @@ func publicKeyFinders(s values.Store) *PublicKeyFinders {
clients: map[string]PublicKeyFinderClient{
defaults.ClientEtherscanNoAuth: etherscanPublicKeyFinderNoAuth(s),
defaults.ClientEtherscan: etherscanPublicKeyFinder(s),
defaults.ClientBlockscoutNoAuth: blockscoutPublicKeyFinderNoAuth(s),
defaults.SubstratePublicKeyFinder: substratePublicKeyFinder(s),
},
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/mailchain/internal/settings/root.go
Expand Up @@ -28,7 +28,7 @@ func FromStore(s values.Store) *Root {
&defaults.NetworkDefaults{
NameServiceAddress: defaults.NameServiceAddressKind,
NameServiceDomainName: defaults.NameServiceDomainNameKind,
PublicKeyFinder: defaults.ClientEtherscanNoAuth,
PublicKeyFinder: defaults.ClientBlockscoutNoAuth,
Receiver: defaults.ClientBlockscoutNoAuth,
Sender: defaults.EthereumRelay,
Disabled: false,
Expand Down
1 change: 0 additions & 1 deletion cmd/mailchain/internal/settings/root_test.go
Expand Up @@ -50,7 +50,6 @@ func TestFromStore(t *testing.T) {
}

func TestRoot_ToYaml(t *testing.T) {

mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
type args struct {
Expand Down

0 comments on commit 03b0fdb

Please sign in to comment.