2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
14 import java.util.ArrayList;
15 import java.util.List;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
22 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
24 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
25 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;
36 * @author timotej.kubas
39 public class GroupModInputMessageFactoryTest {
40 private static final byte MESSAGE_TYPE = 15;
41 private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;
42 private SerializerRegistry registry;
43 private OFSerializer<GroupModInput> groupModFactory;
46 * Initializes serializer registry and stores correct factory in field
49 public void startUp() {
50 registry = new SerializerRegistryImpl();
52 groupModFactory = registry.getSerializer(
53 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, GroupModInput.class));
58 * Testing of {@link GroupModInputMessageFactory} for correct translation from POJO
61 public void testGroupModInputMessage() throws Exception {
62 GroupModInputBuilder builder = new GroupModInputBuilder();
63 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
64 builder.setCommand(GroupModCommand.forValue(2));
65 builder.setType(GroupType.forValue(3));
66 builder.setGroupId(new GroupId(256L));
67 List<BucketsList> exp = createBucketsList();
68 builder.setBucketsList(exp);
69 GroupModInput message = builder.build();
71 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
72 groupModFactory.serialize(message, out);
74 BufferHelper.checkHeaderV13(out, MESSAGE_TYPE, 32);
75 Assert.assertEquals("Wrong command", message.getCommand().getIntValue(), out.readUnsignedShort());
76 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedByte());
77 out.skipBytes(PADDING_IN_GROUP_MOD_MESSAGE);
78 Assert.assertEquals("Wrong groupId", message.getGroupId().getValue().intValue(), out.readUnsignedInt());
79 List<BucketsList> rec = createBucketsListFromBufer(out);
80 Assert.assertArrayEquals("Wrong bucketList", exp.toArray(), rec.toArray());
83 private static List<BucketsList> createBucketsList(){
84 List<BucketsList> bucketsList = new ArrayList<>();
85 BucketsListBuilder bucketsBuilder = new BucketsListBuilder();
87 bucketsBuilder.setWeight(10);
88 bucketsBuilder.setWatchPort(new PortNumber(65L));
89 bucketsBuilder.setWatchGroup(22L);
90 bucket = bucketsBuilder.build();
91 bucketsList.add(bucket);
95 private static List<BucketsList> createBucketsListFromBufer(ByteBuf out){
96 List<BucketsList> bucketsList = new ArrayList<>();
97 BucketsListBuilder bucketsBuilder = new BucketsListBuilder();
99 out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
100 bucketsBuilder.setWeight(out.readUnsignedShort());
101 bucketsBuilder.setWatchPort(new PortNumber(out.readUnsignedInt()));
102 bucketsBuilder.setWatchGroup(out.readUnsignedInt());
104 bucket = bucketsBuilder.build();
105 bucketsList.add(bucket);