Skip to content

Commit 79765d5

Browse files
Merge pull request #79 from hyperledger/update-ffsigners
Update firefly-common
2 parents 710fe3a + c3f9e12 commit 79765d5

28 files changed

+281
-96
lines changed

cmd/client.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func ClientCommand() *cobra.Command {
3535
return buildClientCommand(createClient)
3636
}
3737

38-
func buildClientCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
38+
func buildClientCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
3939
clientCmd := &cobra.Command{
4040
Use: "client <subcommand>",
4141
Short: "Make API requests to a blockchain connector instance",
@@ -51,7 +51,7 @@ func buildClientCommand(clientFactory func() apiclient.FFTMClient) *cobra.Comman
5151
return clientCmd
5252
}
5353

54-
func createClient() apiclient.FFTMClient {
54+
func createClient() (apiclient.FFTMClient, error) {
5555
cfg := config.RootSection("fftm_client")
5656
apiclient.InitConfig(cfg)
5757
if url != "" {

cmd/client_eventstreams.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
var eventStreamID string
2525

26-
func clientEventStreamsCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
26+
func clientEventStreamsCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2727
clientEventStreamsCmd := &cobra.Command{
2828
Use: "eventstreams <subcommand>",
2929
Short: "Make API requests to an blockchain connector instance",

cmd/client_eventstreams_delete.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import (
2525
"github.com/spf13/cobra"
2626
)
2727

28-
func clientEventStreamsDeleteCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
28+
func clientEventStreamsDeleteCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2929
clientEventStreamsDeleteCmd := &cobra.Command{
3030
Use: "delete",
3131
Short: "Delete event streams",
3232
Long: "",
3333
RunE: func(cmd *cobra.Command, args []string) error {
34-
client := clientFactory()
34+
client, err := clientFactory()
35+
if err != nil {
36+
return err
37+
}
3538
if eventStreamID == "" && nameRegex == "" {
3639
return fmt.Errorf("eventstream or name flag must be set")
3740
}

cmd/client_eventstreams_delete_test.go

+24-6
Original file line numberDiff line numberDiff line change
@@ -28,43 +28,61 @@ import (
2828

2929
func TestEventStreamsDeleteByID(t *testing.T) {
3030
mc := apiclientmocks.NewFFTMClient(t)
31-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
31+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
3232
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
3333
mc.On("DeleteEventStream", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return(nil)
3434
err := cmd.Execute()
3535
assert.NoError(t, err)
3636
mc.AssertExpectations(t)
3737
}
3838

39+
func TestEventStreamsDeleteByIDBadClientConfig(t *testing.T) {
40+
mc := apiclientmocks.NewFFTMClient(t)
41+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
42+
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
43+
err := cmd.Execute()
44+
assert.Regexp(t, "pop", err)
45+
mc.AssertExpectations(t)
46+
}
47+
3948
func TestEventStreamsDeleteByName(t *testing.T) {
4049
mc := apiclientmocks.NewFFTMClient(t)
41-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
50+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
4251
cmd.SetArgs([]string{"eventstreams", "delete", "--name", "foo"})
4352
mc.On("DeleteEventStreamsByName", mock.Anything, "foo").Return(nil)
4453
err := cmd.Execute()
4554
assert.NoError(t, err)
4655
mc.AssertExpectations(t)
4756
}
4857

58+
func TestEventStreamsDeleteByNameBadClientConfig(t *testing.T) {
59+
mc := apiclientmocks.NewFFTMClient(t)
60+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
61+
cmd.SetArgs([]string{"eventstreams", "delete", "--name", "foo"})
62+
err := cmd.Execute()
63+
assert.Regexp(t, "pop", err)
64+
mc.AssertExpectations(t)
65+
}
66+
4967
func TestEventStreamsDeleteNoID(t *testing.T) {
5068
mc := apiclientmocks.NewFFTMClient(t)
51-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
69+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
5270
cmd.SetArgs([]string{"eventstreams", "delete"})
5371
err := cmd.Execute()
5472
assert.Regexp(t, "eventstream or name flag must be set", err)
5573
}
5674

5775
func TestEventStreamsDeleteIDandName(t *testing.T) {
5876
mc := apiclientmocks.NewFFTMClient(t)
59-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
77+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
6078
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--name", "foo"})
6179
err := cmd.Execute()
6280
assert.Regexp(t, "eventstream and name flags cannot be combined", err)
6381
}
6482

6583
func TestEventStreamsDeleteByNameError(t *testing.T) {
6684
mc := apiclientmocks.NewFFTMClient(t)
67-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
85+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
6886
cmd.SetArgs([]string{"eventstreams", "delete", "--name", "foo"})
6987
mc.On("DeleteEventStreamsByName", mock.Anything, "foo").Return(fmt.Errorf("pop"))
7088
err := cmd.Execute()
@@ -74,7 +92,7 @@ func TestEventStreamsDeleteByNameError(t *testing.T) {
7492

7593
func TestEventStreamsDeleteByIDError(t *testing.T) {
7694
mc := apiclientmocks.NewFFTMClient(t)
77-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
95+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
7896
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
7997
mc.On("DeleteEventStream", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return(fmt.Errorf("pop"))
8098
err := cmd.Execute()

cmd/client_eventstreams_list.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import (
2525
"github.com/spf13/cobra"
2626
)
2727

28-
func clientEventStreamsListCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
28+
func clientEventStreamsListCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2929
clientEventStreamsListCmd := &cobra.Command{
3030
Use: "list",
3131
Short: "List event streams",
3232
Long: "",
3333
RunE: func(cmd *cobra.Command, args []string) error {
34-
client := clientFactory()
34+
client, err := clientFactory()
35+
if err != nil {
36+
return err
37+
}
3538
eventStreams, err := client.GetEventStreams(context.Background())
3639
if err != nil {
3740
return err

cmd/client_eventstreams_list_test.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929

3030
func TestEventStreamsList(t *testing.T) {
3131
mc := apiclientmocks.NewFFTMClient(t)
32-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
32+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
3333
cmd.SetArgs([]string{"eventstreams", "list"})
3434
mc.On("GetEventStreams", mock.Anything).Return([]apitypes.EventStream{}, nil)
3535
err := cmd.Execute()
@@ -39,10 +39,19 @@ func TestEventStreamsList(t *testing.T) {
3939

4040
func TestEventStreamsListError(t *testing.T) {
4141
mc := apiclientmocks.NewFFTMClient(t)
42-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
42+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
4343
cmd.SetArgs([]string{"eventstreams", "list"})
4444
mc.On("GetEventStreams", mock.Anything).Return(nil, fmt.Errorf("pop"))
4545
err := cmd.Execute()
4646
assert.Regexp(t, "pop", err)
4747
mc.AssertExpectations(t)
4848
}
49+
50+
func TestEventStreamsListBadClientConfig(t *testing.T) {
51+
mc := apiclientmocks.NewFFTMClient(t)
52+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
53+
cmd.SetArgs([]string{"eventstreams", "list"})
54+
err := cmd.Execute()
55+
assert.Regexp(t, "pop", err)
56+
mc.AssertExpectations(t)
57+
}

cmd/client_listeners.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
var listenerID string
2525

26-
func clientListenersCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
26+
func clientListenersCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2727
clientListenersCmd := &cobra.Command{
2828
Use: "listeners <subcommand>",
2929
Short: "Make API requests to an blockchain connector instance",

cmd/client_listeners_delete.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import (
2525
"github.com/spf13/cobra"
2626
)
2727

28-
func clientListenersDeleteCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
28+
func clientListenersDeleteCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2929
clientListenersDeleteCmd := &cobra.Command{
3030
Use: "delete",
3131
Short: "Delete event streams",
3232
Long: "",
3333
RunE: func(cmd *cobra.Command, args []string) error {
34-
client := clientFactory()
34+
client, err := clientFactory()
35+
if err != nil {
36+
return err
37+
}
3538
if eventStreamID == "" {
3639
return fmt.Errorf("eventstream flag not set")
3740
}

cmd/client_listeners_delete_test.go

+16-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828

2929
func TestListenersDeleteByID(t *testing.T) {
3030
mc := apiclientmocks.NewFFTMClient(t)
31-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
31+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
3232
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5"})
3333
mc.On("DeleteListener", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5").Return(nil)
3434
err := cmd.Execute()
@@ -38,7 +38,7 @@ func TestListenersDeleteByID(t *testing.T) {
3838

3939
func TestListenersDeleteByName(t *testing.T) {
4040
mc := apiclientmocks.NewFFTMClient(t)
41-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
41+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
4242
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--name", "foo"})
4343
mc.On("DeleteListenersByName", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "foo").Return(nil)
4444
err := cmd.Execute()
@@ -48,31 +48,31 @@ func TestListenersDeleteByName(t *testing.T) {
4848

4949
func TestListenersDeleteNoEventStream(t *testing.T) {
5050
mc := apiclientmocks.NewFFTMClient(t)
51-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
51+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
5252
cmd.SetArgs([]string{"listeners", "delete"})
5353
err := cmd.Execute()
5454
assert.Regexp(t, "eventstream flag not set", err)
5555
}
5656

5757
func TestListenersDeleteNoID(t *testing.T) {
5858
mc := apiclientmocks.NewFFTMClient(t)
59-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
59+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
6060
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
6161
err := cmd.Execute()
6262
assert.Regexp(t, "listener or name flag must be set", err)
6363
}
6464

6565
func TestListenersDeleteIDandName(t *testing.T) {
6666
mc := apiclientmocks.NewFFTMClient(t)
67-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
67+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
6868
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5", "--name", "foo"})
6969
err := cmd.Execute()
7070
assert.Regexp(t, "listener and name flags cannot be combined", err)
7171
}
7272

7373
func TestListenersDeleteByNameError(t *testing.T) {
7474
mc := apiclientmocks.NewFFTMClient(t)
75-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
75+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
7676
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--name", "foo"})
7777
mc.On("DeleteListenersByName", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "foo").Return(fmt.Errorf("pop"))
7878
err := cmd.Execute()
@@ -82,10 +82,19 @@ func TestListenersDeleteByNameError(t *testing.T) {
8282

8383
func TestListenersDeleteByIDError(t *testing.T) {
8484
mc := apiclientmocks.NewFFTMClient(t)
85-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
85+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
8686
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5"})
8787
mc.On("DeleteListener", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5").Return(fmt.Errorf("pop"))
8888
err := cmd.Execute()
8989
assert.Regexp(t, "pop", err)
9090
mc.AssertExpectations(t)
9191
}
92+
93+
func TestListenersDeleteByIDBadClientConf(t *testing.T) {
94+
mc := apiclientmocks.NewFFTMClient(t)
95+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
96+
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5"})
97+
err := cmd.Execute()
98+
assert.Regexp(t, "pop", err)
99+
mc.AssertExpectations(t)
100+
}

cmd/client_listeners_list.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ import (
2525
"github.com/spf13/cobra"
2626
)
2727

28-
func clientListenersListCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
28+
func clientListenersListCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
2929
clientListenersListCmd := &cobra.Command{
3030
Use: "list",
3131
Short: "List listeners",
3232
Long: "",
3333
RunE: func(cmd *cobra.Command, args []string) error {
34-
client := clientFactory()
34+
client, err := clientFactory()
35+
if err != nil {
36+
return err
37+
}
3538
if eventStreamID == "" {
3639
return fmt.Errorf("eventstream flag not set")
3740
}

cmd/client_listeners_list_test.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929

3030
func TestListenersList(t *testing.T) {
3131
mc := apiclientmocks.NewFFTMClient(t)
32-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
32+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
3333
cmd.SetArgs([]string{"listeners", "list", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
3434
mc.On("GetListeners", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return([]apitypes.Listener{}, nil)
3535
err := cmd.Execute()
@@ -39,18 +39,27 @@ func TestListenersList(t *testing.T) {
3939

4040
func TestListenersListNoEventStream(t *testing.T) {
4141
mc := apiclientmocks.NewFFTMClient(t)
42-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
42+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
4343
cmd.SetArgs([]string{"listeners", "list"})
4444
err := cmd.Execute()
4545
assert.Regexp(t, "eventstream flag not set", err)
4646
}
4747

4848
func TestListenersListError(t *testing.T) {
4949
mc := apiclientmocks.NewFFTMClient(t)
50-
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
50+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
5151
cmd.SetArgs([]string{"listeners", "list", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
5252
mc.On("GetListeners", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return(nil, fmt.Errorf("pop"))
5353
err := cmd.Execute()
5454
assert.Regexp(t, "pop", err)
5555
mc.AssertExpectations(t)
5656
}
57+
58+
func TestListenersListBadClientConf(t *testing.T) {
59+
mc := apiclientmocks.NewFFTMClient(t)
60+
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
61+
cmd.SetArgs([]string{"listeners", "list", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
62+
err := cmd.Execute()
63+
assert.Regexp(t, "pop", err)
64+
mc.AssertExpectations(t)
65+
}

cmd/client_test.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ package cmd
1919
import (
2020
"testing"
2121

22+
"github.com/hyperledger/firefly-common/pkg/config"
23+
"github.com/hyperledger/firefly-common/pkg/fftls"
24+
"github.com/hyperledger/firefly-transaction-manager/internal/apiclient"
2225
"github.com/stretchr/testify/assert"
2326
)
2427

@@ -29,6 +32,17 @@ func TestClientCommand(t *testing.T) {
2932
}
3033

3134
func TestCreateDefaultClient(t *testing.T) {
32-
client := createClient()
35+
client, err := createClient()
3336
assert.NotNil(t, client)
37+
assert.NoError(t, err)
38+
}
39+
40+
func TestCreateClientTLSFail(t *testing.T) {
41+
cfg := config.RootSection("fftm_client")
42+
apiclient.InitConfig(cfg)
43+
tlsConf := cfg.SubSection("tls")
44+
tlsConf.Set(fftls.HTTPConfTLSEnabled, true)
45+
tlsConf.Set(fftls.HTTPConfTLSCAFile, "!!!badness")
46+
_, err := createClient()
47+
assert.Regexp(t, "FF00153", err)
3448
}

0 commit comments

Comments
 (0)