X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Ftunnel%2Ftunnel-provider%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fbgpcep%2Fpcep%2Ftunnel%2Fprovider%2FTunnelProgrammingTest.java;h=9db478a5a9871cb7a584db648ff54f3888d86d2d;hb=0fdeddbe3d072a88428599421191f0f60b2864e4;hp=3a997a780e8ca0debbb883d92cfeb27e4dc23253;hpb=fdb5ffad3d5a38dda0a06db75631a2083e62ee6e;p=bgpcep.git diff --git a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java index 3a997a780e..9db478a5a9 100644 --- a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java +++ b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java @@ -5,7 +5,6 @@ * 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.bgpcep.pcep.tunnel.provider; import com.google.common.collect.Lists; @@ -23,11 +22,11 @@ import org.mockito.MockitoAnnotations; import org.opendaylight.bgpcep.programming.spi.Instruction; import org.opendaylight.bgpcep.programming.spi.InstructionScheduler; import org.opendaylight.bgpcep.programming.spi.SchedulerException; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcProviderService; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; @@ -35,40 +34,40 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.topology.rev140113.NetworkTopologyRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.AdministrativeStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcepCreateP2pTunnelInput1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcepCreateP2pTunnelInput1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcepUpdateTunnelInput1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcepUpdateTunnelInput1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4Case; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.AdministrativeStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepUpdateTunnelInput1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepUpdateTunnelInput1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ClassType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.Ipv4Case; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv4._case.Ipv4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.ero.Subobject; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.InstructionStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.SubmitInstructionInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.ip.prefix._case.IpPrefixBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.AddLspInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.AddLspOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.NetworkTopologyPcepService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.RemoveLspInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.RemoveLspOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.UpdateLspInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.UpdateLspOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.add.lsp.args.Arguments; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.AddLspInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.AddLspOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.NetworkTopologyPcepService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.RemoveLspInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.RemoveLspOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.UpdateLspInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.UpdateLspOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.add.lsp.args.Arguments; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHops; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHopsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepCreateP2pTunnelInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepDestroyTunnelInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepUpdateTunnelInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.ExplicitHops1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.ExplicitHops1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.SupportingNode1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.SupportingNode1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.tunnel.pcep.supporting.node.attributes.PathComputationClientBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepCreateP2pTunnelInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepDestroyTunnelInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepUpdateTunnelInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.ExplicitHops1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.ExplicitHops1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.tunnel.pcep.supporting.node.attributes.PathComputationClientBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.create.p2p.tunnel.input.DestinationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.create.p2p.tunnel.input.SourceBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId; @@ -96,6 +95,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.termination.point.attributes.igp.termination.point.attributes.termination.point.type.IpBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.Uint8; import org.osgi.framework.BundleContext; public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { @@ -128,7 +128,9 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { @Mock private ClusterSingletonServiceProvider cssp; @Mock - private RpcProviderRegistry rpr; + private RpcProviderService rpr; + @Mock + private RpcConsumerRegistry rpcs; @Mock private BundleContext bundleContext; @@ -148,7 +150,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { private static Node createNode(final NodeId nodeId, final TpId tpId, final String ipv4Address) { final TerminationPointBuilder tpBuilder = new TerminationPointBuilder(); tpBuilder.setTpId(tpId); - tpBuilder.setKey(new TerminationPointKey(tpId)); + tpBuilder.withKey(new TerminationPointKey(tpId)); tpBuilder.addAugmentation(TerminationPoint1.class, new TerminationPoint1Builder() .setIgpTerminationPointAttributes(new IgpTerminationPointAttributesBuilder() .setTerminationPointType(new IpBuilder() @@ -156,10 +158,10 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { .build()).build()).build()); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(nodeId); - nodeBuilder.setKey(new NodeKey(nodeId)); + nodeBuilder.withKey(new NodeKey(nodeId)); nodeBuilder.setTerminationPoint(Lists.newArrayList(tpBuilder.build())); final SupportingNode supportingNode = new SupportingNodeBuilder() - .setKey(new SupportingNodeKey(nodeId, new TopologyId("dummy"))) + .withKey(new SupportingNodeKey(nodeId, new TopologyId("dummy"))) .addAugmentation(SupportingNode1.class, new SupportingNode1Builder() .setPathComputationClient(new PathComputationClientBuilder() .setControlling(true).build()).build()).build(); @@ -176,41 +178,43 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { } @Before - public void setUp() throws SchedulerException, InterruptedException, ExecutionException, - TransactionCommitFailedException { + public void setUp() throws SchedulerException, InterruptedException, ExecutionException { MockitoAnnotations.initMocks(this); Mockito.doReturn(true).when(this.instruction).checkedExecutionStart(); Mockito.doNothing().when(this.instruction).executionCompleted(InstructionStatus.Failed, null); Mockito.doAnswer(invocation -> { - final Runnable callback = (Runnable) invocation.getArguments()[0]; + final Runnable callback = invocation.getArgument(0); callback.run(); return null; }).when(this.instructionFuture).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class)); + Mockito.doReturn(false).when(this.futureAddLspOutput).isCancelled(); Mockito.doAnswer(invocation -> { - final Runnable callback = (Runnable) invocation.getArguments()[0]; + final Runnable callback = invocation.getArgument(0); callback.run(); return null; }).when(this.futureAddLspOutput).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class)); + Mockito.doReturn(false).when(this.futureUpdateLspOutput).isCancelled(); Mockito.doAnswer(invocation -> { - final Runnable callback = (Runnable) invocation.getArguments()[0]; + final Runnable callback = invocation.getArgument(0); callback.run(); return null; }).when(this.futureUpdateLspOutput).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class)); + Mockito.doReturn(false).when(this.futureRemoveLspOutput).isCancelled(); Mockito.doAnswer(invocation -> { - final Runnable callback = (Runnable) invocation.getArguments()[0]; + final Runnable callback = invocation.getArgument(0); callback.run(); return null; }).when(this.futureRemoveLspOutput).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class)); Mockito.doAnswer(invocation -> { - TunnelProgrammingTest.this.addLspInput = (AddLspInput) invocation.getArguments()[0]; + TunnelProgrammingTest.this.addLspInput = invocation.getArgument(0); return TunnelProgrammingTest.this.futureAddLspOutput; }).when(this.topologyService).addLsp(Mockito.any(AddLspInput.class)); Mockito.doAnswer(invocation -> { - TunnelProgrammingTest.this.updateLspInput = (UpdateLspInput) invocation.getArguments()[0]; + TunnelProgrammingTest.this.updateLspInput = invocation.getArgument(0); return TunnelProgrammingTest.this.futureUpdateLspOutput; }).when(this.topologyService).updateLsp(Mockito.any(UpdateLspInput.class)); Mockito.doAnswer(invocation -> { - TunnelProgrammingTest.this.removeLspInput = (RemoveLspInput) invocation.getArguments()[0]; + TunnelProgrammingTest.this.removeLspInput = invocation.getArgument(0); return TunnelProgrammingTest.this.futureRemoveLspOutput; }).when(this.topologyService).removeLsp(Mockito.any(RemoveLspInput.class)); Mockito.doReturn(this.instruction).when(this.instructionFuture).get(); @@ -218,19 +222,19 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { Mockito.doReturn(this.instructionFuture).when(this.scheduler) .scheduleInstruction(Mockito.any(SubmitInstructionInput.class)); - Mockito.doReturn(this.topologyService).when(this.rpr) + Mockito.doReturn(this.topologyService).when(this.rpcs) .getRpcService(NetworkTopologyPcepService.class); createInitialTopology(); final TunnelProviderDependencies dependencies = new TunnelProviderDependencies(getDataBroker(), this.cssp, - this.rpr, this.bundleContext); + this.rpr, this.rpcs, this.bundleContext); this.tunnelProgramming = new TunnelProgramming(this.scheduler, dependencies); } @Test - public void testTunnelProgramming() throws TransactionCommitFailedException { - final Bandwidth bwd = new Bandwidth(new byte[]{0x00, 0x00, 0x00, (byte) 0xff}); - final ClassType classType = new ClassType((short) 1); + public void testTunnelProgramming() throws InterruptedException, ExecutionException { + final Bandwidth bwd = new Bandwidth(new byte[] { 0x00, 0x00, 0x00, (byte) 0xff }); + final ClassType classType = new ClassType(Uint8.ONE); final String tunnelName = "create-tunnel"; final NetworkTopologyRef topologyRef = new NetworkTopologyRef(TOPO_IID); // create tunnel @@ -241,7 +245,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { createInputBuilder.setBandwidth(bwd); createInputBuilder.setClassType(classType); createInputBuilder.setSymbolicPathName(tunnelName); - createInputBuilder.setExplicitHops(Lists.newArrayList()); + createInputBuilder.setExplicitHops(Collections.emptyList()); createInputBuilder.addAugmentation(PcepCreateP2pTunnelInput1.class, new PcepCreateP2pTunnelInput1Builder() .setAdministrativeStatus(AdministrativeStatus.Active).build()); this.tunnelProgramming.pcepCreateP2pTunnel(createInputBuilder.build()); @@ -272,7 +276,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { //check update-lsp input Assert.assertNotNull(this.updateLspInput); Assert.assertEquals(LINK1_ID.getValue(), this.updateLspInput.getName()); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.update.lsp + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.update.lsp .args.Arguments updArgs = this.updateLspInput.getArguments(); Assert.assertEquals(2, updArgs.getEro().getSubobject().size()); final List subObjects = updArgs.getEro().getSubobject(); @@ -291,31 +295,31 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { Assert.assertEquals(NODE1_ID.getValue(), this.removeLspInput.getNode().getValue()); } - private void createInitialTopology() throws TransactionCommitFailedException { + private void createInitialTopology() throws InterruptedException, ExecutionException { final TopologyBuilder topologyBuilder = new TopologyBuilder(); - topologyBuilder.setKey(new TopologyKey(TOPOLOGY_ID)); + topologyBuilder.withKey(new TopologyKey(TOPOLOGY_ID)); topologyBuilder.setServerProvided(true); topologyBuilder.setTopologyId(TOPOLOGY_ID); topologyBuilder.setNode(Lists.newArrayList(createNode(NODE1_ID, TP1_ID, NODE1_IPV4), createNode(NODE2_ID, TP2_ID, NODE2_IPV4))); final WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.OPERATIONAL, TOPO_IID, topologyBuilder.build(), true); - wTx.submit().checkedGet(); + wTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, TOPO_IID, topologyBuilder.build()); + wTx.commit().get(); } - private void createLink() throws TransactionCommitFailedException { + private void createLink() throws InterruptedException, ExecutionException { final LinkBuilder linkBuilder = new LinkBuilder(); linkBuilder.setSource(new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology .rev131021.link.attributes.SourceBuilder().setSourceNode(NODE1_ID).setSourceTp(TP1_ID).build()); linkBuilder.setDestination(new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology .rev131021.link.attributes.DestinationBuilder().setDestNode(NODE2_ID).setDestTp(TP2_ID).build()); linkBuilder.setLinkId(LINK1_ID); - linkBuilder.setKey(new LinkKey(LINK1_ID)); + linkBuilder.withKey(new LinkKey(LINK1_ID)); linkBuilder.addAugmentation(Link1.class, new Link1Builder().setSymbolicPathName(LINK1_ID.getValue()).build()); final WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.OPERATIONAL, TOPO_IID.builder().child(Link.class, new LinkKey(LINK1_ID)).build(), - linkBuilder.build(), true); - wTx.submit().checkedGet(); + wTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, + TOPO_IID.builder().child(Link.class, new LinkKey(LINK1_ID)).build(), linkBuilder.build()); + wTx.commit().get(); } }