/*
* Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.openflowplugin.impl.services.multilayer;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import org.opendaylight.openflowplugin.extension.api.ConverterMessageToOFJava;
import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
import org.opendaylight.openflowplugin.impl.services.ServiceMocking;
import org.opendaylight.openflowplugin.impl.services.sal.SalExperimenterMpMessageServiceImpl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.experimenter.core.message.ExperimenterMessageOfChoice;
import org.opendaylight.yangtools.yang.binding.DataContainer;
public class SalExperimenterMpMessageServiceImplTest extends ServiceMocking {
private static final long DUMMY_ID = 42L;
private SalExperimenterMpMessageServiceImpl salExperimenterMpMessageService;
@Mock
private ExtensionConverterProvider mockedExtensionConverterProvider;
@Mock
private ConverterMessageToOFJava<ExperimenterMessageOfChoice, DataContainer> mockedExtensionConverter;
@Override
protected void setup() {
when(mockedExtensionConverterProvider.getMessageConverter(Matchers.<TypeVersionKey>any()))
.thenReturn(mockedExtensionConverter);
when(mockedExtensionConverter.getExperimenterId())
.thenReturn(new ExperimenterId(DUMMY_ID));
when(mockedExtensionConverter.getType())
.thenReturn((long) MultipartType.OFPMPEXPERIMENTER.getIntValue());
salExperimenterMpMessageService = new SalExperimenterMpMessageServiceImpl(
mockedRequestContextStack,
mockedDeviceContext,
mockedExtensionConverterProvider);
}
@Test
public void sendExperimenterMpRequest() throws Exception {
salExperimenterMpMessageService.sendExperimenterMpRequest(new SendExperimenterMpRequestInputBuilder()
.setExperimenterMessageOfChoice(new DummyExperimenter())
.setNode(new NodeRef(mockedDeviceInfo.getNodeInstanceIdentifier()))
.build());
verify(mockedRequestContextStack).createRequestContext();
}
@Test
public void buildRequest() throws Exception {
final SendExperimenterMpRequestInput data = new SendExperimenterMpRequestInputBuilder()
.setExperimenterMessageOfChoice(new DummyExperimenter())
.setNode(new NodeRef(mockedDeviceInfo.getNodeInstanceIdentifier()))
.build();
final OfHeader ofHeader = new MultiLayerExperimenterMultipartService(mockedDeviceContext, mockedDeviceContext, mockedExtensionConverterProvider)
.buildRequestTest(new Xid(DUMMY_ID), data);
verify(mockedExtensionConverter).convert(data.getExperimenterMessageOfChoice());
assertEquals(DUMMY_ID, (long) ofHeader.getXid());
assertEquals(mockedDeviceInfo.getVersion(), (short) ofHeader.getVersion());
assertEquals(MultipartRequestInput.class, ofHeader.getImplementedInterface());
final MultipartRequestInput input = MultipartRequestInput.class.cast(ofHeader);
assertEquals(MultipartRequestExperimenterCase.class, input.getMultipartRequestBody().getImplementedInterface());
final MultipartRequestExperimenter multipartRequestExperimenter =
MultipartRequestExperimenterCase.class.cast(input.getMultipartRequestBody())
.getMultipartRequestExperimenter();
assertEquals(DUMMY_ID, (long) multipartRequestExperimenter.getExperimenter().getValue());
assertEquals(MultipartType.OFPMPEXPERIMENTER.getIntValue(), (long) multipartRequestExperimenter.getExpType());
}
private static class DummyExperimenter implements ExperimenterMessageOfChoice {
@Override
public Class<? extends DataContainer> getImplementedInterface() {
return DummyExperimenter.class;
}
}
}