Merge "Bug 1277 - Move ByteBuffUtils to separate bundle"
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / InstructionsDeserializerTest.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.openflowjava.protocol.impl.util;\r
9 \r
10 import io.netty.buffer.ByteBuf;\r
11 \r
12 import java.util.List;\r
13 \r
14 import org.junit.Assert;\r
15 import org.junit.Before;\r
16 import org.junit.Test;\r
17 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
19 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataInstruction;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MeterIdInstruction;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlAction;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdAction;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TableIdInstruction;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
31 \r
32 /**\r
33  * @author michal.polkorab\r
34  *\r
35  */\r
36 public class InstructionsDeserializerTest {\r
37 \r
38 \r
39     private DeserializerRegistry registry;\r
40 \r
41     /**\r
42      * Initializes deserializer registry and lookups correct deserializer\r
43      */\r
44     @Before\r
45     public void startUp() {\r
46         registry = new DeserializerRegistryImpl();\r
47         registry.init();\r
48     }\r
49 \r
50     /**\r
51      * Testing instructions translation\r
52      */\r
53     @Test\r
54     public void test() {\r
55         ByteBuf message = BufferHelper.buildBuffer("00 01 00 08 0A 00 00 00 00 02 00 18 00 00 00 00 "\r
56                 + "00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 30 00 05 00 08 00 00 00 00 00 06 00 08 "\r
57                 + "00 01 02 03 00 03 00 20 00 00 00 00 00 00 00 10 00 00 00 25 00 35 00 00 00 00 00 00 "\r
58                 + "00 16 00 08 00 00 00 50 00 04 00 18 00 00 00 00 00 15 00 08 00 00 00 25 00 0F 00 08 05 00 00 00");\r
59         \r
60         message.skipBytes(4); // skip XID\r
61         \r
62         CodeKeyMaker keyMaker = CodeKeyMakerFactory.createInstructionsKeyMaker(EncodeConstants.OF13_VERSION_ID);\r
63         List<Instruction> instructions = ListDeserializer.deserializeList(EncodeConstants.OF13_VERSION_ID,\r
64                 message.readableBytes(), message, keyMaker, registry);\r
65         Instruction i1 = instructions.get(0);\r
66         Assert.assertEquals("Wrong type - i1", "org.opendaylight.yang.gen.v1.urn."\r
67                 + "opendaylight.openflow.common.instruction.rev130731.GotoTable", i1.getType().getName());\r
68         Assert.assertEquals("Wrong table-id - i1", 10, i1.getAugmentation(TableIdInstruction.class).getTableId().intValue());\r
69         Instruction i2 = instructions.get(1);\r
70         Assert.assertEquals("Wrong type - i2", "org.opendaylight.yang.gen.v1.urn."\r
71                 + "opendaylight.openflow.common.instruction.rev130731.WriteMetadata", i2.getType().getName());\r
72         Assert.assertArrayEquals("Wrong metadata - i2", ByteBufUtils.hexStringToBytes("00 00 00 00 00 00 00 20"),\r
73                 i2.getAugmentation(MetadataInstruction.class).getMetadata());\r
74         Assert.assertArrayEquals("Wrong metadata-mask - i2", ByteBufUtils.hexStringToBytes("00 00 00 00 00 00 00 30"),\r
75                 i2.getAugmentation(MetadataInstruction.class).getMetadataMask());\r
76         Instruction i3 = instructions.get(2);\r
77         Assert.assertEquals("Wrong type - i3", "org.opendaylight.yang.gen.v1.urn."\r
78                 + "opendaylight.openflow.common.instruction.rev130731.ClearActions", i3.getType().getName());\r
79         Assert.assertEquals("Wrong instructions - i3", 0, i3.getAugmentation(ActionsInstruction.class).getAction().size());\r
80         Instruction i4 = instructions.get(3);\r
81         Assert.assertEquals("Wrong type - i4", "org.opendaylight.yang.gen.v1.urn."\r
82                 + "opendaylight.openflow.common.instruction.rev130731.Meter", i4.getType().getName());\r
83         Assert.assertEquals("Wrong meterId - i4", 66051, i4.getAugmentation(MeterIdInstruction.class).getMeterId().intValue());\r
84         Instruction i5 = instructions.get(4);\r
85         Assert.assertEquals("Wrong type - i5", "org.opendaylight.yang.gen.v1.urn."\r
86                 + "opendaylight.openflow.common.instruction.rev130731.WriteActions", i5.getType().getName());\r
87         Assert.assertEquals("Wrong instructions - i5", 2, i5.getAugmentation(ActionsInstruction.class).getAction().size());\r
88         Action action1 = i5.getAugmentation(ActionsInstruction.class).getAction().get(0);\r
89         Assert.assertEquals("Wrong action", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output",\r
90                 action1.getType().getName());\r
91         Assert.assertEquals("Wrong action", 37, action1.getAugmentation(PortAction.class).getPort().getValue().intValue());\r
92         Assert.assertEquals("Wrong action", 53, action1.getAugmentation(MaxLengthAction.class).getMaxLength().intValue());\r
93         Action action2 = i5.getAugmentation(ActionsInstruction.class).getAction().get(1);\r
94         Assert.assertEquals("Wrong action", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group",\r
95                 action2.getType().getName());\r
96         Assert.assertEquals("Wrong action", 80, action2.getAugmentation(GroupIdAction.class).getGroupId().intValue());\r
97         Instruction i6 = instructions.get(5);\r
98         Assert.assertEquals("Wrong type - i6", "org.opendaylight.yang.gen.v1.urn."\r
99                 + "opendaylight.openflow.common.instruction.rev130731.ApplyActions", i6.getType().getName());\r
100         Assert.assertEquals("Wrong instructions - i6", 2, i6.getAugmentation(ActionsInstruction.class).getAction().size());\r
101         action1 = i6.getAugmentation(ActionsInstruction.class).getAction().get(0);\r
102         Assert.assertEquals("Wrong action", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue",\r
103                 action1.getType().getName());\r
104         Assert.assertEquals("Wrong action", 37, action1.getAugmentation(QueueIdAction.class).getQueueId().intValue());\r
105         action2 = i6.getAugmentation(ActionsInstruction.class).getAction().get(1);\r
106         Assert.assertEquals("Wrong action", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl",\r
107                 action2.getType().getName());\r
108         Assert.assertEquals("Wrong action", 5, action2.getAugmentation(MplsTtlAction.class).getMplsTtl().intValue());\r
109     }\r
110 \r
111 }\r