/*
* Copyright (c) 2016 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.util;
import io.netty.buffer.ByteBuf;
import java.util.List;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
* Super class for common stuff of deserialization factories tests.
*/
public abstract class DefaultDeserializerFactoryTest<T extends DataContainer> {
private DeserializerRegistry registry;
protected OFDeserializer<T> factory;
protected MessageCodeKey messageCodeKey;
public DefaultDeserializerFactoryTest(final MessageCodeKey key) {
this.registry = new DeserializerRegistryImpl();
this.registry.init();
this.messageCodeKey = key;
this.factory = registry.getDeserializer(key);
}
/**
* Test correct version after deserialization for all supported OF versions.
* @param versions supported OF versions
* @param buffer byte buffer to deserialze
*/
protected void testHeaderVersions(final List<Byte> versions, final ByteBuf buffer) {
for (short version : versions) {
ByteBuf bb = buffer.copy();
OFDeserializer<T> factory = registry.getDeserializer(
new MessageCodeKey(version, messageCodeKey.getMsgType(), messageCodeKey.getClazz()));
T builtByFactory = BufferHelper.deserialize(factory, bb);
BufferHelper.checkHeader((OfHeader) builtByFactory, version);
}
}
}