+/*
+ * 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;
+ private 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);
+ }
+ }
+}