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 }