Package org.openflow.protocol

Source Code of org.openflow.protocol.OFVendorTest$AcmeVendorData2

/**
*    Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior
*    University
*
*    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.openflow.protocol;

import java.util.Arrays;

import junit.framework.TestCase;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.openflow.protocol.factory.BasicFactory;
import org.openflow.protocol.vendor.OFByteArrayVendorData;
import org.openflow.protocol.vendor.OFBasicVendorDataType;
import org.openflow.protocol.vendor.OFBasicVendorId;
import org.openflow.protocol.vendor.OFVendorData;
import org.openflow.protocol.vendor.OFVendorId;
import org.openflow.util.OFTestCase;

public class OFVendorTest extends OFTestCase {

    public static int ACME_VENDOR_ID = 0x00112233;
   
    static class AcmeVendorData implements OFVendorData {
        protected int dataType;
       
        @Override
        public int getLength() {
            return 4;
        }
       
        @Override
        public void readFrom(ChannelBuffer data, int length) {
            dataType = data.readInt();
        }
       
        @Override
        public void writeTo(ChannelBuffer data) {
            data.writeInt(dataType);
        }
    }
   
    static class AcmeVendorData1 extends AcmeVendorData {
        public short flags;
        public short value;
       
        public static int DATA_TYPE = 1;
       
        public AcmeVendorData1() {
        }
       
        public AcmeVendorData1(short flags, short value) {
            this.dataType = DATA_TYPE;
            this.flags = flags;
            this.value = value;
        }
       
        public short getFlags() {
            return flags;
        }
       
        public short getValue() {
            return value;
        }
       
        @Override
        public int getLength() {
            return 8;
        }
       
        @Override
        public void readFrom(ChannelBuffer data, int length) {
            super.readFrom(data, length);
            flags = data.readShort();
            value = data.readShort();

        }
        @Override
        public void writeTo(ChannelBuffer data) {
            super.writeTo(data);
            data.writeShort(flags);
            data.writeShort(value);
        }
       
        public static Instantiable<OFVendorData> getInstantiable() {
            return new Instantiable<OFVendorData>() {
                @Override
                public OFVendorData instantiate() {
                    return new AcmeVendorData1();
                }
            };
        }
    }
   
    static class AcmeVendorData2 extends AcmeVendorData {
        public int type;
        public int subtype;

        public static int DATA_TYPE = 2;

        public AcmeVendorData2() {
        }
       
        public AcmeVendorData2(int type, int subtype) {
            this.dataType = DATA_TYPE;
            this.type = type;
            this.subtype = subtype;
        }
       
        public int getType() {
            return type;
        }
       
        public int getSubtype() {
            return subtype;
        }
       
        @Override
        public int getLength() {
            return 12;
        }
       
        @Override
        public void readFrom(ChannelBuffer data, int length) {
            super.readFrom(data, length);
            type = data.readShort();
            subtype = data.readShort();

        }
        @Override
        public void writeTo(ChannelBuffer data) {
            super.writeTo(data);
            data.writeShort(type);
            data.writeShort(subtype);
        }
       
        public static Instantiable<OFVendorData> getInstantiable() {
            return new Instantiable<OFVendorData>() {
                @Override
                public OFVendorData instantiate() {
                    return new AcmeVendorData2();
                }
            };
        }
    }
   
    {
        OFBasicVendorId acmeVendorId = new OFBasicVendorId(ACME_VENDOR_ID, 4);
        OFVendorId.registerVendorId(acmeVendorId);
        OFBasicVendorDataType acmeVendorData1 = new OFBasicVendorDataType(
            AcmeVendorData1.DATA_TYPE, AcmeVendorData1.getInstantiable());
        acmeVendorId.registerVendorDataType(acmeVendorData1);
        OFBasicVendorDataType acmeVendorData2 = new OFBasicVendorDataType(
            AcmeVendorData2.DATA_TYPE, AcmeVendorData2.getInstantiable());
        acmeVendorId.registerVendorDataType(acmeVendorData2);
    }
   
    private OFVendor makeVendorMessage(int vendor) {
        OFVendor msg = (OFVendor) messageFactory.getMessage(OFType.VENDOR);
        msg.setVendorDataFactory(BasicFactory.getInstance());
        msg.setVendor(vendor);
        return msg;
    }
   
    public void testWriteRead() throws Exception {
        OFVendor msg = makeVendorMessage(1);
        ChannelBuffer bb = ChannelBuffers.dynamicBuffer();
        bb.clear();
        msg.writeTo(bb);
        msg.readFrom(bb);
        TestCase.assertEquals(1, msg.getVendor());
    }
   
    public void testVendorData() throws Exception {
        OFVendor msg = makeVendorMessage(ACME_VENDOR_ID);
        OFVendorData vendorData = new AcmeVendorData1((short)11, (short)22);
        msg.setVendorData(vendorData);
        msg.setLengthU(OFVendor.MINIMUM_LENGTH + vendorData.getLength());
        ChannelBuffer bb = ChannelBuffers.dynamicBuffer();
        bb.clear();
        msg.writeTo(bb);
        msg.readFrom(bb);
        assertEquals(ACME_VENDOR_ID, msg.getVendor());
        AcmeVendorData1 vendorData1 = (AcmeVendorData1) msg.getVendorData();
        assertEquals(11, vendorData1.getFlags());
        assertEquals(22, vendorData1.getValue());
       
        vendorData = new AcmeVendorData2(33, 44);
        msg.setVendorData(vendorData);
        msg.setLengthU(OFVendor.MINIMUM_LENGTH + vendorData.getLength());
        bb.clear();
        msg.writeTo(bb);
        msg.readFrom(bb);
        assertEquals(ACME_VENDOR_ID, msg.getVendor());
        AcmeVendorData2 vendorData2 = (AcmeVendorData2) msg.getVendorData();
        assertEquals(33, vendorData2.getType());
        assertEquals(44, vendorData2.getSubtype());
       
        final int DUMMY_VENDOR_ID = 55;
        msg.setVendor(DUMMY_VENDOR_ID);
        byte[] genericVendorDataBytes = new byte[] {0x55, 0x66};
        vendorData = new OFByteArrayVendorData(genericVendorDataBytes);
        msg.setVendorData(vendorData);
        msg.setLengthU(OFVendor.MINIMUM_LENGTH + vendorData.getLength());
        bb.clear();
        msg.writeTo(bb);
        msg.readFrom(bb);
        assertEquals(DUMMY_VENDOR_ID, msg.getVendor());
        OFByteArrayVendorData genericVendorData = (OFByteArrayVendorData) msg.getVendorData();
        assertTrue(Arrays.equals(genericVendorDataBytes, genericVendorData.getBytes()));
    }
}
TOP

Related Classes of org.openflow.protocol.OFVendorTest$AcmeVendorData2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.