blob: 5867f9ea13ae39ef029f1092086a34afc62006fb [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.tier.sockets;
import static org.apache.geode.internal.cache.tier.sockets.Handshake.CONFLATION_DEFAULT;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.InetAddress;
import java.net.Socket;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.RestoreSystemProperties;
import org.apache.geode.cache.CacheException;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.cache.tier.sockets.CacheClientProxyFactory.InternalCacheClientProxyFactory;
import org.apache.geode.internal.security.SecurityService;
import org.apache.geode.internal.serialization.KnownVersion;
import org.apache.geode.internal.statistics.StatisticsClock;
import org.apache.geode.internal.statistics.StatisticsManager;
public class CacheClientProxyFactoryTest {
private CacheClientNotifier notifier;
private Socket socket;
private ClientProxyMembershipID proxyId;
private KnownVersion clientVersion;
private SecurityService securityService;
private Subject subject;
private StatisticsClock statisticsClock;
@Rule
public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
@Before
public void setUp() throws Exception {
notifier = mock(CacheClientNotifier.class);
socket = mock(Socket.class);
proxyId = mock(ClientProxyMembershipID.class);
clientVersion = mock(KnownVersion.class);
securityService = mock(SecurityService.class);
subject = mock(Subject.class);
statisticsClock = mock(StatisticsClock.class);
InetAddress inetAddress = mock(InetAddress.class);
InternalCache cache = mock(InternalCache.class);
InternalDistributedMember member = mock(InternalDistributedMember.class);
InternalDistributedSystem system = mock(InternalDistributedSystem.class);
when(cache.getInternalDistributedSystem()).thenReturn(system);
when(inetAddress.getHostAddress()).thenReturn("localhost");
when(member.getId()).thenReturn("memberId");
when(notifier.getCache()).thenReturn(cache);
when(notifier.getAcceptorStats()).thenReturn(mock(CacheServerStats.class));
when(proxyId.getDistributedMember()).thenReturn(member);
when(socket.getInetAddress()).thenReturn(inetAddress);
when(socket.getPort()).thenReturn(33333);
when(system.getStatisticsManager()).thenReturn(mock(StatisticsManager.class));
}
@Test
public void createsCacheClientProxyByDefault() {
CacheClientProxyFactory factory = new CacheClientProxyFactory();
CacheClientProxy proxy = factory.create(notifier, socket, proxyId, false, CONFLATION_DEFAULT,
clientVersion, 0, false, securityService, subject, statisticsClock);
assertThat(proxy).isExactlyInstanceOf(CacheClientProxy.class);
}
@Test
public void usesCustomInternalFactorySpecifiedByProperty() {
System.setProperty(CacheClientProxyFactory.INTERNAL_FACTORY_PROPERTY,
SubCacheClientProxyFactory.class.getName());
CacheClientProxyFactory factory = new CacheClientProxyFactory();
CacheClientProxy proxy = factory.create(notifier, socket, proxyId, false, CONFLATION_DEFAULT,
clientVersion, 0, false, securityService, subject, statisticsClock);
assertThat(proxy).isExactlyInstanceOf(SubCacheClientProxy.class);
}
public static class SubCacheClientProxyFactory implements InternalCacheClientProxyFactory {
@Override
public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
throws CacheException {
return new SubCacheClientProxy(notifier, socket, proxyId, isPrimary, clientConflation,
clientVersion, acceptorId, notifyBySubscription, securityService, subject,
statisticsClock);
}
}
private static class SubCacheClientProxy extends CacheClientProxy {
SubCacheClientProxy(CacheClientNotifier notifier, Socket socket,
ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
throws CacheException {
super(notifier, socket, proxyId, isPrimary, clientConflation, clientVersion, acceptorId,
notifyBySubscription, securityService, subject, statisticsClock);
}
}
}