/* * Copyright (c) 2013 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.deserialization.factories; import io.netty.buffer.ByteBuf; import org.junit.Assert; import org.junit.Before; import org.junit.Test; 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.openflowjava.protocol.impl.util.BufferHelper; import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage; /** * @author timotej.kubas * @author michal.polkorab */ public class PortStatusMessageFactoryTest { private OFDeserializer<PortStatusMessage> statusFactory; /** * Initializes deserializer registry and lookups correct deserializer */ @Before public void startUp() { DeserializerRegistry registry = new DeserializerRegistryImpl(); registry.init(); statusFactory = registry.getDeserializer( new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 12, PortStatusMessage.class)); } /** * Testing {@link PortStatusMessageFactory} for correct translation into POJO */ @Test public void test(){ ByteBuf bb = BufferHelper.buildBuffer("01 " + //reason "00 00 00 00 00 00 00 " + //padding "00 01 02 03 " + //port no "00 00 00 00 " + //padding in ofp_port1 "08 00 27 00 B0 EB " + //mac address "00 00 " + //padding in ofp_port2 "73 31 2d 65 74 68 31 00 00 00 00 00 00 00 00 00 " + // port name, String "s1-eth1" "00 00 00 41 " + //port config "00 00 00 05 " + //port state "00 00 00 81 " + //current features "00 00 00 A1 " + //advertised features "00 00 00 B1 " + //supported features "00 00 00 81 " + //peer features "00 00 00 81 " + //curr speed "00 00 00 80" //max speed ); PortStatusMessage builtByFactory = BufferHelper.deserialize(statusFactory, bb); BufferHelper.checkHeaderV13(builtByFactory); Assert.assertEquals("Wrong reason", 0x01, builtByFactory.getReason().getIntValue()); Assert.assertEquals("Wrong portNumber", 66051L, builtByFactory.getPortNo().longValue()); Assert.assertEquals("Wrong macAddress", new MacAddress("08:00:27:00:b0:eb"), builtByFactory.getHwAddr()); Assert.assertEquals("Wrong name", "s1-eth1", builtByFactory.getName()); Assert.assertEquals("Wrong portConfig", new PortConfig(false, true, false, true), builtByFactory.getConfig()); Assert.assertEquals("Wrong portState", new PortState(false, true, true), builtByFactory.getState()); Assert.assertEquals("Wrong currentFeatures", new PortFeatures(false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false), builtByFactory.getCurrentFeatures()); Assert.assertEquals("Wrong advertisedFeatures", new PortFeatures(false, false, false, false, false, true, true, false, false, true, false, false, false, false, false, false), builtByFactory.getAdvertisedFeatures()); Assert.assertEquals("Wrong supportedFeatures", new PortFeatures(false, false, false, false, false, true, true, true, false, true, false, false, false, false, false, false), builtByFactory.getSupportedFeatures()); Assert.assertEquals("Wrong peerFeatures", new PortFeatures(false, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false), builtByFactory.getPeerFeatures()); Assert.assertEquals("Wrong currSpeed", 129L, builtByFactory.getCurrSpeed().longValue()); Assert.assertEquals("Wrong maxSpeed", 128L, builtByFactory.getMaxSpeed().longValue()); } /** * Testing {@link PortStatusMessageFactory} for correct translation into POJO */ @Test public void testWithDifferentBitmaps(){ ByteBuf bb = BufferHelper.buildBuffer("01 00 00 00 00 00 00 00 " + //reason, padding "00 01 02 03 00 00 00 00 " + //port no, padding "08 00 27 00 B0 EB 00 00 " + //mac address, padding "73 31 2d 65 74 68 31 00 00 00 00 00 00 00 00 00 " + // port name, String "s1-eth1" "00 00 00 24 " + //port config "00 00 00 02 " + //port state "00 00 00 81 00 00 00 A1 " + //current + advertised features "00 00 FF FF 00 00 00 00 " + //supported + peer features "00 00 00 81 00 00 00 80" //curr speed, max speed ); PortStatusMessage message = BufferHelper.deserialize(statusFactory, bb); Assert.assertEquals("Wrong portConfig", new PortConfig(true, false, true, false), message.getConfig()); Assert.assertEquals("Wrong portState", new PortState(true, false, false), message.getState()); Assert.assertEquals("Wrong supportedFeatures", new PortFeatures(true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true), message.getSupportedFeatures()); Assert.assertEquals("Wrong peerFeatures", new PortFeatures(false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), message.getPeerFeatures()); } }