use of org.apache.nifi.controller.service.ControllerServiceNode in project nifi by apache.
the class TestFlowController method testCreateMissingControllerService.
@Test
public void testCreateMissingControllerService() throws ProcessorInstantiationException {
final ControllerServiceNode serviceNode = controller.createControllerService("org.apache.nifi.NonExistingControllerService", "1234-Controller-Service", systemBundle.getBundleDetails().getCoordinate(), null, false);
assertNotNull(serviceNode);
assertEquals("org.apache.nifi.NonExistingControllerService", serviceNode.getCanonicalClassName());
assertEquals("(Missing) NonExistingControllerService", serviceNode.getComponentType());
final ControllerService service = serviceNode.getControllerServiceImplementation();
final PropertyDescriptor descriptor = service.getPropertyDescriptor("my descriptor");
assertNotNull(descriptor);
assertEquals("my descriptor", descriptor.getName());
assertTrue(descriptor.isRequired());
assertTrue(descriptor.isSensitive());
assertEquals("GhostControllerService[id=1234-Controller-Service, type=org.apache.nifi.NonExistingControllerService]", service.toString());
// just make sure that an Exception is not thrown
service.hashCode();
assertTrue(service.equals(service));
assertFalse(service.equals(serviceNode));
}
use of org.apache.nifi.controller.service.ControllerServiceNode in project nifi by apache.
the class TestFlowController method testSynchronizeFlowWithProcessorReferencingControllerService.
@Test
public void testSynchronizeFlowWithProcessorReferencingControllerService() throws IOException {
final FlowSynchronizer standardFlowSynchronizer = new StandardFlowSynchronizer(StringEncryptor.createEncryptor(nifiProperties), nifiProperties);
// create a mock proposed data flow with the same auth fingerprint as the current authorizer
final String authFingerprint = authorizer.getFingerprint();
final DataFlow proposedDataFlow = Mockito.mock(DataFlow.class);
when(proposedDataFlow.getAuthorizerFingerprint()).thenReturn(authFingerprint.getBytes(StandardCharsets.UTF_8));
final File flowFile = new File("src/test/resources/conf/processor-with-cs-flow-0.7.0.xml");
final String flow = IOUtils.toString(new FileInputStream(flowFile));
when(proposedDataFlow.getFlow()).thenReturn(flow.getBytes(StandardCharsets.UTF_8));
controller.synchronize(standardFlowSynchronizer, proposedDataFlow);
// should be two controller services
final Set<ControllerServiceNode> controllerServiceNodes = controller.getAllControllerServices();
assertNotNull(controllerServiceNodes);
assertEquals(1, controllerServiceNodes.size());
// find the controller service that was moved to the root group
final ControllerServiceNode rootGroupCs = controllerServiceNodes.stream().filter(c -> c.getProcessGroup() != null).findFirst().get();
assertNotNull(rootGroupCs);
// should be one processor
final Set<ProcessorNode> processorNodes = controller.getGroup(controller.getRootGroupId()).getProcessors();
assertNotNull(processorNodes);
assertEquals(1, processorNodes.size());
// verify the processor is still pointing at the controller service that got moved to the root group
final ProcessorNode processorNode = processorNodes.stream().findFirst().get();
final PropertyDescriptor procControllerServiceProp = processorNode.getProperties().entrySet().stream().filter(e -> e.getValue().equals(rootGroupCs.getIdentifier())).map(e -> e.getKey()).findFirst().get();
assertNotNull(procControllerServiceProp);
}
use of org.apache.nifi.controller.service.ControllerServiceNode in project nifi by apache.
the class TestFlowController method testDeleteProcessGroup.
@Test
public void testDeleteProcessGroup() {
ProcessGroup pg = controller.createProcessGroup("my-process-group");
pg.setName("my-process-group");
ControllerServiceNode cs = controller.createControllerService("org.apache.nifi.NonExistingControllerService", "my-controller-service", systemBundle.getBundleDetails().getCoordinate(), null, false);
pg.addControllerService(cs);
controller.getRootGroup().addProcessGroup(pg);
controller.getRootGroup().removeProcessGroup(pg);
pg.getControllerServices(true);
assertTrue(pg.getControllerServices(true).isEmpty());
}
use of org.apache.nifi.controller.service.ControllerServiceNode in project nifi by apache.
the class TestFlowController method testSynchronizeFlowWhenExistingMissingComponentsAreDifferent.
@Test
public void testSynchronizeFlowWhenExistingMissingComponentsAreDifferent() throws IOException {
final StringEncryptor stringEncryptor = StringEncryptor.createEncryptor(nifiProperties);
final FlowSynchronizer standardFlowSynchronizer = new StandardFlowSynchronizer(stringEncryptor, nifiProperties);
final ProcessorNode mockProcessorNode = mock(ProcessorNode.class);
when(mockProcessorNode.getIdentifier()).thenReturn("1");
when(mockProcessorNode.isExtensionMissing()).thenReturn(true);
final ControllerServiceNode mockControllerServiceNode = mock(ControllerServiceNode.class);
when(mockControllerServiceNode.getIdentifier()).thenReturn("2");
when(mockControllerServiceNode.isExtensionMissing()).thenReturn(true);
final ReportingTaskNode mockReportingTaskNode = mock(ReportingTaskNode.class);
when(mockReportingTaskNode.getIdentifier()).thenReturn("3");
when(mockReportingTaskNode.isExtensionMissing()).thenReturn(true);
final ProcessGroup mockRootGroup = mock(ProcessGroup.class);
when(mockRootGroup.findAllProcessors()).thenReturn(Collections.singletonList(mockProcessorNode));
final SnippetManager mockSnippetManager = mock(SnippetManager.class);
when(mockSnippetManager.export()).thenReturn(new byte[0]);
final FlowController mockFlowController = mock(FlowController.class);
when(mockFlowController.getRootGroup()).thenReturn(mockRootGroup);
when(mockFlowController.getAllControllerServices()).thenReturn(new HashSet<>(Arrays.asList(mockControllerServiceNode)));
when(mockFlowController.getAllReportingTasks()).thenReturn(new HashSet<>(Arrays.asList(mockReportingTaskNode)));
when(mockFlowController.getAuthorizer()).thenReturn(authorizer);
when(mockFlowController.getSnippetManager()).thenReturn(mockSnippetManager);
final DataFlow proposedDataFlow = Mockito.mock(DataFlow.class);
when(proposedDataFlow.getMissingComponents()).thenReturn(new HashSet<>());
try {
standardFlowSynchronizer.sync(mockFlowController, proposedDataFlow, stringEncryptor);
Assert.fail("Should have thrown exception");
} catch (UninheritableFlowException e) {
assertTrue(e.getMessage(), e.getMessage().contains("Current flow has missing components that are not considered missing in the proposed flow (1,2,3)"));
}
}
use of org.apache.nifi.controller.service.ControllerServiceNode in project nifi by apache.
the class LocalComponentLifecycle method determineEnablingOrder.
static List<List<ControllerServiceNode>> determineEnablingOrder(final Map<String, ControllerServiceNode> serviceNodeMap) {
final List<List<ControllerServiceNode>> orderedNodeLists = new ArrayList<>();
for (final ControllerServiceNode node : serviceNodeMap.values()) {
final List<ControllerServiceNode> branch = new ArrayList<>();
determineEnablingOrder(serviceNodeMap, node, branch, new HashSet<ControllerServiceNode>());
orderedNodeLists.add(branch);
}
return orderedNodeLists;
}
Aggregations