go.temporal.io/server@v1.23.0/common/resourcetest/test_resource.go (about)

     1  // The MIT License
     2  //
     3  // Copyright (c) 2020 Temporal Technologies Inc.  All rights reserved.
     4  //
     5  // Copyright (c) 2020 Uber Technologies, Inc.
     6  //
     7  // Permission is hereby granted, free of charge, to any person obtaining a copy
     8  // of this software and associated documentation files (the "Software"), to deal
     9  // in the Software without restriction, including without limitation the rights
    10  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    11  // copies of the Software, and to permit persons to whom the Software is
    12  // furnished to do so, subject to the following conditions:
    13  //
    14  // The above copyright notice and this permission notice shall be included in
    15  // all copies or substantial portions of the Software.
    16  //
    17  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    18  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    19  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    20  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    21  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    22  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    23  // THE SOFTWARE.
    24  
    25  package resourcetest
    26  
    27  import (
    28  	"net"
    29  
    30  	"github.com/golang/mock/gomock"
    31  	"github.com/uber-go/tally/v4"
    32  
    33  	"go.temporal.io/api/workflowservice/v1"
    34  	"go.temporal.io/api/workflowservicemock/v1"
    35  
    36  	"go.temporal.io/server/api/adminservice/v1"
    37  	"go.temporal.io/server/api/adminservicemock/v1"
    38  	"go.temporal.io/server/api/historyservice/v1"
    39  	"go.temporal.io/server/api/historyservicemock/v1"
    40  	"go.temporal.io/server/api/matchingservice/v1"
    41  	"go.temporal.io/server/api/matchingservicemock/v1"
    42  	"go.temporal.io/server/client"
    43  	"go.temporal.io/server/common/archiver"
    44  	"go.temporal.io/server/common/archiver/provider"
    45  	"go.temporal.io/server/common/clock"
    46  	"go.temporal.io/server/common/cluster"
    47  	"go.temporal.io/server/common/log"
    48  	"go.temporal.io/server/common/membership"
    49  	"go.temporal.io/server/common/metrics"
    50  	"go.temporal.io/server/common/namespace"
    51  	"go.temporal.io/server/common/persistence"
    52  	persistenceClient "go.temporal.io/server/common/persistence/client"
    53  	"go.temporal.io/server/common/persistence/serialization"
    54  	"go.temporal.io/server/common/persistence/visibility/manager"
    55  	esclient "go.temporal.io/server/common/persistence/visibility/store/elasticsearch/client"
    56  	"go.temporal.io/server/common/primitives"
    57  	"go.temporal.io/server/common/sdk"
    58  	"go.temporal.io/server/common/searchattribute"
    59  )
    60  
    61  // TODO: replace with test specific Fx
    62  
    63  type (
    64  	// Test is the test implementation used for testing
    65  	Test struct {
    66  		MetricsScope                   tally.Scope
    67  		ClusterMetadata                *cluster.MockMetadata
    68  		SearchAttributesProvider       *searchattribute.MockProvider
    69  		SearchAttributesManager        *searchattribute.MockManager
    70  		SearchAttributesMapperProvider *searchattribute.MockMapperProvider
    71  
    72  		// other common resources
    73  
    74  		NamespaceCache    *namespace.MockRegistry
    75  		TimeSource        clock.TimeSource
    76  		PayloadSerializer serialization.Serializer
    77  		MetricsHandler    metrics.Handler
    78  		ArchivalMetadata  archiver.MetadataMock
    79  		ArchiverProvider  *provider.MockArchiverProvider
    80  
    81  		// membership infos
    82  
    83  		MembershipMonitor       *membership.MockMonitor
    84  		HostInfoProvider        *membership.MockHostInfoProvider
    85  		FrontendServiceResolver *membership.MockServiceResolver
    86  		MatchingServiceResolver *membership.MockServiceResolver
    87  		HistoryServiceResolver  *membership.MockServiceResolver
    88  		WorkerServiceResolver   *membership.MockServiceResolver
    89  
    90  		// internal services clients
    91  
    92  		SDKClientFactory     *sdk.MockClientFactory
    93  		FrontendClient       *workflowservicemock.MockWorkflowServiceClient
    94  		MatchingClient       *matchingservicemock.MockMatchingServiceClient
    95  		HistoryClient        *historyservicemock.MockHistoryServiceClient
    96  		RemoteAdminClient    *adminservicemock.MockAdminServiceClient
    97  		RemoteFrontendClient *workflowservicemock.MockWorkflowServiceClient
    98  		ClientBean           *client.MockBean
    99  		ClientFactory        *client.MockFactory
   100  		ESClient             *esclient.MockClient
   101  		VisibilityManager    *manager.MockVisibilityManager
   102  
   103  		// persistence clients
   104  
   105  		MetadataMgr               *persistence.MockMetadataManager
   106  		ClusterMetadataMgr        *persistence.MockClusterMetadataManager
   107  		TaskMgr                   *persistence.MockTaskManager
   108  		NamespaceReplicationQueue persistence.NamespaceReplicationQueue
   109  		ShardMgr                  *persistence.MockShardManager
   110  		ExecutionMgr              *persistence.MockExecutionManager
   111  		PersistenceBean           *persistenceClient.MockBean
   112  
   113  		Logger log.Logger
   114  	}
   115  )
   116  
   117  const (
   118  	testHostName = "test_host"
   119  )
   120  
   121  var testHostInfo = membership.NewHostInfoFromAddress(testHostName)
   122  
   123  // NewTest returns a new test resource instance
   124  func NewTest(controller *gomock.Controller, serviceName primitives.ServiceName) *Test {
   125  	logger := log.NewTestLogger()
   126  
   127  	frontendClient := workflowservicemock.NewMockWorkflowServiceClient(controller)
   128  	matchingClient := matchingservicemock.NewMockMatchingServiceClient(controller)
   129  	historyClient := historyservicemock.NewMockHistoryServiceClient(controller)
   130  	remoteFrontendClient := workflowservicemock.NewMockWorkflowServiceClient(controller)
   131  	remoteAdminClient := adminservicemock.NewMockAdminServiceClient(controller)
   132  	clusterMetadataManager := persistence.NewMockClusterMetadataManager(controller)
   133  	clientBean := client.NewMockBean(controller)
   134  	clientBean.EXPECT().GetFrontendClient().Return(frontendClient).AnyTimes()
   135  	clientBean.EXPECT().GetMatchingClient(gomock.Any()).Return(matchingClient, nil).AnyTimes()
   136  	clientBean.EXPECT().GetHistoryClient().Return(historyClient).AnyTimes()
   137  	clientBean.EXPECT().GetRemoteAdminClient(gomock.Any()).Return(remoteAdminClient, nil).AnyTimes()
   138  	clientBean.EXPECT().GetRemoteFrontendClient(gomock.Any()).Return(nil, remoteFrontendClient, nil).AnyTimes()
   139  	clientFactory := client.NewMockFactory(controller)
   140  
   141  	metadataMgr := persistence.NewMockMetadataManager(controller)
   142  	taskMgr := persistence.NewMockTaskManager(controller)
   143  	shardMgr := persistence.NewMockShardManager(controller)
   144  	executionMgr := persistence.NewMockExecutionManager(controller)
   145  	executionMgr.EXPECT().GetHistoryBranchUtil().Return(&persistence.HistoryBranchUtilImpl{}).AnyTimes()
   146  	namespaceReplicationQueue := persistence.NewMockNamespaceReplicationQueue(controller)
   147  	namespaceReplicationQueue.EXPECT().Start().AnyTimes()
   148  	namespaceReplicationQueue.EXPECT().Stop().AnyTimes()
   149  	persistenceBean := persistenceClient.NewMockBean(controller)
   150  	persistenceBean.EXPECT().GetMetadataManager().Return(metadataMgr).AnyTimes()
   151  	persistenceBean.EXPECT().GetTaskManager().Return(taskMgr).AnyTimes()
   152  	persistenceBean.EXPECT().GetShardManager().Return(shardMgr).AnyTimes()
   153  	persistenceBean.EXPECT().GetExecutionManager().Return(executionMgr).AnyTimes()
   154  	persistenceBean.EXPECT().GetNamespaceReplicationQueue().Return(namespaceReplicationQueue).AnyTimes()
   155  	persistenceBean.EXPECT().GetClusterMetadataManager().Return(clusterMetadataManager).AnyTimes()
   156  
   157  	membershipMonitor := membership.NewMockMonitor(controller)
   158  	hostInfoProvider := membership.NewMockHostInfoProvider(controller)
   159  	frontendServiceResolver := membership.NewMockServiceResolver(controller)
   160  	matchingServiceResolver := membership.NewMockServiceResolver(controller)
   161  	historyServiceResolver := membership.NewMockServiceResolver(controller)
   162  	workerServiceResolver := membership.NewMockServiceResolver(controller)
   163  	membershipMonitor.EXPECT().GetResolver(primitives.FrontendService).Return(frontendServiceResolver, nil).AnyTimes()
   164  	membershipMonitor.EXPECT().GetResolver(primitives.InternalFrontendService).Return(nil, membership.ErrUnknownService).AnyTimes()
   165  	membershipMonitor.EXPECT().GetResolver(primitives.MatchingService).Return(matchingServiceResolver, nil).AnyTimes()
   166  	membershipMonitor.EXPECT().GetResolver(primitives.HistoryService).Return(historyServiceResolver, nil).AnyTimes()
   167  	membershipMonitor.EXPECT().GetResolver(primitives.WorkerService).Return(workerServiceResolver, nil).AnyTimes()
   168  	membershipMonitor.EXPECT().WaitUntilInitialized(gomock.Any()).Return(nil).AnyTimes()
   169  
   170  	scope := tally.NewTestScope("test", nil)
   171  	metricsHandler := metrics.NewTallyMetricsHandler(metrics.ClientConfig{}, scope).WithTags(
   172  		metrics.ServiceNameTag(serviceName),
   173  	)
   174  
   175  	return &Test{
   176  		MetricsScope:                   scope,
   177  		ClusterMetadata:                cluster.NewMockMetadata(controller),
   178  		SearchAttributesProvider:       searchattribute.NewMockProvider(controller),
   179  		SearchAttributesManager:        searchattribute.NewMockManager(controller),
   180  		SearchAttributesMapperProvider: searchattribute.NewMockMapperProvider(controller),
   181  
   182  		// other common resources
   183  
   184  		NamespaceCache:    namespace.NewMockRegistry(controller),
   185  		TimeSource:        clock.NewRealTimeSource(),
   186  		PayloadSerializer: serialization.NewSerializer(),
   187  		MetricsHandler:    metricsHandler,
   188  		ArchivalMetadata:  archiver.NewMetadataMock(controller),
   189  		ArchiverProvider:  provider.NewMockArchiverProvider(controller),
   190  
   191  		// membership infos
   192  
   193  		MembershipMonitor:       membershipMonitor,
   194  		HostInfoProvider:        hostInfoProvider,
   195  		FrontendServiceResolver: frontendServiceResolver,
   196  		MatchingServiceResolver: matchingServiceResolver,
   197  		HistoryServiceResolver:  historyServiceResolver,
   198  		WorkerServiceResolver:   workerServiceResolver,
   199  
   200  		// internal services clients
   201  
   202  		SDKClientFactory:     sdk.NewMockClientFactory(controller),
   203  		FrontendClient:       frontendClient,
   204  		MatchingClient:       matchingClient,
   205  		HistoryClient:        historyClient,
   206  		RemoteAdminClient:    remoteAdminClient,
   207  		RemoteFrontendClient: remoteFrontendClient,
   208  		ClientBean:           clientBean,
   209  		ClientFactory:        clientFactory,
   210  		ESClient:             esclient.NewMockClient(controller),
   211  		VisibilityManager:    manager.NewMockVisibilityManager(controller),
   212  
   213  		// persistence clients
   214  
   215  		MetadataMgr:               metadataMgr,
   216  		ClusterMetadataMgr:        clusterMetadataManager,
   217  		TaskMgr:                   taskMgr,
   218  		NamespaceReplicationQueue: namespaceReplicationQueue,
   219  		ShardMgr:                  shardMgr,
   220  		ExecutionMgr:              executionMgr,
   221  		PersistenceBean:           persistenceBean,
   222  
   223  		// logger
   224  
   225  		Logger: logger,
   226  	}
   227  }
   228  
   229  // Start for testing
   230  func (t *Test) Start() {
   231  }
   232  
   233  // Stop for testing
   234  func (t *Test) Stop() {
   235  }
   236  
   237  // static infos
   238  
   239  // GetServiceName for testing
   240  func (t *Test) GetServiceName() string {
   241  	panic("user should implement this method for test")
   242  }
   243  
   244  // GetHostName for testing
   245  func (t *Test) GetHostName() string {
   246  	return testHostInfo.Identity()
   247  }
   248  
   249  // GetHostInfo for testing
   250  func (t *Test) GetHostInfo() membership.HostInfo {
   251  	return testHostInfo
   252  }
   253  
   254  // GetClusterMetadata for testing
   255  func (t *Test) GetClusterMetadata() cluster.Metadata {
   256  	return t.ClusterMetadata
   257  }
   258  
   259  // GetClusterMetadata for testing
   260  func (t *Test) GetClusterMetadataManager() persistence.ClusterMetadataManager {
   261  	return t.ClusterMetadataMgr
   262  }
   263  
   264  // other common resources
   265  
   266  // GetNamespaceRegistry for testing
   267  func (t *Test) GetNamespaceRegistry() namespace.Registry {
   268  	return t.NamespaceCache
   269  }
   270  
   271  // GetTimeSource for testing
   272  func (t *Test) GetTimeSource() clock.TimeSource {
   273  	return t.TimeSource
   274  }
   275  
   276  // GetPayloadSerializer for testing
   277  func (t *Test) GetPayloadSerializer() serialization.Serializer {
   278  	return t.PayloadSerializer
   279  }
   280  
   281  // GetMetricsHandler for testing
   282  func (t *Test) GetMetricsHandler() metrics.Handler {
   283  	return t.MetricsHandler
   284  }
   285  
   286  // GetArchivalMetadata for testing
   287  func (t *Test) GetArchivalMetadata() archiver.ArchivalMetadata {
   288  	return t.ArchivalMetadata
   289  }
   290  
   291  // GetArchiverProvider for testing
   292  func (t *Test) GetArchiverProvider() provider.ArchiverProvider {
   293  	return t.ArchiverProvider
   294  }
   295  
   296  // membership infos
   297  
   298  // GetMembershipMonitor for testing
   299  func (t *Test) GetMembershipMonitor() membership.Monitor {
   300  	return t.MembershipMonitor
   301  }
   302  
   303  // GetHostInfoProvider for testing
   304  func (t *Test) GetHostInfoProvider() membership.HostInfoProvider {
   305  	return t.HostInfoProvider
   306  }
   307  
   308  // GetFrontendServiceResolver for testing
   309  func (t *Test) GetFrontendServiceResolver() membership.ServiceResolver {
   310  	return t.FrontendServiceResolver
   311  }
   312  
   313  // GetMatchingServiceResolver for testing
   314  func (t *Test) GetMatchingServiceResolver() membership.ServiceResolver {
   315  	return t.MatchingServiceResolver
   316  }
   317  
   318  // GetHistoryServiceResolver for testing
   319  func (t *Test) GetHistoryServiceResolver() membership.ServiceResolver {
   320  	return t.HistoryServiceResolver
   321  }
   322  
   323  // GetWorkerServiceResolver for testing
   324  func (t *Test) GetWorkerServiceResolver() membership.ServiceResolver {
   325  	return t.WorkerServiceResolver
   326  }
   327  
   328  // internal services clients
   329  
   330  // GetSDKClientFactory for testing
   331  func (t *Test) GetSDKClientFactory() sdk.ClientFactory {
   332  	return t.SDKClientFactory
   333  }
   334  
   335  // GetFrontendClient for testing
   336  func (t *Test) GetFrontendClient() workflowservice.WorkflowServiceClient {
   337  	return t.FrontendClient
   338  }
   339  
   340  // GetMatchingRawClient for testing
   341  func (t *Test) GetMatchingRawClient() matchingservice.MatchingServiceClient {
   342  	return t.MatchingClient
   343  }
   344  
   345  // GetMatchingClient for testing
   346  func (t *Test) GetMatchingClient() matchingservice.MatchingServiceClient {
   347  	return t.MatchingClient
   348  }
   349  
   350  // GetHistoryRawClient for testing
   351  func (t *Test) GetHistoryRawClient() historyservice.HistoryServiceClient {
   352  	return t.HistoryClient
   353  }
   354  
   355  // GetHistoryClient for testing
   356  func (t *Test) GetHistoryClient() historyservice.HistoryServiceClient {
   357  	return t.HistoryClient
   358  }
   359  
   360  // GetRemoteAdminClient for testing
   361  func (t *Test) GetRemoteAdminClient(
   362  	cluster string,
   363  ) adminservice.AdminServiceClient {
   364  	return t.RemoteAdminClient
   365  }
   366  
   367  // GetRemoteFrontendClient for testing
   368  func (t *Test) GetRemoteFrontendClient(
   369  	cluster string,
   370  ) workflowservice.WorkflowServiceClient {
   371  	return t.RemoteFrontendClient
   372  }
   373  
   374  // GetClientBean for testing
   375  func (t *Test) GetClientBean() client.Bean {
   376  	return t.ClientBean
   377  }
   378  
   379  // GetClientFactory for testing
   380  func (t *Test) GetClientFactory() client.Factory {
   381  	return t.ClientFactory
   382  }
   383  
   384  // GetVisibilityManager for testing
   385  func (t *Test) GetVisibilityManager() manager.VisibilityManager {
   386  	return t.VisibilityManager
   387  }
   388  
   389  // persistence clients
   390  
   391  // GetMetadataManager for testing
   392  func (t *Test) GetMetadataManager() persistence.MetadataManager {
   393  	return t.MetadataMgr
   394  }
   395  
   396  // GetTaskManager for testing
   397  func (t *Test) GetTaskManager() persistence.TaskManager {
   398  	return t.TaskMgr
   399  }
   400  
   401  // GetNamespaceReplicationQueue for testing
   402  func (t *Test) GetNamespaceReplicationQueue() persistence.NamespaceReplicationQueue {
   403  	// user should implement this method for test
   404  	return t.NamespaceReplicationQueue
   405  }
   406  
   407  // GetShardManager for testing
   408  func (t *Test) GetShardManager() persistence.ShardManager {
   409  	return t.ShardMgr
   410  }
   411  
   412  // GetExecutionManager for testing
   413  func (t *Test) GetExecutionManager() persistence.ExecutionManager {
   414  	return t.ExecutionMgr
   415  }
   416  
   417  // GetPersistenceBean for testing
   418  func (t *Test) GetPersistenceBean() persistenceClient.Bean {
   419  	return t.PersistenceBean
   420  }
   421  
   422  // loggers
   423  
   424  // GetLogger for testing
   425  func (t *Test) GetLogger() log.Logger {
   426  	return t.Logger
   427  }
   428  
   429  // GetThrottledLogger for testing
   430  func (t *Test) GetThrottledLogger() log.Logger {
   431  	return t.Logger
   432  }
   433  
   434  // GetGRPCListener for testing
   435  func (t *Test) GetGRPCListener() net.Listener {
   436  	panic("user should implement this method for test")
   437  }
   438  
   439  func (t *Test) GetSearchAttributesProvider() searchattribute.Provider {
   440  	return t.SearchAttributesProvider
   441  }
   442  
   443  func (t *Test) GetSearchAttributesManager() searchattribute.Manager {
   444  	return t.SearchAttributesManager
   445  }
   446  
   447  func (t *Test) GetSearchAttributesMapperProvider() searchattribute.MapperProvider {
   448  	return t.SearchAttributesMapperProvider
   449  }