/*
* Copyright 2014-2016 CyberVision, Inc.
*
* Licensed 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.kaaproject.kaa.client.channel;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.kaaproject.kaa.client.bootstrap.BootstrapManager;
import org.kaaproject.kaa.client.channel.connectivity.ConnectivityChecker;
import org.kaaproject.kaa.client.channel.failover.DefaultFailoverManager;
import org.kaaproject.kaa.client.channel.failover.FailoverManager;
import org.kaaproject.kaa.client.channel.failover.FailoverStatus;
import org.kaaproject.kaa.client.channel.failover.strategies.DefaultFailoverStrategy;
import org.kaaproject.kaa.client.channel.failover.strategies.FailoverStrategy;
import org.kaaproject.kaa.client.channel.impl.ChannelRuntimeException;
import org.kaaproject.kaa.client.channel.impl.DefaultChannelManager;
import org.kaaproject.kaa.client.context.ExecutorContext;
import org.kaaproject.kaa.common.TransportType;
import org.kaaproject.kaa.common.endpoint.security.KeyUtil;
import org.mockito.Mockito;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class DefaultChannelManagerTest {
private static final ExecutorContext CONTEXT = Mockito.mock(ExecutorContext.class);
private static final Map<TransportType, ChannelDirection> SUPPORTED_TYPES = new HashMap<TransportType, ChannelDirection>();
static {
SUPPORTED_TYPES.put(TransportType.PROFILE, ChannelDirection.BIDIRECTIONAL);
SUPPORTED_TYPES.put(TransportType.CONFIGURATION, ChannelDirection.UP);
SUPPORTED_TYPES.put(TransportType.NOTIFICATION, ChannelDirection.BIDIRECTIONAL);
SUPPORTED_TYPES.put(TransportType.USER, ChannelDirection.BIDIRECTIONAL);
SUPPORTED_TYPES.put(TransportType.EVENT, ChannelDirection.DOWN);
Mockito.when(CONTEXT.getScheduledExecutor()).thenReturn(Executors.newScheduledThreadPool(1));
}
@Test(expected = ChannelRuntimeException.class)
public void testNullBootstrapServer() {
new DefaultChannelManager(Mockito.mock(BootstrapManager.class), null, null, null);
}
@Test(expected = ChannelRuntimeException.class)
public void testEmptyBootstrapServer() {
new DefaultChannelManager(Mockito.mock(BootstrapManager.class), new HashMap<TransportProtocolId, List<TransportConnectionInfo>>(), null, null);
}
@Test(expected = ChannelRuntimeException.class)
public void testEmptyBootstrapManager() {
new DefaultChannelManager(null, null, null, null);
}
@Test
public void testAddHttpLpChannel() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = new HashMap<>();
bootststrapServers.put(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, Collections.singletonList(IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic())));
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel.getServerType()).thenReturn(ServerType.OPERATIONS);
Mockito.when(channel.getId()).thenReturn("mock_channel");
KaaInternalChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
FailoverManager failoverManager = Mockito.spy(new DefaultFailoverManager(channelManager, CONTEXT));
channelManager.setFailoverManager(failoverManager);
channelManager.addChannel(channel);
channelManager.addChannel(channel);
TransportConnectionInfo server = IpTransportInfoTest.createTestServerInfo(
ServerType.OPERATIONS, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9999, KeyUtil.generateKeyPair().getPublic());
channelManager.onTransportConnectionInfoUpdated(server);
Mockito.verify(failoverManager, Mockito.times(1)).onServerChanged(Mockito.any(TransportConnectionInfo.class));
// assertEquals(channel, channelManager.getChannelByTransportType(TransportType.PROFILE));
assertEquals(channel, channelManager.getChannel("mock_channel"));
assertEquals(channel, channelManager.getChannels().get(0));
channelManager.removeChannel(channel);
// assertNull(channelManager.getChannelByTransportType(TransportType.PROFILE));
assertNull(channelManager.getChannel("mock_channel"));
assertTrue(channelManager.getChannels().isEmpty());
channelManager.addChannel(channel);
Mockito.verify(failoverManager, Mockito.times(2)).onServerChanged(Mockito.any(TransportConnectionInfo.class));
Mockito.verify(channel, Mockito.times(2)).setServer(server);
channelManager.clearChannelList();
assertTrue(channelManager.getChannels().isEmpty());
}
@Test
public void testAddBootstrapChannel() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = new HashMap<>();
TransportConnectionInfo server = IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic());
bootststrapServers.put(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, Collections.singletonList(server));
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel.getServerType()).thenReturn(ServerType.BOOTSTRAP);
Mockito.when(channel.getId()).thenReturn("mock_channel");
KaaChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
FailoverManager failoverManager = Mockito.spy(new DefaultFailoverManager(channelManager, CONTEXT));
channelManager.setFailoverManager(failoverManager);
channelManager.addChannel(channel);
Mockito.verify(failoverManager, Mockito.times(1)).onServerChanged(Mockito.any(TransportConnectionInfo.class));
// assertEquals(channel, channelManager.getChannelByTransportType(TransportType.PROFILE));
assertEquals(channel, channelManager.getChannel("mock_channel"));
assertEquals(channel, channelManager.getChannels().get(0));
channelManager.removeChannel(channel);
// assertNull(channelManager.getChannelByTransportType(TransportType.PROFILE));
assertNull(channelManager.getChannel("mock_channel"));
assertTrue(channelManager.getChannels().isEmpty());
channelManager.addChannel(channel);
Mockito.verify(channel, Mockito.times(2)).setServer(server);
}
@Test
public void testOperationServerFailed() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel.getId()).thenReturn("mock_channel");
KaaInternalChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
channelManager.addChannel(channel);
TransportConnectionInfo opServer = IpTransportInfoTest.createTestServerInfo(
ServerType.OPERATIONS, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9999, KeyUtil.generateKeyPair().getPublic());
channelManager.onTransportConnectionInfoUpdated(opServer);
channelManager.onServerFailed(opServer, FailoverStatus.NO_CONNECTIVITY);
Mockito.verify(bootstrapManager, Mockito.times(1))
.useNextOperationsServer(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, FailoverStatus.NO_CONNECTIVITY);
}
@Test
public void testBootstrapServerFailed() throws NoSuchAlgorithmException, InvalidKeySpecException {
final Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = new HashMap<>();
bootststrapServers.put(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, Arrays.asList(
IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic()),
IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost2", 9889, KeyUtil.generateKeyPair().getPublic())));
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
final KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel.getServerType()).thenReturn(ServerType.BOOTSTRAP);
Mockito.when(channel.getId()).thenReturn("mock_channel");
ExecutorContext context = Mockito.mock(ExecutorContext.class);
Mockito.when(context.getScheduledExecutor()).thenReturn(Executors.newScheduledThreadPool(1));
KaaChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, context, null);
FailoverStrategy failoverStrategy = new DefaultFailoverStrategy(1, 1, 1, TimeUnit.MILLISECONDS);
FailoverManager failoverManager = Mockito.spy(new DefaultFailoverManager(channelManager, CONTEXT, failoverStrategy, 1, TimeUnit.MILLISECONDS));
channelManager.setFailoverManager(failoverManager);
channelManager.addChannel(channel);
Mockito.verify(failoverManager, Mockito.times(1)).onServerChanged(Mockito.any(TransportConnectionInfo.class));
channelManager.onServerFailed(bootststrapServers.get(TransportProtocolIdConstants.HTTP_TRANSPORT_ID).get(0),
FailoverStatus.CURRENT_BOOTSTRAP_SERVER_NA);
new Thread(new Runnable() {
@Override
public void run() {
Mockito.verify(channel, Mockito.timeout(100).times(1)).setServer(bootststrapServers.get(TransportProtocolIdConstants.HTTP_TRANSPORT_ID).get(1));
}
});
Mockito.verify(failoverManager, Mockito.times(1)).onFailover(FailoverStatus.CURRENT_BOOTSTRAP_SERVER_NA);
}
@Test
public void testSingleBootstrapServerFailed() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = new HashMap<>();
bootststrapServers.put(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, Arrays.asList(
IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic())));
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel.getServerType()).thenReturn(ServerType.BOOTSTRAP);
Mockito.when(channel.getId()).thenReturn("mock_channel");
KaaChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, CONTEXT, null);
FailoverManager failoverManager = Mockito.spy(new DefaultFailoverManager(channelManager, CONTEXT));
channelManager.setFailoverManager(failoverManager);
channelManager.addChannel(channel);
Mockito.verify(failoverManager, Mockito.times(1)).onServerChanged(Mockito.any(TransportConnectionInfo.class));
channelManager.onServerFailed(bootststrapServers.get(TransportProtocolIdConstants.HTTP_TRANSPORT_ID).get(0),
FailoverStatus.CURRENT_BOOTSTRAP_SERVER_NA);
}
@Test
public void testRemoveHttpLpChannel() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
Map<TransportType, ChannelDirection> typesForChannel2 = new HashMap<>(SUPPORTED_TYPES);
typesForChannel2.remove(TransportType.USER);
KaaDataChannel channel1 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel1.getSupportedTransportTypes()).thenReturn(typesForChannel2);
Mockito.when(channel1.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel1.getServerType()).thenReturn(ServerType.OPERATIONS);
Mockito.when(channel1.getId()).thenReturn("mock_channel");
KaaDataChannel channel2 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel2.getSupportedTransportTypes()).thenReturn(SUPPORTED_TYPES);
Mockito.when(channel2.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.HTTP_TRANSPORT_ID);
Mockito.when(channel2.getServerType()).thenReturn(ServerType.OPERATIONS);
Mockito.when(channel2.getId()).thenReturn("mock_channel2");
KaaDataChannel channel3 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel3.getSupportedTransportTypes()).thenReturn(typesForChannel2);
Mockito.when(channel3.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel3.getServerType()).thenReturn(ServerType.OPERATIONS);
Mockito.when(channel3.getId()).thenReturn("mock_tcp_channel3");
KaaInternalChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
FailoverManager failoverManager = Mockito.spy(new DefaultFailoverManager(channelManager, CONTEXT));
channelManager.setFailoverManager(failoverManager);
channelManager.addChannel(channel1);
channelManager.addChannel(channel2);
TransportConnectionInfo opServer = IpTransportInfoTest.createTestServerInfo(
ServerType.OPERATIONS, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9999, KeyUtil.generateKeyPair().getPublic());
channelManager.onTransportConnectionInfoUpdated(opServer);
TransportConnectionInfo opServer2 = IpTransportInfoTest.createTestServerInfo(
ServerType.OPERATIONS, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic());
channelManager.onTransportConnectionInfoUpdated(opServer2);
Mockito.verify(channel1, Mockito.times(1)).setServer(opServer);
Mockito.verify(channel2, Mockito.times(1)).setServer(opServer2);
// assertEquals(channel2, channelManager.getChannelByTransportType(TransportType.PROFILE));
channelManager.removeChannel(channel2);
TransportConnectionInfo opServer3 = IpTransportInfoTest.createTestServerInfo(
ServerType.OPERATIONS, TransportProtocolIdConstants.TCP_TRANSPORT_ID, "localhost", 9009, KeyUtil.generateKeyPair().getPublic());
channelManager.addChannel(channel3);
channelManager.onTransportConnectionInfoUpdated(opServer3);
Mockito.verify(channel3, Mockito.times(1)).setServer(opServer3);
// assertEquals(channel3, channelManager.getChannelByTransportType(TransportType.PROFILE));
// assertNull(channelManager.getChannelByTransportType(TransportType.USER));
}
@Test
public void testConnectivityChecker() throws NoSuchAlgorithmException, InvalidKeySpecException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
TransportProtocolId type = TransportProtocolIdConstants.TCP_TRANSPORT_ID;
KaaDataChannel channel1 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel1.getTransportProtocolId()).thenReturn(type);
Mockito.when(channel1.getId()).thenReturn("Channel1");
KaaDataChannel channel2 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel2.getTransportProtocolId()).thenReturn(type);
Mockito.when(channel2.getId()).thenReturn("Channel2");
channelManager.addChannel(channel1);
channelManager.addChannel(channel2);
ConnectivityChecker checker = Mockito.mock(ConnectivityChecker.class);
channelManager.setConnectivityChecker(checker);
Mockito.verify(channel1, Mockito.times(1)).setConnectivityChecker(checker);
Mockito.verify(channel2, Mockito.times(1)).setConnectivityChecker(checker);
KaaDataChannel channel3 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel3.getTransportProtocolId()).thenReturn(type);
Mockito.when(channel3.getId()).thenReturn("Channel3");
channelManager.addChannel(channel3);
Mockito.verify(channel3, Mockito.times(1)).setConnectivityChecker(checker);
}
@Test
public void testUpdateForSpecifiedTransport() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
types.put(TransportType.LOGGING, ChannelDirection.UP);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
KaaDataChannel channel2 = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel2.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel2.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel2.getId()).thenReturn("channel2");
channelManager.addChannel(channel2);
// assertEquals(channel2, channelManager.getChannelByTransportType(TransportType.LOGGING));
// assertEquals(channel2, channelManager.getChannelByTransportType(TransportType.CONFIGURATION));
channelManager.setChannel(TransportType.LOGGING, channel);
channelManager.setChannel(TransportType.LOGGING, null);
// assertEquals(channel, channelManager.getChannelByTransportType(TransportType.LOGGING));
// assertEquals(channel2, channelManager.getChannelByTransportType(TransportType.CONFIGURATION));
channelManager.removeChannel(channel2.getId());
// assertEquals(channel, channelManager.getChannelByTransportType(TransportType.CONFIGURATION));
}
@Test(expected = KaaInvalidChannelException.class)
public void testNegativeUpdateForSpecifiedTransport() throws NoSuchAlgorithmException, InvalidKeySpecException,
KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.DOWN);
types.put(TransportType.LOGGING, ChannelDirection.UP);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
channelManager.setChannel(TransportType.CONFIGURATION, channel);
}
@Test
public void testShutdown() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
types.put(TransportType.LOGGING, ChannelDirection.UP);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
channelManager.addChannel(channel);
channelManager.shutdown();
channelManager.onServerFailed(null, FailoverStatus.BOOTSTRAP_SERVERS_NA);
channelManager.onTransportConnectionInfoUpdated(null);
channelManager.addChannel(null);
channelManager.setChannel(null, null);
channelManager.setConnectivityChecker(null);
Mockito.verify(channel, Mockito.times(1)).shutdown();
}
@Test
public void testPauseAfterAdd() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
channelManager.addChannel(channel);
channelManager.pause();
channelManager.pause();
Mockito.verify(channel, Mockito.times(1)).pause();
}
@Test
public void testPauseBeforeAdd() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
channelManager.pause();
channelManager.addChannel(channel);
Mockito.verify(channel, Mockito.times(1)).pause();
}
@Test
public void testPauseBeforeSet() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
channelManager.pause();
channelManager.setChannel(TransportType.CONFIGURATION, channel);
Mockito.verify(channel, Mockito.times(1)).pause();
}
@Test
public void testResume() throws NoSuchAlgorithmException, InvalidKeySpecException, KaaInvalidChannelException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = getDefaultBootstrapServers();
BootstrapManager bootstrapManager = Mockito.mock(BootstrapManager.class);
DefaultChannelManager channelManager = new DefaultChannelManager(bootstrapManager, bootststrapServers, null, null);
Map<TransportType, ChannelDirection> types = new HashMap<TransportType, ChannelDirection>();
types.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL);
KaaDataChannel channel = Mockito.mock(KaaDataChannel.class);
Mockito.when(channel.getTransportProtocolId()).thenReturn(TransportProtocolIdConstants.TCP_TRANSPORT_ID);
Mockito.when(channel.getSupportedTransportTypes()).thenReturn(types);
Mockito.when(channel.getId()).thenReturn("channel1");
channelManager.pause();
channelManager.addChannel(channel);
channelManager.resume();
Mockito.verify(channel, Mockito.times(1)).pause();
Mockito.verify(channel, Mockito.times(1)).resume();
}
private Map<TransportProtocolId, List<TransportConnectionInfo>> getDefaultBootstrapServers() throws NoSuchAlgorithmException {
Map<TransportProtocolId, List<TransportConnectionInfo>> bootststrapServers = new HashMap<>();
TransportConnectionInfo server = IpTransportInfoTest.createTestServerInfo(
ServerType.BOOTSTRAP, TransportProtocolIdConstants.HTTP_TRANSPORT_ID, "localhost", 9889, KeyUtil.generateKeyPair().getPublic());
bootststrapServers.put(TransportProtocolIdConstants.HTTP_TRANSPORT_ID, Collections.singletonList(server));
return bootststrapServers;
}
}