Convert ProxyDOMDataBroker tx creation to async
[netconf.git] / netconf / netconf-topology-singleton / src / test / java / org / opendaylight / netconf / topology / singleton / impl / actors / WriteTransactionActorTestAdapter.java
1 /*
2  * Copyright (c) 2018 Inocybe Technologies 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.netconf.topology.singleton.impl.actors;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.mockito.Mockito.timeout;
12 import static org.mockito.Mockito.verify;
13 import static org.mockito.Mockito.when;
14 import static org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActorTestAdapter.NODE;
15 import static org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActorTestAdapter.PATH;
16 import static org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActorTestAdapter.STORE;
17 import static org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActorTestAdapter.TIMEOUT;
18
19 import akka.actor.ActorRef;
20 import akka.actor.ActorSystem;
21 import akka.actor.Status.Failure;
22 import akka.actor.Status.Success;
23 import akka.testkit.TestProbe;
24 import com.google.common.util.concurrent.Futures;
25 import org.junit.Test;
26 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
27 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
28 import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage;
29 import org.opendaylight.netconf.topology.singleton.messages.transactions.CancelRequest;
30 import org.opendaylight.netconf.topology.singleton.messages.transactions.DeleteRequest;
31 import org.opendaylight.netconf.topology.singleton.messages.transactions.MergeRequest;
32 import org.opendaylight.netconf.topology.singleton.messages.transactions.PutRequest;
33 import org.opendaylight.netconf.topology.singleton.messages.transactions.SubmitRequest;
34 import org.opendaylight.yangtools.yang.common.RpcError;
35 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
36
37 /**
38  * Adapter for write transaction tests.
39  *
40  * @author Thomas Pantelis
41  */
42 public abstract class WriteTransactionActorTestAdapter {
43     private DOMDataWriteTransaction mockWriteTx;
44     private TestProbe probe;
45     private ActorRef actorRef;
46     private ActorSystem system;
47
48     public void init(DOMDataWriteTransaction inMockWriteTx, ActorSystem inSystem, ActorRef inActorRef) {
49         this.mockWriteTx = inMockWriteTx;
50         this.probe = TestProbe.apply(inSystem);
51         this.actorRef = inActorRef;
52         this.system = inSystem;
53     }
54
55     @Test
56     public void testPut() {
57         final NormalizedNodeMessage normalizedNodeMessage = new NormalizedNodeMessage(PATH, NODE);
58         actorRef.tell(new PutRequest(STORE, normalizedNodeMessage), probe.ref());
59         verify(mockWriteTx).put(STORE, PATH, NODE);
60     }
61
62     @Test
63     public void testMerge() {
64         final NormalizedNodeMessage normalizedNodeMessage = new NormalizedNodeMessage(PATH, NODE);
65         actorRef.tell(new MergeRequest(STORE, normalizedNodeMessage), probe.ref());
66         verify(mockWriteTx).merge(STORE, PATH, NODE);
67     }
68
69     @Test
70     public void testDelete() {
71         actorRef.tell(new DeleteRequest(STORE, PATH), probe.ref());
72         verify(mockWriteTx).delete(STORE, PATH);
73     }
74
75     @Test
76     public void testCancel() throws Exception {
77         when(mockWriteTx.cancel()).thenReturn(true);
78         actorRef.tell(new CancelRequest(), probe.ref());
79
80         verify(mockWriteTx).cancel();
81         probe.expectMsg(true);
82     }
83
84     @Test
85     public void testSubmit() throws Exception {
86         when(mockWriteTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
87         actorRef.tell(new SubmitRequest(), probe.ref());
88
89         verify(mockWriteTx).submit();
90         probe.expectMsgClass(Success.class);
91     }
92
93     @Test
94     public void testSubmitFail() throws Exception {
95         final RpcError rpcError =
96                 RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, "fail", "fail");
97         final TransactionCommitFailedException cause = new TransactionCommitFailedException("fail", rpcError);
98         when(mockWriteTx.submit()).thenReturn(Futures.immediateFailedCheckedFuture(cause));
99         actorRef.tell(new SubmitRequest(), probe.ref());
100
101         verify(mockWriteTx).submit();
102         final Failure response = probe.expectMsgClass(Failure.class);
103         assertEquals(cause, response.cause());
104     }
105
106     @Test
107     public void testIdleTimeout() throws Exception {
108         final TestProbe testProbe = new TestProbe(system);
109         testProbe.watch(actorRef);
110         verify(mockWriteTx, timeout(3000)).cancel();
111         testProbe.expectTerminated(actorRef, TIMEOUT.duration());
112     }
113 }