/* * Copyright Terracotta, 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.ehcache.clustered.server.internal.messages; import org.ehcache.clustered.common.internal.messages.EhcacheCodec; import org.ehcache.clustered.common.internal.messages.EhcacheEntityMessage; import org.ehcache.clustered.common.internal.messages.EhcacheMessageType; import org.ehcache.clustered.common.internal.messages.LifecycleMessage; import org.ehcache.clustered.server.internal.messages.PassiveReplicationMessage.ClientIDTrackerMessage; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.nio.ByteBuffer; import java.util.UUID; import static org.mockito.Matchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.MockitoAnnotations.initMocks; /** * EhcacheServerCodecTest */ public class EhcacheServerCodecTest { private static final UUID CLIENT_ID = UUID.randomUUID(); @Mock private EhcacheCodec clientCodec; @Mock private PassiveReplicationMessageCodec replicationCodec; private EhcacheServerCodec serverCodec; @Before public void setUp() { initMocks(this); serverCodec = new EhcacheServerCodec(clientCodec, replicationCodec); } @Test public void testDelegatesToEhcacheCodeForEncoding() throws Exception { LifecycleMessage lifecycleMessage = new LifecycleMessage() { @Override public EhcacheMessageType getMessageType() { return EhcacheMessageType.APPEND; } }; serverCodec.encodeMessage(lifecycleMessage); verify(clientCodec).encodeMessage(any(EhcacheEntityMessage.class)); verifyZeroInteractions(replicationCodec); } @Test public void testDelegatesToPassiveReplicationCodeForEncoding() throws Exception { ClientIDTrackerMessage message = new ClientIDTrackerMessage(CLIENT_ID); serverCodec.encodeMessage(message); verify(replicationCodec).encode(message); verifyZeroInteractions(clientCodec); } @Test public void decodeLifeCycleMessages() throws Exception { for (EhcacheMessageType messageType : EhcacheMessageType.LIFECYCLE_MESSAGES) { ByteBuffer encodedBuffer = EhcacheCodec.OP_CODE_DECODER.encoder().enm("opCode", messageType).encode(); serverCodec.decodeMessage(encodedBuffer.array()); } verify(clientCodec, times(EhcacheMessageType.LIFECYCLE_MESSAGES.size())).decodeMessage(any(ByteBuffer.class), any(EhcacheMessageType.class)); verifyZeroInteractions(replicationCodec); } @Test public void decodeServerStoreMessages() throws Exception { for (EhcacheMessageType messageType : EhcacheMessageType.STORE_OPERATION_MESSAGES) { ByteBuffer encodedBuffer = EhcacheCodec.OP_CODE_DECODER.encoder().enm("opCode", messageType).encode(); serverCodec.decodeMessage(encodedBuffer.array()); } verify(clientCodec, times(EhcacheMessageType.STORE_OPERATION_MESSAGES.size())).decodeMessage(any(ByteBuffer.class), any(EhcacheMessageType.class)); verifyZeroInteractions(replicationCodec); } @Test public void decodeStateRepoMessages() throws Exception { for (EhcacheMessageType messageType : EhcacheMessageType.STATE_REPO_OPERATION_MESSAGES) { ByteBuffer encodedBuffer = EhcacheCodec.OP_CODE_DECODER.encoder().enm("opCode", messageType).encode(); serverCodec.decodeMessage(encodedBuffer.array()); } verify(clientCodec, times(EhcacheMessageType.STATE_REPO_OPERATION_MESSAGES.size())).decodeMessage(any(ByteBuffer.class), any(EhcacheMessageType.class)); verifyZeroInteractions(replicationCodec); } @Test public void decodeClientIDTrackerMessages() throws Exception { for (EhcacheMessageType messageType : EhcacheMessageType.PASSIVE_REPLICATION_MESSAGES) { ByteBuffer encodedBuffer = EhcacheCodec.OP_CODE_DECODER.encoder().enm("opCode", messageType).encode(); serverCodec.decodeMessage(encodedBuffer.array()); } verify(replicationCodec, times(EhcacheMessageType.PASSIVE_REPLICATION_MESSAGES.size())).decode(any(EhcacheMessageType.class), any(ByteBuffer.class)); verifyZeroInteractions(clientCodec); } }