/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.nifi.processors.standard; import org.apache.nifi.reporting.InitializationException; import org.apache.nifi.serialization.record.MockRecordParser; import org.apache.nifi.serialization.record.MockRecordWriter; import org.apache.nifi.serialization.record.RecordFieldType; import org.apache.nifi.util.MockFlowFile; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; import org.junit.Test; import static org.junit.Assert.assertTrue; public class TestConvertRecord { @Test public void testSuccessfulConversion() throws InitializationException { final MockRecordParser readerService = new MockRecordParser(); final MockRecordWriter writerService = new MockRecordWriter("header", false); final TestRunner runner = TestRunners.newTestRunner(ConvertRecord.class); runner.addControllerService("reader", readerService); runner.enableControllerService(readerService); runner.addControllerService("writer", writerService); runner.enableControllerService(writerService); runner.setProperty(ConvertRecord.RECORD_READER, "reader"); runner.setProperty(ConvertRecord.RECORD_WRITER, "writer"); readerService.addSchemaField("name", RecordFieldType.STRING); readerService.addSchemaField("age", RecordFieldType.INT); readerService.addRecord("John Doe", 48); readerService.addRecord("Jane Doe", 47); readerService.addRecord("Jimmy Doe", 14); runner.enqueue(""); runner.run(); runner.assertAllFlowFilesTransferred(ConvertRecord.REL_SUCCESS, 1); final MockFlowFile out = runner.getFlowFilesForRelationship(ConvertRecord.REL_SUCCESS).get(0); out.assertAttributeEquals("record.count", "3"); out.assertAttributeEquals("mime.type", "text/plain"); out.assertContentEquals("header\nJohn Doe,48\nJane Doe,47\nJimmy Doe,14\n"); } @Test public void testReadFailure() throws InitializationException { final MockRecordParser readerService = new MockRecordParser(2); final MockRecordWriter writerService = new MockRecordWriter("header", false); final TestRunner runner = TestRunners.newTestRunner(ConvertRecord.class); runner.addControllerService("reader", readerService); runner.enableControllerService(readerService); runner.addControllerService("writer", writerService); runner.enableControllerService(writerService); runner.setProperty(ConvertRecord.RECORD_READER, "reader"); runner.setProperty(ConvertRecord.RECORD_WRITER, "writer"); readerService.addSchemaField("name", RecordFieldType.STRING); readerService.addSchemaField("age", RecordFieldType.INT); readerService.addRecord("John Doe", 48); readerService.addRecord("Jane Doe", 47); readerService.addRecord("Jimmy Doe", 14); final MockFlowFile original = runner.enqueue("hello"); runner.run(); // Original FlowFile should be routed to 'failure' relationship without modification runner.assertAllFlowFilesTransferred(ConvertRecord.REL_FAILURE, 1); final MockFlowFile out = runner.getFlowFilesForRelationship(ConvertRecord.REL_FAILURE).get(0); assertTrue(original == out); } @Test public void testWriteFailure() throws InitializationException { final MockRecordParser readerService = new MockRecordParser(); final MockRecordWriter writerService = new MockRecordWriter("header", false, 2); final TestRunner runner = TestRunners.newTestRunner(ConvertRecord.class); runner.addControllerService("reader", readerService); runner.enableControllerService(readerService); runner.addControllerService("writer", writerService); runner.enableControllerService(writerService); runner.setProperty(ConvertRecord.RECORD_READER, "reader"); runner.setProperty(ConvertRecord.RECORD_WRITER, "writer"); readerService.addSchemaField("name", RecordFieldType.STRING); readerService.addSchemaField("age", RecordFieldType.INT); readerService.addRecord("John Doe", 48); readerService.addRecord("Jane Doe", 47); readerService.addRecord("Jimmy Doe", 14); final MockFlowFile original = runner.enqueue("hello"); runner.run(); // Original FlowFile should be routed to 'failure' relationship without modification runner.assertAllFlowFilesTransferred(ConvertRecord.REL_FAILURE, 1); final MockFlowFile out = runner.getFlowFilesForRelationship(ConvertRecord.REL_FAILURE).get(0); assertTrue(original == out); } }