package com.thinkbiganalytics.nifi.v2.metadata; /*- * #%L * thinkbig-nifi-core-processors * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed 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. * #L% */ import com.thinkbiganalytics.metadata.api.feed.FeedProperties; import com.thinkbiganalytics.nifi.core.api.metadata.KyloNiFiFlowProvider; import com.thinkbiganalytics.nifi.core.api.metadata.MetadataProvider; import com.thinkbiganalytics.nifi.core.api.metadata.MetadataProviderService; import com.thinkbiganalytics.nifi.core.api.metadata.MetadataRecorder; import org.apache.nifi.controller.AbstractControllerService; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import java.util.Properties; /** */ public class PutFeedMetadataTest { private static final String METADATA_SERVICE_IDENTIFIER = "MockMetadataProviderService"; private final TestRunner runner = TestRunners.newTestRunner(PutFeedMetadata.class); @Before public void setUp() throws Exception { // Setup services final MetadataProviderService metadataService = new MockMetadataProviderService(); // Setup test runner runner.addControllerService(METADATA_SERVICE_IDENTIFIER, metadataService); runner.enableControllerService(metadataService); runner.setProperty(TriggerCleanup.METADATA_SERVICE, METADATA_SERVICE_IDENTIFIER); } @Test public void testValidationPasses() { runner.setProperty(PutFeedMetadata.CATEGORY_NAME, "cat"); runner.setProperty(PutFeedMetadata.FEED_NAME, "feed"); runner.setProperty(PutFeedMetadata.NAMESPACE, "registration"); runner.setProperty("testProperty1", "myValue1"); runner.setProperty("testProperty2", "myValue2"); runner.run(); } @Test(expected = AssertionError.class) public void testValidationFailsForInvalidCharacterInFieldName() { runner.setProperty(PutFeedMetadata.CATEGORY_NAME, "cat"); runner.setProperty(PutFeedMetadata.FEED_NAME, "feed"); runner.setProperty(PutFeedMetadata.NAMESPACE, "registration"); runner.setProperty("$testProperty1", "myValue1"); runner.run(); } private static class MockMetadataProviderService extends AbstractControllerService implements MetadataProviderService { @Override public MetadataProvider getProvider() { final MetadataProvider provider = Mockito.mock(MetadataProvider.class); Mockito.when(provider.getFeedId(Mockito.anyString(), Mockito.anyString())).then(invocation -> { if ("invalid".equals(invocation.getArgumentAt(0, String.class))) { throw new IllegalArgumentException(); } return invocation.getArgumentAt(1, String.class); }); Mockito.when(provider.updateFeedProperties(Mockito.anyString(), Mockito.any(Properties.class))).then(invocation -> { Properties properties = new Properties(); properties.setProperty("TestUpdate", "worked"); return properties; }); Mockito.when(provider.getFeedProperties(Mockito.anyString())).then(invocation -> { final String feedId = invocation.getArgumentAt(0, String.class); if ("disabled".equals(feedId)) { return new Properties(); } if ("unavailable".equals(feedId)) { return null; } Properties properties = new Properties(); properties.setProperty(FeedProperties.CLEANUP_ENABLED, "true"); return properties; }); return provider; } @Override public KyloNiFiFlowProvider getKyloNiFiFlowProvider() { return null; } @Override public MetadataRecorder getRecorder() { return null; } } }