Skip to content

Commit

Permalink
Merge pull request #79 from hyperledger/update-ffsigners
Browse files Browse the repository at this point in the history
Update firefly-common
  • Loading branch information
peterbroadhurst authored Apr 27, 2023
2 parents 710fe3a + c3f9e12 commit 79765d5
Show file tree
Hide file tree
Showing 28 changed files with 281 additions and 96 deletions.
4 changes: 2 additions & 2 deletions cmd/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func ClientCommand() *cobra.Command {
return buildClientCommand(createClient)
}

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

func createClient() apiclient.FFTMClient {
func createClient() (apiclient.FFTMClient, error) {
cfg := config.RootSection("fftm_client")
apiclient.InitConfig(cfg)
if url != "" {
Expand Down
2 changes: 1 addition & 1 deletion cmd/client_eventstreams.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (

var eventStreamID string

func clientEventStreamsCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientEventStreamsCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientEventStreamsCmd := &cobra.Command{
Use: "eventstreams <subcommand>",
Short: "Make API requests to an blockchain connector instance",
Expand Down
7 changes: 5 additions & 2 deletions cmd/client_eventstreams_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@ import (
"github.com/spf13/cobra"
)

func clientEventStreamsDeleteCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientEventStreamsDeleteCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientEventStreamsDeleteCmd := &cobra.Command{
Use: "delete",
Short: "Delete event streams",
Long: "",
RunE: func(cmd *cobra.Command, args []string) error {
client := clientFactory()
client, err := clientFactory()
if err != nil {
return err
}
if eventStreamID == "" && nameRegex == "" {
return fmt.Errorf("eventstream or name flag must be set")
}
Expand Down
30 changes: 24 additions & 6 deletions cmd/client_eventstreams_delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,43 +28,61 @@ import (

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

func TestEventStreamsDeleteByIDBadClientConfig(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}

func TestEventStreamsDeleteByName(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"eventstreams", "delete", "--name", "foo"})
mc.On("DeleteEventStreamsByName", mock.Anything, "foo").Return(nil)
err := cmd.Execute()
assert.NoError(t, err)
mc.AssertExpectations(t)
}

func TestEventStreamsDeleteByNameBadClientConfig(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
cmd.SetArgs([]string{"eventstreams", "delete", "--name", "foo"})
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}

func TestEventStreamsDeleteNoID(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"eventstreams", "delete"})
err := cmd.Execute()
assert.Regexp(t, "eventstream or name flag must be set", err)
}

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

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

func TestEventStreamsDeleteByIDError(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"eventstreams", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
mc.On("DeleteEventStream", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return(fmt.Errorf("pop"))
err := cmd.Execute()
Expand Down
7 changes: 5 additions & 2 deletions cmd/client_eventstreams_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@ import (
"github.com/spf13/cobra"
)

func clientEventStreamsListCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientEventStreamsListCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientEventStreamsListCmd := &cobra.Command{
Use: "list",
Short: "List event streams",
Long: "",
RunE: func(cmd *cobra.Command, args []string) error {
client := clientFactory()
client, err := clientFactory()
if err != nil {
return err
}
eventStreams, err := client.GetEventStreams(context.Background())
if err != nil {
return err
Expand Down
13 changes: 11 additions & 2 deletions cmd/client_eventstreams_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (

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

func TestEventStreamsListError(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"eventstreams", "list"})
mc.On("GetEventStreams", mock.Anything).Return(nil, fmt.Errorf("pop"))
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}

func TestEventStreamsListBadClientConfig(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
cmd.SetArgs([]string{"eventstreams", "list"})
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}
2 changes: 1 addition & 1 deletion cmd/client_listeners.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (

var listenerID string

func clientListenersCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientListenersCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientListenersCmd := &cobra.Command{
Use: "listeners <subcommand>",
Short: "Make API requests to an blockchain connector instance",
Expand Down
7 changes: 5 additions & 2 deletions cmd/client_listeners_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@ import (
"github.com/spf13/cobra"
)

func clientListenersDeleteCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientListenersDeleteCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientListenersDeleteCmd := &cobra.Command{
Use: "delete",
Short: "Delete event streams",
Long: "",
RunE: func(cmd *cobra.Command, args []string) error {
client := clientFactory()
client, err := clientFactory()
if err != nil {
return err
}
if eventStreamID == "" {
return fmt.Errorf("eventstream flag not set")
}
Expand Down
23 changes: 16 additions & 7 deletions cmd/client_listeners_delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (

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

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

func TestListenersDeleteNoEventStream(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"listeners", "delete"})
err := cmd.Execute()
assert.Regexp(t, "eventstream flag not set", err)
}

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

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

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

func TestListenersDeleteByIDError(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5"})
mc.On("DeleteListener", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5").Return(fmt.Errorf("pop"))
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}

func TestListenersDeleteByIDBadClientConf(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
cmd.SetArgs([]string{"listeners", "delete", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7", "--listener", "7db29758-2a5a-4cc5-91ec-72ade16e0dc5"})
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}
7 changes: 5 additions & 2 deletions cmd/client_listeners_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@ import (
"github.com/spf13/cobra"
)

func clientListenersListCommand(clientFactory func() apiclient.FFTMClient) *cobra.Command {
func clientListenersListCommand(clientFactory func() (apiclient.FFTMClient, error)) *cobra.Command {
clientListenersListCmd := &cobra.Command{
Use: "list",
Short: "List listeners",
Long: "",
RunE: func(cmd *cobra.Command, args []string) error {
client := clientFactory()
client, err := clientFactory()
if err != nil {
return err
}
if eventStreamID == "" {
return fmt.Errorf("eventstream flag not set")
}
Expand Down
15 changes: 12 additions & 3 deletions cmd/client_listeners_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (

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

func TestListenersListNoEventStream(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"listeners", "list"})
err := cmd.Execute()
assert.Regexp(t, "eventstream flag not set", err)
}

func TestListenersListError(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() apiclient.FFTMClient { return mc })
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, nil })
cmd.SetArgs([]string{"listeners", "list", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
mc.On("GetListeners", mock.Anything, "f9506df2-5473-4fd4-9cfb-f835656eaaa7").Return(nil, fmt.Errorf("pop"))
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}

func TestListenersListBadClientConf(t *testing.T) {
mc := apiclientmocks.NewFFTMClient(t)
cmd := buildClientCommand(func() (apiclient.FFTMClient, error) { return mc, fmt.Errorf("pop") })
cmd.SetArgs([]string{"listeners", "list", "--eventstream", "f9506df2-5473-4fd4-9cfb-f835656eaaa7"})
err := cmd.Execute()
assert.Regexp(t, "pop", err)
mc.AssertExpectations(t)
}
16 changes: 15 additions & 1 deletion cmd/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ package cmd
import (
"testing"

"github.com/hyperledger/firefly-common/pkg/config"
"github.com/hyperledger/firefly-common/pkg/fftls"
"github.com/hyperledger/firefly-transaction-manager/internal/apiclient"
"github.com/stretchr/testify/assert"
)

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

func TestCreateDefaultClient(t *testing.T) {
client := createClient()
client, err := createClient()
assert.NotNil(t, client)
assert.NoError(t, err)
}

func TestCreateClientTLSFail(t *testing.T) {
cfg := config.RootSection("fftm_client")
apiclient.InitConfig(cfg)
tlsConf := cfg.SubSection("tls")
tlsConf.Set(fftls.HTTPConfTLSEnabled, true)
tlsConf.Set(fftls.HTTPConfTLSCAFile, "!!!badness")
_, err := createClient()
assert.Regexp(t, "FF00153", err)
}
Loading

0 comments on commit 79765d5

Please sign in to comment.