blob: 18bc2a3dbdd785936a6daa85198b68d2e48eb415 [file] [log] [blame]
/*
* 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.lookup;
import org.apache.nifi.csv.CSVUtils;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
import org.junit.Test;
import java.io.IOException;
import java.util.Collections;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class TestSimpleCsvFileLookupService {
final static Optional<String> EMPTY_STRING = Optional.empty();
@Test
public void testSimpleCsvFileLookupService() throws InitializationException, LookupFailureException {
final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
final SimpleCsvFileLookupService service = new SimpleCsvFileLookupService();
runner.addControllerService("csv-file-lookup-service", service);
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FILE, "src/test/resources/test.csv");
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FORMAT, "RFC4180");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_KEY_COLUMN, "key");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_VALUE_COLUMN, "value");
runner.enableControllerService(service);
runner.assertValid(service);
final SimpleCsvFileLookupService lookupService =
(SimpleCsvFileLookupService) runner.getProcessContext()
.getControllerServiceLookup()
.getControllerService("csv-file-lookup-service");
assertThat(lookupService, instanceOf(LookupService.class));
final Optional<String> property1 = lookupService.lookup(Collections.singletonMap("key", "property.1"));
assertEquals(Optional.of("this is property 1"), property1);
final Optional<String> property2 = lookupService.lookup(Collections.singletonMap("key", "property.2"));
assertEquals(Optional.of("this is property 2"), property2);
final Optional<String> property3 = lookupService.lookup(Collections.singletonMap("key", "property.3"));
assertEquals(EMPTY_STRING, property3);
}
@Test
public void testSimpleCsvFileLookupServiceWithCharset() throws InitializationException, IOException, LookupFailureException {
final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
final SimpleCsvFileLookupService service = new SimpleCsvFileLookupService();
runner.addControllerService("csv-file-lookup-service", service);
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FILE, "src/test/resources/test_Windows-31J.csv");
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FORMAT, "RFC4180");
runner.setProperty(service, SimpleCsvFileLookupService.CHARSET, "Windows-31J");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_KEY_COLUMN, "key");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_VALUE_COLUMN, "value");
runner.enableControllerService(service);
runner.assertValid(service);
final Optional<String> property1 = service.lookup(Collections.singletonMap("key", "property.1"));
assertThat(property1.isPresent(), is(true));
assertThat(property1.get(), is("this is property \uff11"));
}
@Test
public void testSimpleCsvFileLookupServiceWithCustomSeparatorQuotedEscaped() throws InitializationException, LookupFailureException {
final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
final SimpleCsvFileLookupService service = new SimpleCsvFileLookupService();
runner.addControllerService("csv-file-lookup-service", service);
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FORMAT, "custom");
runner.setProperty(service, SimpleCsvFileLookupService.CSV_FILE, "src/test/resources/test_sep_escape_comment.csv");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_KEY_COLUMN, "key");
runner.setProperty(service, SimpleCsvFileLookupService.LOOKUP_VALUE_COLUMN, "value");
runner.setProperty(service, CSVUtils.VALUE_SEPARATOR, "|");
runner.setProperty(service, CSVUtils.QUOTE_CHAR, "\"");
runner.setProperty(service, CSVUtils.ESCAPE_CHAR, "%");
runner.setProperty(service, CSVUtils.COMMENT_MARKER, "#");
runner.setProperty(service, CSVUtils.QUOTE_MODE, CSVUtils.QUOTE_ALL);
runner.enableControllerService(service);
runner.assertValid(service);
final Optional<String> value = service.lookup(Collections.singletonMap("key", "my_key"));
assertEquals(Optional.of("my_value with an escaped |."), value);
}
@Test
public void testCacheIsClearedWhenDisableService() throws InitializationException {
final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
final CSVRecordLookupService service = new CSVRecordLookupService();
runner.addControllerService("csv-file-lookup-service", service);
runner.setProperty(service, CSVRecordLookupService.CSV_FILE, "src/test/resources/test.csv");
runner.setProperty(service, CSVRecordLookupService.CSV_FORMAT, "RFC4180");
runner.setProperty(service, CSVRecordLookupService.LOOKUP_KEY_COLUMN, "key");
runner.enableControllerService(service);
runner.assertValid(service);
assertTrue(service.isCaching());
runner.disableControllerService(service);
assertFalse(service.isCaching());
}
}