blob: dedb368843906f2f5e20c6d701f04bab7654eeb7 [file] [log] [blame]
/*
* 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.geode.internal.cache.wan;
import static java.util.Collections.singleton;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runners.Parameterized.UseParametersRunnerFactory;
import org.apache.geode.cache.wan.GatewayReceiver;
import org.apache.geode.cache.wan.GatewayTransportFilter;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.internal.cache.GemFireCacheImpl;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.cache.InternalCacheServer;
import org.apache.geode.internal.cache.xmlcache.CacheCreation;
import org.apache.geode.test.junit.runners.CategoryWithParameterizedRunnerFactory;
@RunWith(Parameterized.class)
@UseParametersRunnerFactory(CategoryWithParameterizedRunnerFactory.class)
public class GatewayReceiverFactoryImplTest {
@Parameter
public InternalCache cache;
private GatewayReceiverFactoryImpl gatewayReceiverFactory;
@Parameters(name = "{0}")
public static Collection<InternalCache> cacheTypes() {
InternalCache gemFireCacheImpl = mock(GemFireCacheImpl.class, "GemFireCacheImpl");
InternalCache cacheCreation = mock(CacheCreation.class, "CacheCreation");
InternalDistributedSystem system = mock(InternalDistributedSystem.class);
when(gemFireCacheImpl.addGatewayReceiverServer(any()))
.thenReturn(mock(InternalCacheServer.class));
when(gemFireCacheImpl.getDistributedSystem()).thenReturn(system);
when(gemFireCacheImpl.getInternalDistributedSystem()).thenReturn(system);
return Arrays.asList(gemFireCacheImpl, cacheCreation);
}
@Before
public void setUp() {
when(cache.getGatewayReceivers()).thenReturn(Collections.emptySet());
when(cache.getMeterRegistry()).thenReturn(new SimpleMeterRegistry());
gatewayReceiverFactory = new GatewayReceiverFactoryImpl(cache);
}
@Test
public void createDoesNotUseManualStartByDefault() {
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.isManualStart()).isFalse();
}
@Test
public void createUsesSpecifiedManualStart() {
gatewayReceiverFactory.setManualStart(true);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.isManualStart()).isTrue();
}
@Test
public void createDoesNotUseGatewayTransportFiltersByDefault() {
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getGatewayTransportFilters()).isEmpty();
}
@Test
public void createUsesSpecifiedGatewayTransportFilter() {
GatewayTransportFilter gatewayTransportFilter = mock(GatewayTransportFilter.class);
gatewayReceiverFactory.addGatewayTransportFilter(gatewayTransportFilter);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getGatewayTransportFilters()).containsOnly(gatewayTransportFilter);
}
@Test
public void createUsesMultipleSpecifiedGatewayTransportFilters() {
GatewayTransportFilter gatewayTransportFilter1 = mock(GatewayTransportFilter.class);
GatewayTransportFilter gatewayTransportFilter2 = mock(GatewayTransportFilter.class);
GatewayTransportFilter gatewayTransportFilter3 = mock(GatewayTransportFilter.class);
gatewayReceiverFactory.addGatewayTransportFilter(gatewayTransportFilter1);
gatewayReceiverFactory.addGatewayTransportFilter(gatewayTransportFilter2);
gatewayReceiverFactory.addGatewayTransportFilter(gatewayTransportFilter3);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getGatewayTransportFilters())
.containsExactlyInAnyOrder(gatewayTransportFilter1, gatewayTransportFilter2,
gatewayTransportFilter3);
}
@Test
public void createUsesEndPortDefault() {
int endPortDefault = 5500;
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getEndPort()).isEqualTo(endPortDefault);
}
@Test
public void createUsesSpecifiedEndPort() {
int endPort = 6000;
gatewayReceiverFactory.setEndPort(endPort);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getEndPort()).isEqualTo(endPort);
}
@Test
public void createThrowsIllegalStateExceptionIfEndPortIsLessThanStartPortDefault() {
int endPort = 2500;
gatewayReceiverFactory.setEndPort(endPort);
Throwable thrown = catchThrowable(() -> gatewayReceiverFactory.create());
assertThat(thrown).isInstanceOf(IllegalStateException.class);
}
@Test
public void createUsesStartPortDefault() {
int startPortDefault = 5000;
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getStartPort()).isEqualTo(startPortDefault);
}
@Test
public void createUsesSpecifiedStartPort() {
int startPort = 2500;
gatewayReceiverFactory.setStartPort(startPort);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getStartPort()).isEqualTo(startPort);
}
@Test
public void createThrowsIllegalStateExceptionIfSpecifiedStartPortIsGreaterThanEndPortDefault() {
int startPort = 6000;
gatewayReceiverFactory.setStartPort(startPort);
Throwable thrown = catchThrowable(() -> gatewayReceiverFactory.create());
assertThat(thrown).isInstanceOf(IllegalStateException.class);
}
@Test
public void createUsesSpecifiedStartPortAndEndPort() {
int startPort = 4000;
int endPort = 6000;
gatewayReceiverFactory.setStartPort(startPort);
gatewayReceiverFactory.setEndPort(endPort);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getStartPort()).isEqualTo(startPort);
assertThat(receiver.getEndPort()).isEqualTo(endPort);
}
@Test
public void createThrowsIllegalStateExceptionIfSpecifiedEndPortIsLessThanSpecifiedStartPort() {
int startPort = 6000;
int endPort = 4000;
gatewayReceiverFactory.setStartPort(startPort);
gatewayReceiverFactory.setEndPort(endPort);
Throwable thrown = catchThrowable(() -> gatewayReceiverFactory.create());
assertThat(thrown).isInstanceOf(IllegalStateException.class);
}
@Test
public void createUsesBindAddressDefault() {
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getBindAddress()).isEqualTo("");
}
@Test
public void createUsesSpecifiedBindAddress() {
String bindAddress = "kaos";
gatewayReceiverFactory.setBindAddress(bindAddress);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getBindAddress()).isEqualTo(bindAddress);
}
@Test
public void createUsesSocketBufferSizeDefault() {
String socketBufferSizeDefault = "524288";
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getSocketBufferSize()).isEqualTo(Integer.valueOf(socketBufferSizeDefault));
}
@Test
public void createUsesSpecifiedSocketBufferSize() {
int socketBufferSize = 128;
gatewayReceiverFactory.setSocketBufferSize(socketBufferSize);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getSocketBufferSize()).isEqualTo(socketBufferSize);
}
@Test
public void createUsesHostnameForSendersDefault() {
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getHostnameForSenders()).isEqualTo("");
}
@Test
public void createUsesSpecifiedHostnameForSenders() {
String hostnameForSenders = "kaos.com";
gatewayReceiverFactory.setHostnameForSenders(hostnameForSenders);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getHostnameForSenders()).isEqualTo(hostnameForSenders);
}
@Test
public void createUsesMaximumTimeBetweenPingsDefault() {
int maximumTimeBetweenPingsDefault = 60000;
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getMaximumTimeBetweenPings()).isEqualTo(maximumTimeBetweenPingsDefault);
}
@Test
public void createUsesSpecifiedMaximumTimeBetweenPings() {
int timeoutBetweenPings = 1;
gatewayReceiverFactory.setMaximumTimeBetweenPings(timeoutBetweenPings);
GatewayReceiver receiver = gatewayReceiverFactory.create();
assertThat(receiver.getMaximumTimeBetweenPings()).isEqualTo(timeoutBetweenPings);
}
@Test
public void createAddsGatewayReceiverToCache() {
GatewayReceiver receiver = gatewayReceiverFactory.create();
verify(cache).addGatewayReceiver(receiver);
}
@Test
public void createThrowsIllegalStateExceptionIfGatewayReceiverAlreadyExists() {
when(cache.getGatewayReceivers()).thenReturn(singleton(mock(GatewayReceiver.class)));
Throwable thrown = catchThrowable(() -> gatewayReceiverFactory.create());
assertThat(thrown).isInstanceOf(IllegalStateException.class);
}
}