Browse Source
Co-authored-by: fuchanghai <changhaifu@apache.org> Co-authored-by: Eric Gao <ericgao.apache@gmail.com> Co-authored-by: Rick Cheng <rickchengx@gmail.com>3.2.2-prepare
John Huang
11 months ago
committed by
GitHub
5 changed files with 284 additions and 17 deletions
@ -0,0 +1,60 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.apache.dolphinscheduler.server.worker.registry; |
||||
|
||||
import static org.mockito.Mockito.times; |
||||
|
||||
import org.apache.dolphinscheduler.registry.api.ConnectionState; |
||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.junit.jupiter.api.extension.ExtendWith; |
||||
import org.mockito.InjectMocks; |
||||
import org.mockito.Mock; |
||||
import org.mockito.Mockito; |
||||
import org.mockito.junit.jupiter.MockitoExtension; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
/** |
||||
* worker registry test |
||||
*/ |
||||
@ExtendWith(MockitoExtension.class) |
||||
public class WorkerConnectionStateListenerTest { |
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(WorkerConnectionStateListenerTest.class); |
||||
@InjectMocks |
||||
private WorkerConnectionStateListener workerConnectionStateListener; |
||||
@Mock |
||||
private WorkerConfig workerConfig; |
||||
@Mock |
||||
private WorkerConnectStrategy workerConnectStrategy; |
||||
|
||||
@Test |
||||
public void testWorkerConnectionStateListener() { |
||||
workerConnectionStateListener.onUpdate(ConnectionState.CONNECTED); |
||||
|
||||
workerConnectionStateListener.onUpdate(ConnectionState.RECONNECTED); |
||||
Mockito.verify(workerConnectStrategy, times(1)).reconnect(); |
||||
|
||||
workerConnectionStateListener.onUpdate(ConnectionState.SUSPENDED); |
||||
|
||||
workerConnectionStateListener.onUpdate(ConnectionState.DISCONNECTED); |
||||
Mockito.verify(workerConnectStrategy, times(1)).disconnect(); |
||||
} |
||||
} |
@ -0,0 +1,187 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.apache.dolphinscheduler.server.worker.registry; |
||||
|
||||
import static org.mockito.ArgumentMatchers.any; |
||||
import static org.mockito.ArgumentMatchers.anyString; |
||||
import static org.mockito.BDDMockito.given; |
||||
import static org.mockito.Mockito.doNothing; |
||||
|
||||
import org.apache.dolphinscheduler.common.IStoppable; |
||||
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleException; |
||||
import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager; |
||||
import org.apache.dolphinscheduler.registry.api.ConnectStrategyProperties; |
||||
import org.apache.dolphinscheduler.registry.api.RegistryClient; |
||||
import org.apache.dolphinscheduler.registry.api.RegistryException; |
||||
import org.apache.dolphinscheduler.registry.api.StrategyType; |
||||
import org.apache.dolphinscheduler.server.worker.config.WorkerConfig; |
||||
import org.apache.dolphinscheduler.server.worker.message.MessageRetryRunner; |
||||
import org.apache.dolphinscheduler.server.worker.rpc.WorkerRpcServer; |
||||
import org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecutorThreadPool; |
||||
|
||||
import java.time.Duration; |
||||
|
||||
import org.junit.jupiter.api.Assertions; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.junit.jupiter.api.extension.ExtendWith; |
||||
import org.mockito.Mock; |
||||
import org.mockito.MockedStatic; |
||||
import org.mockito.Mockito; |
||||
import org.mockito.junit.jupiter.MockitoExtension; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
/** |
||||
* worker registry test |
||||
*/ |
||||
@ExtendWith(MockitoExtension.class) |
||||
public class WorkerStrategyTest { |
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(WorkerStrategyTest.class); |
||||
@Mock |
||||
private RegistryClient registryClient; |
||||
@Mock |
||||
private IStoppable stoppable; |
||||
@Mock |
||||
private WorkerConfig workerConfig; |
||||
@Mock |
||||
private WorkerRpcServer workerRpcServer; |
||||
@Mock |
||||
private MessageRetryRunner messageRetryRunner; |
||||
@Mock |
||||
private WorkerTaskExecutorThreadPool workerManagerThread; |
||||
@Mock |
||||
private ConnectStrategyProperties connectStrategyProperties; |
||||
|
||||
@Test |
||||
public void testWorkerStopStrategy() { |
||||
given(registryClient.getStoppable()) |
||||
.willReturn(stoppable); |
||||
WorkerStopStrategy workerStopStrategy = new WorkerStopStrategy(); |
||||
workerStopStrategy.registryClient = registryClient; |
||||
workerStopStrategy.reconnect(); |
||||
workerStopStrategy.disconnect(); |
||||
Assertions.assertEquals(workerStopStrategy.getStrategyType(), StrategyType.STOP); |
||||
} |
||||
|
||||
@Test |
||||
public void testWorkerWaitingStrategyreconnect() { |
||||
WorkerWaitingStrategy workerWaitingStrategy = new WorkerWaitingStrategy( |
||||
workerConfig, |
||||
registryClient, |
||||
messageRetryRunner, |
||||
workerManagerThread); |
||||
Assertions.assertEquals(workerWaitingStrategy.getStrategyType(), StrategyType.WAITING); |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.isRunning()) |
||||
.thenReturn(true); |
||||
workerWaitingStrategy.reconnect(); |
||||
|
||||
} |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
doNothing().when(stoppable).stop(anyString()); |
||||
given(registryClient.getStoppable()) |
||||
.willReturn(stoppable); |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.recoverFromWaiting()) |
||||
.thenThrow(new ServerLifeCycleException("")); |
||||
workerWaitingStrategy.reconnect(); |
||||
} |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.recoverFromWaiting()) |
||||
.thenAnswer(invocation -> null); |
||||
workerWaitingStrategy.reconnect(); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void testWorkerWaitingStrategydisconnect() { |
||||
WorkerWaitingStrategy workerWaitingStrategy = new WorkerWaitingStrategy( |
||||
workerConfig, |
||||
registryClient, |
||||
messageRetryRunner, |
||||
workerManagerThread); |
||||
Assertions.assertEquals(workerWaitingStrategy.getStrategyType(), StrategyType.WAITING); |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
doNothing().when(stoppable).stop(anyString()); |
||||
given(registryClient.getStoppable()) |
||||
.willReturn(stoppable); |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.toWaiting()) |
||||
.thenThrow(new ServerLifeCycleException("")); |
||||
workerWaitingStrategy.disconnect(); |
||||
} |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
given(connectStrategyProperties.getMaxWaitingTime()).willReturn(Duration.ofSeconds(1)); |
||||
given(workerConfig.getRegistryDisconnectStrategy()).willReturn(connectStrategyProperties); |
||||
Mockito.reset(registryClient); |
||||
doNothing().when(registryClient).connectUntilTimeout(any()); |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.toWaiting()) |
||||
.thenAnswer(invocation -> null); |
||||
workerWaitingStrategy.disconnect(); |
||||
} |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
given(connectStrategyProperties.getMaxWaitingTime()).willReturn(Duration.ofSeconds(1)); |
||||
given(workerConfig.getRegistryDisconnectStrategy()).willReturn(connectStrategyProperties); |
||||
Mockito.reset(registryClient); |
||||
doNothing().when(stoppable).stop(anyString()); |
||||
given(registryClient.getStoppable()) |
||||
.willReturn(stoppable); |
||||
Mockito.doThrow(new RegistryException("TEST")).when(registryClient).connectUntilTimeout(any()); |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.toWaiting()) |
||||
.thenAnswer(invocation -> null); |
||||
workerWaitingStrategy.disconnect(); |
||||
} |
||||
|
||||
try ( |
||||
MockedStatic<ServerLifeCycleManager> serverLifeCycleManagerMockedStatic = |
||||
Mockito.mockStatic(ServerLifeCycleManager.class)) { |
||||
Mockito.reset(workerConfig); |
||||
given(workerConfig.getRegistryDisconnectStrategy()).willThrow(new NullPointerException("")); |
||||
doNothing().when(stoppable).stop(anyString()); |
||||
given(registryClient.getStoppable()) |
||||
.willReturn(stoppable); |
||||
serverLifeCycleManagerMockedStatic |
||||
.when(() -> ServerLifeCycleManager.toWaiting()) |
||||
.thenAnswer(invocation -> null); |
||||
workerWaitingStrategy.disconnect(); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue