This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 9783ddd9ec NIFI-15492 Expanded unit test for RingBufferEventRepository
9783ddd9ec is described below
commit 9783ddd9ec895e5bb1cee59b61e1d336d60d8ead
Author: exceptionfactory <[email protected]>
AuthorDate: Wed Jan 21 21:54:22 2026 -0600
NIFI-15492 Expanded unit test for RingBufferEventRepository
This closes #10795.
Signed-off-by: Pierre Villard <[email protected]>
---
.../repository/TestRingBufferEventRepository.java | 230 +++++++--------------
1 file changed, 71 insertions(+), 159 deletions(-)
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/controller/repository/TestRingBufferEventRepository.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/controller/repository/TestRingBufferEventRepository.java
index 89312257dc..710b2e18fb 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/controller/repository/TestRingBufferEventRepository.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/test/java/org/apache/nifi/controller/repository/TestRingBufferEventRepository.java
@@ -17,180 +17,92 @@
package org.apache.nifi.controller.repository;
import org.apache.nifi.controller.repository.metrics.RingBufferEventRepository;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
-import java.util.Collections;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-public class TestRingBufferEventRepository {
+class TestRingBufferEventRepository {
+
+ private static final String FIRST_COMPONENT_ID = "component-1";
+ private static final String SECOND_COMPONENT_ID = "component-2";
+
+ private final RingBufferEventRepository repository = new
RingBufferEventRepository(1);
+
+ @AfterEach
+ void closeRepository() throws IOException {
+ repository.close();
+ }
@Test
- public void testAdd() throws IOException {
- final RingBufferEventRepository repo = new
RingBufferEventRepository(5);
- long insertNanos = 0L;
- for (int i = 0; i < 1000000; i++) {
- final FlowFileEvent event = generateEvent();
-
- final long insertStart = System.nanoTime();
- repo.updateRepository(event, "ABC");
- insertNanos += System.nanoTime() - insertStart;
- }
-
- final long queryStart = System.nanoTime();
- final StandardRepositoryStatusReport report =
repo.reportTransferEvents(System.currentTimeMillis());
- final long queryNanos = System.nanoTime() - queryStart;
+ void testReportTransferEvents() {
+ final FlowFileEvent event = getFlowFileEvent();
+ repository.updateRepository(event, FIRST_COMPONENT_ID);
+
+ final StandardRepositoryStatusReport report =
repository.reportTransferEvents(System.currentTimeMillis());
assertNotNull(report);
- assertTrue(TimeUnit.MILLISECONDS.convert(insertNanos,
TimeUnit.NANOSECONDS) > 0L);
- assertTrue(TimeUnit.MILLISECONDS.convert(queryNanos,
TimeUnit.NANOSECONDS) >= 0L);
- repo.close();
+ final FlowFileEvent reportEntry =
report.getReportEntry(FIRST_COMPONENT_ID);
+ assertNotNull(reportEntry);
+ assertEquals(event.getFlowFilesIn(), reportEntry.getFlowFilesIn());
+ }
+
+ @Test
+ void testReportTransferEventsForComponentId() {
+ final FlowFileEvent event = getFlowFileEvent();
+ repository.updateRepository(event, FIRST_COMPONENT_ID);
+
+ final FlowFileEvent reportEvent =
repository.reportTransferEvents(FIRST_COMPONENT_ID, System.currentTimeMillis());
+ assertNotNull(reportEvent);
+ assertEquals(event.getFlowFilesIn(), reportEvent.getFlowFilesIn());
}
@Test
- public void testPurge() throws IOException {
- final FlowFileEventRepository repo = new RingBufferEventRepository(5);
- String id1 = "component1";
- String id2 = "component2";
- repo.updateRepository(generateEvent(), id1);
- repo.updateRepository(generateEvent(), id2);
- RepositoryStatusReport report =
repo.reportTransferEvents(System.currentTimeMillis());
- FlowFileEvent entry = report.getReportEntry(id1);
- assertNotNull(entry);
- entry = report.getReportEntry(id2);
- assertNotNull(entry);
-
- repo.purgeTransferEvents(id1);
- report = repo.reportTransferEvents(System.currentTimeMillis());
- entry = report.getReportEntry(id1);
- assertNull(entry);
- entry = report.getReportEntry(id2);
- assertNotNull(entry);
-
- repo.purgeTransferEvents(id2);
- report = repo.reportTransferEvents(System.currentTimeMillis());
- entry = report.getReportEntry(id2);
- assertNull(entry);
-
- repo.close();
+ void testPurgeTransferEvents() {
+ final FlowFileEvent firstEvent = getFlowFileEvent();
+ final FlowFileEvent secondEvent = getFlowFileEvent();
+
+ repository.updateRepository(firstEvent, FIRST_COMPONENT_ID);
+ repository.updateRepository(secondEvent, SECOND_COMPONENT_ID);
+
+ final RepositoryStatusReport report =
repository.reportTransferEvents(System.currentTimeMillis());
+ final FlowFileEvent firstReportEntry =
report.getReportEntry(FIRST_COMPONENT_ID);
+ assertNotNull(firstReportEntry);
+ final FlowFileEvent secondReportEntry =
report.getReportEntry(SECOND_COMPONENT_ID);
+ assertNotNull(secondReportEntry);
+
+ repository.purgeTransferEvents(FIRST_COMPONENT_ID);
+ final RepositoryStatusReport firstReportPurged =
repository.reportTransferEvents(System.currentTimeMillis());
+ assertNull(firstReportPurged.getReportEntry(FIRST_COMPONENT_ID));
+ assertNotNull(firstReportPurged.getReportEntry(SECOND_COMPONENT_ID));
+
+ repository.purgeTransferEvents(SECOND_COMPONENT_ID);
+ final RepositoryStatusReport secondReportPurged =
repository.reportTransferEvents(System.currentTimeMillis());
+ assertNull(secondReportPurged.getReportEntry(SECOND_COMPONENT_ID));
+ }
+
+ @Test
+ void testReportAggregateEvent() {
+ final FlowFileEvent firstEvent = getFlowFileEvent();
+ final FlowFileEvent secondEvent = getFlowFileEvent();
+
+ repository.updateRepository(firstEvent, FIRST_COMPONENT_ID);
+ repository.updateRepository(secondEvent, SECOND_COMPONENT_ID);
+
+ final int totalFlowFilesIn = firstEvent.getFlowFilesIn() +
secondEvent.getFlowFilesIn();
+ final FlowFileEvent aggregateEvent = repository.reportAggregateEvent();
+ assertEquals(totalFlowFilesIn, aggregateEvent.getFlowFilesIn());
}
- private FlowFileEvent generateEvent() {
- return new FlowFileEvent() {
- @Override
- public int getFlowFilesIn() {
- return 1;
- }
-
- @Override
- public int getFlowFilesOut() {
- return 1;
- }
-
- @Override
- public long getContentSizeIn() {
- return 1024L;
- }
-
- @Override
- public long getContentSizeOut() {
- return 1024 * 1024L;
- }
-
- @Override
- public long getBytesRead() {
- return 1024L;
- }
-
- @Override
- public long getBytesWritten() {
- return 1024L * 1024L;
- }
-
- @Override
- public long getContentSizeRemoved() {
- return 1024;
- }
-
- @Override
- public int getFlowFilesRemoved() {
- return 1;
- }
-
- @Override
- public long getProcessingNanoseconds() {
- return 234782;
- }
-
- @Override
- public long getCpuNanoseconds() {
- return 0;
- }
-
- @Override
- public long getContentReadNanoseconds() {
- return 0;
- }
-
- @Override
- public long getContentWriteNanoseconds() {
- return 0;
- }
-
- @Override
- public long getSessionCommitNanoseconds() {
- return 0;
- }
-
- @Override
- public long getGargeCollectionMillis() {
- return 0;
- }
-
- @Override
- public int getInvocations() {
- return 1;
- }
-
- @Override
- public long getAggregateLineageMillis() {
- return 783L;
- }
-
- @Override
- public long getAverageLineageMillis() {
- return getAggregateLineageMillis() / (getFlowFilesRemoved() +
getFlowFilesOut());
- }
-
- @Override
- public int getFlowFilesReceived() {
- return 0;
- }
-
- @Override
- public long getBytesReceived() {
- return 0;
- }
-
- @Override
- public int getFlowFilesSent() {
- return 0;
- }
-
- @Override
- public long getBytesSent() {
- return 0;
- }
-
- @Override
- public Map<String, Long> getCounters() {
- return Collections.emptyMap();
- }
- };
+ private FlowFileEvent getFlowFileEvent() {
+ final FlowFileEvent flowFileEvent = mock(FlowFileEvent.class);
+ when(flowFileEvent.getFlowFilesIn()).thenReturn(1);
+ return flowFileEvent;
}
}