/*
* Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
import io.netty.buffer.ByteBuf;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdSerializerKey;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterOfMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
/**
* @author michal.polkorab
*
*/
public class ExperimenterInputMessageFactoryTest {
@Mock SerializerRegistry registry;
@Mock
private OFSerializer<ExperimenterDataOfChoice> serializer;
private OFSerializer<ExperimenterOfMessage> expFactory;
@Mock
private ExperimenterDataOfChoice vendorData;
@Mock
private ByteBuf out;
/**
* Sets up ExperimenterInputMessageFactory
* @param real true if setup should use real registry, false when mock is desired
*/
public void startUp(boolean real) {
MockitoAnnotations.initMocks(this);
expFactory = new ExperimenterInputMessageFactory();
if (real) {
SerializerRegistry realRegistry = new SerializerRegistryImpl();
realRegistry.init();
((SerializerRegistryInjector) expFactory).injectSerializerRegistry(realRegistry);
} else {
((SerializerRegistryInjector) expFactory).injectSerializerRegistry(registry);
}
}
/**
* Testing of {@link ExperimenterInputMessageFactory} for correct serializer
* lookup and serialization
* @throws Exception
*/
@Test(expected=IllegalStateException.class)
public void testV10Real() throws Exception {
startUp(true);
ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
builder.setExperimenter(new ExperimenterId(42L));
builder.setExpType(21L);
builder.setExperimenterDataOfChoice(vendorData);
ExperimenterInput input = builder.build();
expFactory.serialize(input, out);
}
/**
* Testing of {@link ExperimenterInputMessageFactory} for correct serializer
* lookup and serialization
* @throws Exception
*/
@Test(expected=IllegalStateException.class)
public void testV13Real() throws Exception {
startUp(true);
ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
builder.setExperimenter(new ExperimenterId(42L));
builder.setExpType(22L);
builder.setExperimenterDataOfChoice(vendorData);
ExperimenterInput input = builder.build();
expFactory.serialize(input, out);
}
/**
* Testing of {@link ExperimenterInputMessageFactory} for correct serializer
* lookup and serialization
* @throws Exception
*/
@Test
public void testV10() throws Exception {
startUp(false);
ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
builder.setExperimenter(new ExperimenterId(42L));
builder.setExpType(21L);
builder.setExperimenterDataOfChoice(vendorData);
ExperimenterInput input = builder.build();
Mockito.when(registry.getSerializer(
(ExperimenterIdSerializerKey<?>) Matchers.any())).thenReturn(serializer);
expFactory.serialize(input, out);
Mockito.verify(serializer, Mockito.times(1)).serialize(input.getExperimenterDataOfChoice(), out);
}
/**
* Testing of {@link ExperimenterInputMessageFactory} for correct serializer
* lookup and serialization
* @throws Exception
*/
@Test
public void testV13() throws Exception {
startUp(false);
ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
builder.setExperimenter(new ExperimenterId(42L));
builder.setExpType(21L);
builder.setExperimenterDataOfChoice(vendorData);
ExperimenterInput input = builder.build();
Mockito.when(registry.getSerializer(
(ExperimenterIdSerializerKey<?>) Matchers.any())).thenReturn(serializer);
expFactory.serialize(input, out);
Mockito.verify(serializer, Mockito.times(1)).serialize(input.getExperimenterDataOfChoice(), out);
}
}