Bug 2756 - Action model update
[openflowjava.git] / 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 import io.netty.buffer.ByteBuf;
10 import io.netty.buffer.UnpooledByteBufAllocator;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mock;
19 import org.mockito.Mockito;
20 import org.mockito.MockitoAnnotations;
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.oxm.container.match.entry.value.ExperimenterIdCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.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
38 /**
39  * @author madamjak
40  *
41  */
42 public class OF13SetFieldActionSerializerTest {
43
44     private SerializerRegistry registry;
45     @Mock OFSerializer<MatchEntry> serializerMock;
46
47     /**
48      * Initialize registry and mock
49      */
50     @Before
51     public void startUp() {
52         MockitoAnnotations.initMocks(this);
53         registry = new SerializerRegistryImpl();
54         registry.init();
55     }
56
57     /**
58      * Test identify ExperimenterClass serializer
59      */
60     @Test
61     public void test(){
62         OF13SetFieldActionSerializer ser = new OF13SetFieldActionSerializer();
63         ser.injectSerializerRegistry(registry);
64         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder actionBuilder = new ActionBuilder();
65         long experimenterId = 12L;
66         ExperimenterIdCaseBuilder expCaseBuilder = new ExperimenterIdCaseBuilder();
67         ExperimenterBuilder expBuilder = new ExperimenterBuilder();
68         expBuilder.setExperimenter(new ExperimenterId(experimenterId));
69         expCaseBuilder.setExperimenter(expBuilder.build());
70         MatchEntryBuilder meb = new MatchEntryBuilder();
71         meb.setOxmClass(ExperimenterClass.class);
72         meb.setOxmMatchField(OxmMatchFieldClass.class);
73         meb.setMatchEntryValue(expCaseBuilder.build());
74         List<MatchEntry> matchEntry = new ArrayList<>();
75         MatchEntry me = meb.build();
76         matchEntry.add(me);
77         SetFieldCaseBuilder caseBuilder = new SetFieldCaseBuilder();
78         SetFieldActionBuilder setFieldBuilder = new SetFieldActionBuilder();
79         setFieldBuilder.setMatchEntry(matchEntry);
80         caseBuilder.setSetFieldAction(setFieldBuilder.build());
81         actionBuilder.setActionChoice(caseBuilder.build());
82         MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
83                 EncodeConstants.OF13_VERSION_ID, ExperimenterClass.class, OxmMatchFieldClass.class);
84         key.setExperimenterId(experimenterId);
85         registry.registerSerializer(key, serializerMock);
86         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
87         ser.serialize(actionBuilder.build(), out);
88         Mockito.verify(serializerMock, Mockito.times(1)).serialize((MatchEntry)Mockito.anyObject(), (ByteBuf)Mockito.anyObject());
89         int lenght = out.readableBytes();
90         Assert.assertEquals("Wrong - bad field code", ActionConstants.SET_FIELD_CODE, out.readUnsignedShort());
91         Assert.assertEquals("Wrong - bad lenght", lenght, out.readUnsignedShort());
92     }
93
94     private class OxmMatchFieldClass extends MatchField {
95         // only for testing purposes
96     }
97 }