github.com/hyperledger/aries-framework-go@v0.3.2/pkg/client/mediator/client_test.go (about) 1 /* 2 Copyright SecureKey Technologies Inc. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package mediator 8 9 import ( 10 "errors" 11 "fmt" 12 "testing" 13 "time" 14 15 "github.com/stretchr/testify/require" 16 17 "github.com/hyperledger/aries-framework-go/pkg/didcomm/common/service" 18 "github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/mediator" 19 mockroute "github.com/hyperledger/aries-framework-go/pkg/mock/didcomm/protocol/mediator" 20 mockprovider "github.com/hyperledger/aries-framework-go/pkg/mock/provider" 21 ) 22 23 // Ensure Client can emit events. 24 var _ service.Event = (*Client)(nil) 25 26 func TestNew(t *testing.T) { 27 t.Run("test new client", func(t *testing.T) { 28 svc, err := New(&mockprovider.Provider{ 29 ServiceValue: &mockroute.MockMediatorSvc{}, 30 }, 31 ) 32 require.NoError(t, err) 33 require.NotNil(t, svc) 34 }) 35 36 t.Run("test error from get service from context", func(t *testing.T) { 37 _, err := New(&mockprovider.Provider{ServiceErr: fmt.Errorf("service error")}) 38 require.Error(t, err) 39 require.Contains(t, err.Error(), "service error") 40 }) 41 42 t.Run("test error from cast service", func(t *testing.T) { 43 _, err := New(&mockprovider.Provider{ServiceValue: nil}) 44 require.Error(t, err) 45 require.Contains(t, err.Error(), "cast service to route service failed") 46 }) 47 48 t.Run("test timeout is applied to options", func(t *testing.T) { 49 timeout := 1 * time.Second 50 51 option := WithTimeout(timeout) 52 opts := &mediator.ClientOptions{} 53 option(opts) 54 55 require.Equal(t, timeout, opts.Timeout) 56 }) 57 } 58 59 func TestRegister(t *testing.T) { 60 t.Run("test register - success", func(t *testing.T) { 61 c, err := New(&mockprovider.Provider{ 62 ServiceValue: &mockroute.MockMediatorSvc{RegisterFunc: func(connectionID string, options ...mediator.ClientOption) error { // nolint: lll 63 return nil 64 }}, 65 }) 66 require.NoError(t, err) 67 68 err = c.Register("conn") 69 require.NoError(t, err) 70 }) 71 72 t.Run("test register - error", func(t *testing.T) { 73 c, err := New(&mockprovider.Provider{ 74 ServiceValue: &mockroute.MockMediatorSvc{RegisterFunc: func(connectionID string, options ...mediator.ClientOption) error { // nolint: lll 75 return errors.New("register error") 76 }}, 77 }) 78 require.NoError(t, err) 79 80 err = c.Register("conn") 81 require.Error(t, err) 82 require.Contains(t, err.Error(), "router registration") 83 }) 84 } 85 86 func TestUnregister(t *testing.T) { 87 t.Run("test unregister - success", func(t *testing.T) { 88 c, err := New(&mockprovider.Provider{ 89 ServiceValue: &mockroute.MockMediatorSvc{}, 90 }) 91 require.NoError(t, err) 92 93 err = c.Unregister("conn") 94 require.NoError(t, err) 95 }) 96 97 t.Run("test unregister - error", func(t *testing.T) { 98 c, err := New(&mockprovider.Provider{ 99 ServiceValue: &mockroute.MockMediatorSvc{ 100 UnregisterErr: errors.New("unregister error"), 101 }, 102 }) 103 require.NoError(t, err) 104 105 err = c.Unregister("conn") 106 require.Error(t, err) 107 require.Contains(t, err.Error(), "router unregister") 108 }) 109 } 110 111 func TestGetConnection(t *testing.T) { 112 t.Run("test get connection - success", func(t *testing.T) { 113 routerConnectionID := "conn-abc" 114 115 c, err := New(&mockprovider.Provider{ 116 ServiceValue: &mockroute.MockMediatorSvc{ 117 Connections: []string{routerConnectionID}, 118 }, 119 }) 120 require.NoError(t, err) 121 122 conns, err := c.GetConnections() 123 require.Equal(t, 1, len(conns)) 124 require.NoError(t, err) 125 require.Equal(t, routerConnectionID, conns[0]) 126 }) 127 128 t.Run("test get connection - error", func(t *testing.T) { 129 c, err := New(&mockprovider.Provider{ 130 ServiceValue: &mockroute.MockMediatorSvc{ 131 GetConnectionsErr: errors.New("get connections error"), 132 }, 133 }) 134 require.NoError(t, err) 135 136 conns, err := c.GetConnections() 137 require.Error(t, err) 138 require.Contains(t, err.Error(), "get router connections") 139 require.Empty(t, conns) 140 }) 141 } 142 143 func TestClient_GetConfig(t *testing.T) { 144 t.Run("returns configuration", func(t *testing.T) { 145 endpoint := "http://example.com" 146 keys := []string{"key1", "key2"} 147 c, err := New(&mockprovider.Provider{ 148 ServiceValue: &mockroute.MockMediatorSvc{ 149 RouterEndpoint: endpoint, 150 RoutingKeys: keys, 151 }, 152 }) 153 require.NoError(t, err) 154 result, err := c.GetConfig("conn") 155 require.NoError(t, err) 156 require.NotNil(t, result) 157 require.Equal(t, endpoint, result.Endpoint()) 158 require.Equal(t, keys, result.Keys()) 159 }) 160 t.Run("wraps config error", func(t *testing.T) { 161 expected := errors.New("test") 162 c, err := New(&mockprovider.Provider{ 163 ServiceValue: &mockroute.MockMediatorSvc{ 164 ConfigErr: expected, 165 }, 166 }) 167 require.NoError(t, err) 168 _, err = c.GetConfig("conn") 169 require.Error(t, err) 170 require.True(t, errors.Is(err, expected)) 171 }) 172 }