2 * Copyright (c) 2014 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
8 package org.opendaylight.openflowjava.protocol.impl.serialization.action;
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;
40 * Unit tests for OF13SetFieldActionSerializer.
44 @RunWith(MockitoJUnitRunner.class)
45 public class OF13SetFieldActionSerializerTest {
47 private SerializerRegistry registry;
48 @Mock OFSerializer<MatchEntry> serializerMock;
51 * Initialize registry and mock.
54 public void startUp() {
55 registry = new SerializerRegistryImpl();
60 * Test identify ExperimenterClass serializer.
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();
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(),
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());
98 private interface OxmMatchFieldClass extends MatchField {
99 // only for testing purposes