eefc3d959847f905763c39e0605a45a63d5f8617
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / action / OF13SetFieldActionSerializerTest.java
1 /*
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowjava.protocol.impl.serialization.action;
9
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.UnpooledByteBufAllocator;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.mockito.Mock;
19 import org.mockito.Mockito;
20 import org.mockito.junit.MockitoJUnitRunner;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
22 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
23 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
24 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
25 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
26 import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.experimenter.id.match.entry.ExperimenterIdCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.experimenter.id.match.entry.experimenter.id._case.ExperimenterBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ExperimenterClass;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
37 import org.opendaylight.yangtools.yang.common.Uint32;
38
39 /**
40  * Unit tests for OF13SetFieldActionSerializer.
41  *
42  * @author madamjak
43  */
44 @RunWith(MockitoJUnitRunner.class)
45 public class OF13SetFieldActionSerializerTest {
46
47     private SerializerRegistry registry;
48     @Mock OFSerializer<MatchEntry> serializerMock;
49
50     /**
51      * Initialize registry and mock.
52      */
53     @Before
54     public void startUp() {
55         registry = new SerializerRegistryImpl();
56         registry.init();
57     }
58
59     /**
60      * Test identify ExperimenterClass serializer.
61      */
62     @Test
63     public void test() {
64         OF13SetFieldActionSerializer ser = new OF13SetFieldActionSerializer();
65         ser.injectSerializerRegistry(registry);
66         final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping
67             .ActionBuilder actionBuilder = new ActionBuilder();
68         final Uint32 experimenterId = Uint32.valueOf(12L);
69         ExperimenterIdCaseBuilder expCaseBuilder = new ExperimenterIdCaseBuilder();
70         ExperimenterBuilder expBuilder = new ExperimenterBuilder();
71         expBuilder.setExperimenter(new ExperimenterId(experimenterId));
72         expCaseBuilder.setExperimenter(expBuilder.build());
73         MatchEntryBuilder meb = new MatchEntryBuilder();
74         meb.setOxmClass(ExperimenterClass.class);
75         meb.setOxmMatchField(OxmMatchFieldClass.class);
76         meb.setMatchEntryValue(expCaseBuilder.build());
77         List<MatchEntry> matchEntry = new ArrayList<>();
78         MatchEntry me = meb.build();
79         matchEntry.add(me);
80         SetFieldCaseBuilder caseBuilder = new SetFieldCaseBuilder();
81         SetFieldActionBuilder setFieldBuilder = new SetFieldActionBuilder();
82         setFieldBuilder.setMatchEntry(matchEntry);
83         caseBuilder.setSetFieldAction(setFieldBuilder.build());
84         actionBuilder.setActionChoice(caseBuilder.build());
85         MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
86                 EncodeConstants.OF_VERSION_1_3, ExperimenterClass.class, OxmMatchFieldClass.class);
87         key.setExperimenterId(experimenterId);
88         registry.registerSerializer(key, serializerMock);
89         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
90         ser.serialize(actionBuilder.build(), out);
91         Mockito.verify(serializerMock, Mockito.times(1)).serialize(Mockito.anyObject(),
92             Mockito.anyObject());
93         int lenght = out.readableBytes();
94         Assert.assertEquals("Wrong - bad field code", ActionConstants.SET_FIELD_CODE, out.readUnsignedShort());
95         Assert.assertEquals("Wrong - bad lenght", lenght, out.readUnsignedShort());
96     }
97
98     private interface OxmMatchFieldClass extends MatchField {
99         // only for testing purposes
100     }
101 }