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  }