+ @Test
+ public void testSlaveNewNetconfDataTreeServiceRequest() {
+ initializeMaster(List.of());
+ registerSlaveMountPoint();
+
+ ArgumentCaptor<NetconfDataTreeService> netconfCaptor = ArgumentCaptor.forClass(NetconfDataTreeService.class);
+ verify(mockMountPointBuilder).addService(eq(NetconfDataTreeService.class), netconfCaptor.capture());
+
+ final NetconfDataTreeService slaveNetconfService = netconfCaptor.getValue();
+ assertTrue(slaveNetconfService instanceof ProxyNetconfDataTreeService);
+
+ final YangInstanceIdentifier PATH = YangInstanceIdentifier.empty();
+ final LogicalDatastoreType STORE = LogicalDatastoreType.CONFIGURATION;
+ final ContainerNode NODE = Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(QName.create("", "cont")))
+ .build();
+
+ final FluentFuture<Optional<Object>> result = immediateFluentFuture(Optional.of(NODE));
+ doReturn(result).when(netconfService).get(PATH);
+ doReturn(result).when(netconfService).getConfig(PATH);
+ doReturn(emptyFluentFuture()).when(netconfService).commit();
+
+ slaveNetconfService.get(PATH);
+ slaveNetconfService.getConfig(PATH);
+ slaveNetconfService.lock();
+ slaveNetconfService.merge(STORE, PATH, NODE, Optional.empty());
+ slaveNetconfService.replace(STORE, PATH, NODE, Optional.empty());
+ slaveNetconfService.create(STORE, PATH, NODE, Optional.empty());
+ slaveNetconfService.delete(STORE, PATH);
+ slaveNetconfService.remove(STORE, PATH);
+ slaveNetconfService.discardChanges();
+ slaveNetconfService.commit();
+
+ verify(netconfService, timeout(1000)).get(PATH);
+ verify(netconfService, timeout(1000)).getConfig(PATH);
+ verify(netconfService, timeout(1000)).lock();
+ verify(netconfService, timeout(1000)).merge(STORE, PATH, NODE, Optional.empty());
+ verify(netconfService, timeout(1000)).replace(STORE, PATH, NODE, Optional.empty());
+ verify(netconfService, timeout(1000)).create(STORE, PATH, NODE, Optional.empty());
+ verify(netconfService, timeout(1000)).delete(STORE, PATH);
+ verify(netconfService, timeout(1000)).remove(STORE, PATH);
+ verify(netconfService, timeout(1000)).discardChanges();
+ verify(netconfService, timeout(1000)).commit();
+ }
+
+ private ActorRef registerSlaveMountPoint() {
+ SchemaResourcesDTO schemaResourceDTO2 = mock(SchemaResourcesDTO.class);
+ doReturn(mockRegistry).when(schemaResourceDTO2).getSchemaRegistry();
+ doReturn(mockSchemaRepository).when(schemaResourceDTO2).getSchemaRepository();
+ final ActorRef slaveRef = system.actorOf(NetconfNodeActor.props(
+ NetconfTopologySetupBuilder.create().setSchemaResourceDTO(schemaResourceDTO2).setActorSystem(system)
+ .setBaseSchemas(BASE_SCHEMAS).build(), remoteDeviceId, TIMEOUT, mockMountPointService));
+
+ doReturn(Futures.immediateFuture(mockSchemaContext))
+ .when(mockSchemaContextFactory).createEffectiveModelContext(anyCollection());
+
+ slaveRef.tell(new RegisterMountPoint(ImmutableList.of(SOURCE_IDENTIFIER1, SOURCE_IDENTIFIER2),
+ masterRef), testKit.getRef());
+
+ verify(mockMountPointBuilder, timeout(5000)).register();
+ verify(mockMountPointBuilder).addService(eq(DOMSchemaService.class), any());
+ verify(mockMountPointBuilder).addService(eq(DOMDataBroker.class), any());
+ verify(mockMountPointBuilder).addService(eq(NetconfDataTreeService.class), any());
+ verify(mockMountPointBuilder).addService(eq(DOMRpcService.class), any());
+ verify(mockMountPointBuilder).addService(eq(DOMNotificationService.class), any());
+
+ testKit.expectMsgClass(Success.class);
+ return slaveRef;
+ }
+
+ private void initializeMaster(final List<SourceIdentifier> sourceIdentifiers) {
+ masterRef.tell(new CreateInitialMasterActorData(mockDOMDataBroker, netconfService, sourceIdentifiers,
+ mockDOMRpcService, mockDOMActionService), testKit.getRef());
+ testKit.expectMsgClass(MasterActorDataInitialized.class);
+ }
+
+ private void resetMountPointMocks() {
+ reset(mockMountPointReg, mockMountPointBuilder);
+
+ doNothing().when(mockMountPointReg).close();
+
+ doReturn(mockMountPointBuilder).when(mockMountPointBuilder).addService(any(), any());
+ doReturn(mockMountPointReg).when(mockMountPointBuilder).register();
+ }
+
+ private static PotentialSchemaSource<?> withSourceId(final SourceIdentifier identifier) {
+ return argThat(argument -> identifier.equals(argument.getSourceIdentifier()));
+ }
+
+ private static String convertStreamToString(final InputStream is) {
+ try (Scanner scanner = new Scanner(is)) {
+ return scanner.useDelimiter("\\A").hasNext() ? scanner.next() : "";
+ }
+ }