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;
9 import io.netty.buffer.ByteBuf;
10 import io.netty.buffer.UnpooledByteBufAllocator;
12 import java.util.ArrayList;
13 import java.util.List;
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.rev131002.ExperimenterIdMatchEntry;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntryBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
43 public class OF13SetFieldActionSerializerTest {
45 private SerializerRegistry registry;
46 @Mock OFSerializer<MatchEntries> serializerMock;
49 * Initialize registry and mock
52 public void startUp() {
53 MockitoAnnotations.initMocks(this);
54 registry = new SerializerRegistryImpl();
59 * Test identify ExperimenterClass serializer
63 OF13SetFieldActionSerializer ser = new OF13SetFieldActionSerializer();
64 ser.injectSerializerRegistry(registry);
65 ActionBuilder actionBuilder = new ActionBuilder();
66 long experimenterId = 12L;
67 ExperimenterIdMatchEntryBuilder expIdMatchBuilder = new ExperimenterIdMatchEntryBuilder();
68 expIdMatchBuilder.setExperimenter(new ExperimenterId(experimenterId));
69 MatchEntriesBuilder meb = new MatchEntriesBuilder();
70 meb.setOxmClass(ExperimenterClass.class);
71 meb.setOxmMatchField(OxmMatchFieldClass.class);
72 meb.addAugmentation(ExperimenterIdMatchEntry.class, expIdMatchBuilder.build());
73 List<MatchEntries> matchEntries = new ArrayList<>();
74 MatchEntries me = meb.build();
76 OxmFieldsActionBuilder oxmActBuilder = new OxmFieldsActionBuilder();
77 oxmActBuilder.setMatchEntries(matchEntries);
78 actionBuilder.addAugmentation(OxmFieldsAction.class, oxmActBuilder.build());
79 actionBuilder.setType(SetField.class);
80 MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
81 EncodeConstants.OF13_VERSION_ID, ExperimenterClass.class, OxmMatchFieldClass.class);
82 key.setExperimenterId(experimenterId);
83 registry.registerSerializer(key, serializerMock);
84 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
85 ser.serialize(actionBuilder.build(), out);
86 Mockito.verify(serializerMock, Mockito.times(1)).serialize((MatchEntries)Mockito.anyObject(), (ByteBuf)Mockito.anyObject());
87 int lenght = out.readableBytes();
88 Assert.assertEquals("Wrong - bad field code", ActionConstants.SET_FIELD_CODE, out.readUnsignedShort());
89 Assert.assertEquals("Wrong - bad lenght", lenght, out.readUnsignedShort());
92 private class OxmMatchFieldClass extends MatchField {
93 // only for testing purposes