X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2Fmapping%2Foperations%2FDefaultCloseSessionTest.java;h=b45b116b1262cbc67879de52a49482e0f7b43128;hp=ae3d65646f4f1c1775ec0e1714c937c7543a6f88;hb=f9a9cd1ea40d2477ccb16b03c71a87595226595a;hpb=a2e47bbc56fc232c8d89568dede6f179bb490bc1 diff --git a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCloseSessionTest.java b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCloseSessionTest.java index ae3d65646f..b45b116b12 100644 --- a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCloseSessionTest.java +++ b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCloseSessionTest.java @@ -8,26 +8,67 @@ package org.opendaylight.controller.netconf.impl.mapping.operations; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.util.concurrent.GenericFutureListener; import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.api.NetconfTerminationReason; +import org.opendaylight.controller.netconf.impl.NetconfServerSession; +import org.opendaylight.controller.netconf.impl.NetconfServerSessionListener; +import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; public class DefaultCloseSessionTest { + @Test public void testDefaultCloseSession() throws Exception { AutoCloseable res = mock(AutoCloseable.class); doNothing().when(res).close(); - DefaultCloseSession session = new DefaultCloseSession("", res); + DefaultCloseSession close = new DefaultCloseSession("", res); Document doc = XmlUtil.newDocument(); XmlElement elem = XmlElement.fromDomElement(XmlUtil.readXmlToElement("")); - session.handleWithNoSubsequentOperations(doc, elem); + final Channel channel = mock(Channel.class); + doReturn("channel").when(channel).toString(); + doReturn(mock(ChannelFuture.class)).when(channel).close(); + + final ChannelFuture sendFuture = mock(ChannelFuture.class); + doAnswer(new Answer() { + @Override + public Object answer(final InvocationOnMock invocation) throws Throwable { + ((GenericFutureListener) invocation.getArguments()[0]).operationComplete(sendFuture); + return null; + } + }).when(sendFuture).addListener(any(GenericFutureListener.class)); + doReturn(sendFuture).when(channel).writeAndFlush(anyObject()); + final NetconfServerSessionListener listener = mock(NetconfServerSessionListener.class); + doNothing().when(listener).onSessionTerminated(any(NetconfServerSession.class), any(NetconfTerminationReason.class)); + final NetconfServerSession session = + new NetconfServerSession(listener, channel, 1L, + NetconfHelloMessageAdditionalHeader.fromString("[netconf;10.12.0.102:48528;ssh;;;;;;]")); + close.setNetconfSession(session); + close.handleWithNoSubsequentOperations(doc, elem); + // Fake close response to trigger delayed close + session.sendMessage(new NetconfMessage(XmlUtil.readXmlToDocument("\n" + + "\n" + + ""))); + verify(channel).close(); + verify(listener).onSessionTerminated(any(NetconfServerSession.class), any(NetconfTerminationReason.class)); } @Test(expected = NetconfDocumentedException.class)