blob: 9fcbeb4313cebce6af35b578865859e4cbbe5895 [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.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.apache.geode.internal.cache.tier.Command;
import org.apache.geode.internal.cache.tier.MessageType;
import org.apache.geode.internal.cache.tier.sockets.command.AddPdxEnum;
import org.apache.geode.internal.cache.tier.sockets.command.AddPdxType;
import org.apache.geode.internal.cache.tier.sockets.command.ClearRegion;
import org.apache.geode.internal.cache.tier.sockets.command.ClientReady;
import org.apache.geode.internal.cache.tier.sockets.command.CloseConnection;
import org.apache.geode.internal.cache.tier.sockets.command.CommitCommand;
import org.apache.geode.internal.cache.tier.sockets.command.ContainsKey66;
import org.apache.geode.internal.cache.tier.sockets.command.CreateRegion;
import org.apache.geode.internal.cache.tier.sockets.command.Destroy70;
import org.apache.geode.internal.cache.tier.sockets.command.DestroyRegion;
import org.apache.geode.internal.cache.tier.sockets.command.ExecuteFunction70;
import org.apache.geode.internal.cache.tier.sockets.command.ExecuteRegionFunction66;
import org.apache.geode.internal.cache.tier.sockets.command.ExecuteRegionFunctionGeode18;
import org.apache.geode.internal.cache.tier.sockets.command.ExecuteRegionFunctionSingleHop;
import org.apache.geode.internal.cache.tier.sockets.command.GatewayReceiverCommand;
import org.apache.geode.internal.cache.tier.sockets.command.Get70;
import org.apache.geode.internal.cache.tier.sockets.command.GetAll70;
import org.apache.geode.internal.cache.tier.sockets.command.GetAllWithCallback;
import org.apache.geode.internal.cache.tier.sockets.command.GetClientPRMetadataCommand66;
import org.apache.geode.internal.cache.tier.sockets.command.GetClientPartitionAttributesCommand66;
import org.apache.geode.internal.cache.tier.sockets.command.GetEntry70;
import org.apache.geode.internal.cache.tier.sockets.command.GetFunctionAttribute;
import org.apache.geode.internal.cache.tier.sockets.command.GetPDXEnumById;
import org.apache.geode.internal.cache.tier.sockets.command.GetPDXIdForEnum;
import org.apache.geode.internal.cache.tier.sockets.command.GetPDXIdForType;
import org.apache.geode.internal.cache.tier.sockets.command.GetPDXTypeById;
import org.apache.geode.internal.cache.tier.sockets.command.GetPdxEnums70;
import org.apache.geode.internal.cache.tier.sockets.command.GetPdxTypes70;
import org.apache.geode.internal.cache.tier.sockets.command.Invalid;
import org.apache.geode.internal.cache.tier.sockets.command.Invalidate70;
import org.apache.geode.internal.cache.tier.sockets.command.KeySet;
import org.apache.geode.internal.cache.tier.sockets.command.MakePrimary;
import org.apache.geode.internal.cache.tier.sockets.command.PeriodicAck;
import org.apache.geode.internal.cache.tier.sockets.command.Ping;
import org.apache.geode.internal.cache.tier.sockets.command.Put70;
import org.apache.geode.internal.cache.tier.sockets.command.PutAll80;
import org.apache.geode.internal.cache.tier.sockets.command.PutAllWithCallback;
import org.apache.geode.internal.cache.tier.sockets.command.PutUserCredentials;
import org.apache.geode.internal.cache.tier.sockets.command.Query651;
import org.apache.geode.internal.cache.tier.sockets.command.QueryGeode10;
import org.apache.geode.internal.cache.tier.sockets.command.QueryWithParametersGeode10;
import org.apache.geode.internal.cache.tier.sockets.command.RegisterDataSerializers;
import org.apache.geode.internal.cache.tier.sockets.command.RegisterInstantiators;
import org.apache.geode.internal.cache.tier.sockets.command.RegisterInterest61;
import org.apache.geode.internal.cache.tier.sockets.command.RegisterInterestList66;
import org.apache.geode.internal.cache.tier.sockets.command.RemoveAll;
import org.apache.geode.internal.cache.tier.sockets.command.RemoveUserAuth;
import org.apache.geode.internal.cache.tier.sockets.command.RequestEventValue;
import org.apache.geode.internal.cache.tier.sockets.command.RollbackCommand;
import org.apache.geode.internal.cache.tier.sockets.command.Size;
import org.apache.geode.internal.cache.tier.sockets.command.TXFailoverCommand;
import org.apache.geode.internal.cache.tier.sockets.command.TXSynchronizationCommand;
import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterest;
import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterestList;
import org.apache.geode.internal.cache.tier.sockets.command.UpdateClientNotification;
import org.apache.geode.internal.serialization.KnownVersion;
public class CommandInitializerTest {
@Test
public void testCommandMapContainsAllVersions() {
for (KnownVersion version : KnownVersion.getAllVersions()) {
if (version.isNotOlderThan(KnownVersion.OLDEST)) {
org.junit.Assert.assertNotNull(
"Please add a command set for " + version + " of Geode to CommandInitializer",
CommandInitializer.getDefaultInstance().get(version));
}
}
}
@Test
public void initializeGeode18Commands() {
@SuppressWarnings("unchecked")
final Map<Integer, Command> commands = mock(Map.class);
CommandInitializer.initializeGeode18Commands(commands);
verify(commands).put(MessageType.EXECUTE_REGION_FUNCTION,
ExecuteRegionFunctionGeode18.getCommand());
verifyNoMoreInteractions(commands);
}
@Test
public void initializeGfe90Commands() {
@SuppressWarnings("unchecked")
final Map<Integer, Command> commands = mock(Map.class);
CommandInitializer.initializeGfe90Commands(commands);
verify(commands).put(MessageType.QUERY_WITH_PARAMETERS,
QueryWithParametersGeode10.getCommand());
verify(commands).put(MessageType.QUERY, QueryGeode10.getCommand());
verifyNoMoreInteractions(commands);
}
@Test
public void initializeGfe82Commands() {
@SuppressWarnings("unchecked")
final Map<Integer, Command> commands = mock(Map.class);
CommandInitializer.initializeGfe81Commands(commands);
verify(commands).put(MessageType.PING, Ping.getCommand());
verify(commands).put(MessageType.QUERY,
org.apache.geode.internal.cache.tier.sockets.command.Query.getCommand());
verify(commands).put(MessageType.CLEAR_REGION, ClearRegion.getCommand());
verify(commands).put(MessageType.DESTROY_REGION, DestroyRegion.getCommand());
verify(commands).put(MessageType.UNREGISTER_INTEREST, UnregisterInterest.getCommand());
verify(commands).put(MessageType.UNREGISTER_INTEREST_LIST, UnregisterInterestList.getCommand());
verify(commands).put(MessageType.KEY_SET, KeySet.getCommand());
verify(commands).put(MessageType.CREATE_REGION, CreateRegion.getCommand());
verify(commands).put(MessageType.MAKE_PRIMARY, MakePrimary.getCommand());
verify(commands).put(MessageType.PERIODIC_ACK, PeriodicAck.getCommand());
verify(commands).put(MessageType.REGISTER_INSTANTIATORS, RegisterInstantiators.getCommand());
verify(commands).put(MessageType.UPDATE_CLIENT_NOTIFICATION,
UpdateClientNotification.getCommand());
verify(commands).put(MessageType.CLOSE_CONNECTION, CloseConnection.getCommand());
verify(commands).put(MessageType.CLIENT_READY, ClientReady.getCommand());
verify(commands).put(MessageType.INVALID, Invalid.getCommand());
verify(commands).put(MessageType.REGISTER_INTEREST, RegisterInterest61.getCommand());
verify(commands).put(MessageType.REQUEST_EVENT_VALUE, RequestEventValue.getCommand());
verify(commands).put(MessageType.REGISTER_DATASERIALIZERS,
RegisterDataSerializers.getCommand());
verify(commands).put(MessageType.USER_CREDENTIAL_MESSAGE, PutUserCredentials.getCommand());
verify(commands).put(MessageType.REMOVE_USER_AUTH, RemoveUserAuth.getCommand());
verify(commands).put(MessageType.EXECUTE_REGION_FUNCTION_SINGLE_HOP,
ExecuteRegionFunctionSingleHop.getCommand());
verify(commands).put(MessageType.QUERY_WITH_PARAMETERS, Query651.getCommand());
verify(commands).put(MessageType.GET_CLIENT_PR_METADATA,
GetClientPRMetadataCommand66.getCommand());
verify(commands).put(MessageType.ADD_PDX_TYPE, AddPdxType.getCommand());
verify(commands).put(MessageType.GET_PDX_ID_FOR_TYPE, GetPDXIdForType.getCommand());
verify(commands).put(MessageType.GET_PDX_TYPE_BY_ID, GetPDXTypeById.getCommand());
verify(commands).put(MessageType.SIZE, Size.getCommand());
verify(commands).put(MessageType.COMMIT, CommitCommand.getCommand());
verify(commands).put(MessageType.ROLLBACK, RollbackCommand.getCommand());
verify(commands).put(MessageType.TX_FAILOVER, TXFailoverCommand.getCommand());
verify(commands).put(MessageType.TX_SYNCHRONIZATION, TXSynchronizationCommand.getCommand());
verify(commands).put(MessageType.GET_CLIENT_PARTITION_ATTRIBUTES,
GetClientPartitionAttributesCommand66.getCommand());
verify(commands).put(MessageType.REGISTER_INTEREST_LIST, RegisterInterestList66.getCommand());
verify(commands).put(MessageType.GET_FUNCTION_ATTRIBUTES, GetFunctionAttribute.getCommand());
verify(commands).put(MessageType.EXECUTE_REGION_FUNCTION, ExecuteRegionFunction66.getCommand());
verify(commands).put(MessageType.GATEWAY_RECEIVER_COMMAND, GatewayReceiverCommand.getCommand());
verify(commands).put(MessageType.CONTAINS_KEY, ContainsKey66.getCommand());
verify(commands).put(MessageType.ADD_PDX_ENUM, AddPdxEnum.getCommand());
verify(commands).put(MessageType.GET_PDX_ID_FOR_ENUM, GetPDXIdForEnum.getCommand());
verify(commands).put(MessageType.GET_PDX_ENUM_BY_ID, GetPDXEnumById.getCommand());
verify(commands).put(MessageType.REQUEST, Get70.getCommand());
verify(commands).put(MessageType.GET_ENTRY, GetEntry70.getCommand());
verify(commands).put(MessageType.GET_ALL_70, GetAll70.getCommand());
verify(commands).put(MessageType.PUT, Put70.getCommand());
verify(commands).put(MessageType.DESTROY, Destroy70.getCommand());
verify(commands).put(MessageType.INVALIDATE, Invalidate70.getCommand());
verify(commands).put(MessageType.GET_PDX_TYPES, GetPdxTypes70.getCommand());
verify(commands).put(MessageType.GET_PDX_ENUMS, GetPdxEnums70.getCommand());
verify(commands).put(MessageType.EXECUTE_FUNCTION, ExecuteFunction70.getCommand());
verify(commands).put(MessageType.PUTALL, PutAll80.getCommand());
verify(commands).put(MessageType.GET_ALL_WITH_CALLBACK, GetAllWithCallback.getCommand());
verify(commands).put(MessageType.PUT_ALL_WITH_CALLBACK, PutAllWithCallback.getCommand());
verify(commands).put(MessageType.REMOVE_ALL, RemoveAll.getCommand());
verifyNoMoreInteractions(commands);
}
@Test
public void commandMapUnmodifiable() {
final CommandInitializer commandInitializer = new CommandInitializer();
final Map<Integer, Command> commands = commandInitializer.get(KnownVersion.CURRENT);
assertThatThrownBy(() -> commands.put(1, Put70.getCommand()))
.isInstanceOf(UnsupportedOperationException.class);
}
@Test
public void newlyRegisteredCommandsVisibleInCommandMap() {
final Command command = mock(Command.class);
Map<KnownVersion, Command> newCommandMap = new HashMap<>();
newCommandMap.put(KnownVersion.CURRENT, command);
final CommandInitializer commandInitializer = new CommandInitializer();
final Map<Integer, Command> commands = commandInitializer.get(KnownVersion.CURRENT);
assertThat(commands).doesNotContainKeys(-2);
commandInitializer.register(-2, newCommandMap);
assertThat(commands).containsEntry(-2, command);
}
}