Repository: nifi Updated Branches: refs/heads/master 463dcd881 -> 9217e2fc6
NIFI-4619: Enable expression language on AWSCredentialsProviderControllerService properties Signed-off-by: James Wing <[email protected]> This closes #2344. Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/9217e2fc Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/9217e2fc Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/9217e2fc Branch: refs/heads/master Commit: 9217e2fc6386e3d9ce665a183b6c0127ead67baf Parents: 463dcd8 Author: Marco Gaido <[email protected]> Authored: Fri Dec 15 11:06:13 2017 +0100 Committer: James Wing <[email protected]> Committed: Sun Dec 17 12:51:34 2017 -0800 ---------------------------------------------------------------------- ...AWSCredentialsProviderControllerService.java | 8 +++- ...redentialsProviderControllerServiceTest.java | 43 +++++++++++++++----- 2 files changed, 39 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/9217e2fc/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java index 189dac5..a5f4e04 100644 --- a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java +++ b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java @@ -105,7 +105,13 @@ public class AWSCredentialsProviderControllerService extends AbstractControllerS @OnEnabled public void onConfigured(final ConfigurationContext context) throws InitializationException { final Map<PropertyDescriptor, String> properties = context.getProperties(); - credentialsProvider = credentialsProviderFactory.getCredentialsProvider(context.getProperties()); + properties.keySet().forEach(propertyDescriptor -> { + if (propertyDescriptor.isExpressionLanguageSupported()) { + properties.put(propertyDescriptor, + context.getProperty(propertyDescriptor).evaluateAttributeExpressions().getValue()); + } + }); + credentialsProvider = credentialsProviderFactory.getCredentialsProvider(properties); getLogger().debug("Using credentials provider: " + credentialsProvider.getClass()); } http://git-wip-us.apache.org/repos/asf/nifi/blob/9217e2fc/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerServiceTest.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerServiceTest.java b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerServiceTest.java index 63c3ce9..86c4154 100644 --- a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerServiceTest.java +++ b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerServiceTest.java @@ -19,6 +19,7 @@ package org.apache.nifi.processors.aws.credentials.provider.service; import static org.junit.Assert.assertEquals; import org.apache.nifi.processors.aws.AbstractAWSProcessor; +import org.apache.nifi.processors.aws.credentials.provider.factory.CredentialPropertyDescriptors; import org.apache.nifi.processors.aws.s3.FetchS3Object; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; @@ -222,7 +223,7 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.CREDENTIALS_FILE, + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.CREDENTIALS_FILE, "src/test/resources/mock-aws-credentials.properties"); runner.enableControllerService(serviceImpl); @@ -241,7 +242,7 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.CREDENTIALS_FILE, + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.CREDENTIALS_FILE, "src/test/resources/bad-mock-aws-credentials.properties"); runner.enableControllerService(serviceImpl); @@ -253,10 +254,10 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.CREDENTIALS_FILE, + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.CREDENTIALS_FILE, "src/test/resources/mock-aws-credentials.properties"); - runner.setProperty(serviceImpl, AbstractAWSProcessor.ACCESS_KEY, "awsAccessKey"); - runner.setProperty(serviceImpl, AbstractAWSProcessor.SECRET_KEY, "awsSecretKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.ACCESS_KEY, "awsAccessKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.SECRET_KEY, "awsSecretKey"); runner.enableControllerService(serviceImpl); runner.assertNotValid(serviceImpl); @@ -267,9 +268,9 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.CREDENTIALS_FILE, + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.CREDENTIALS_FILE, "src/test/resources/mock-aws-credentials.properties"); - runner.setProperty(serviceImpl, AbstractAWSProcessor.ACCESS_KEY, "awsAccessKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.ACCESS_KEY, "awsAccessKey"); runner.enableControllerService(serviceImpl); runner.assertNotValid(serviceImpl); @@ -280,9 +281,9 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.CREDENTIALS_FILE, + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.CREDENTIALS_FILE, "src/test/resources/mock-aws-credentials.properties"); - runner.setProperty(serviceImpl, AbstractAWSProcessor.SECRET_KEY, "awsSecretKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.SECRET_KEY, "awsSecretKey"); runner.enableControllerService(serviceImpl); runner.assertNotValid(serviceImpl); @@ -293,7 +294,7 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.ACCESS_KEY, "awsAccessKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.ACCESS_KEY, "awsAccessKey"); runner.enableControllerService(serviceImpl); runner.assertNotValid(serviceImpl); @@ -304,9 +305,29 @@ public class AWSCredentialsProviderControllerServiceTest { final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); runner.addControllerService("awsCredentialsProvider", serviceImpl); - runner.setProperty(serviceImpl, AbstractAWSProcessor.SECRET_KEY, "awsSecretKey"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.SECRET_KEY, "awsSecretKey"); runner.enableControllerService(serviceImpl); runner.assertNotValid(serviceImpl); } + + @Test + public void testExpressionLanguageSupport() throws Throwable { + final TestRunner runner = TestRunners.newTestRunner(FetchS3Object.class); + final AWSCredentialsProviderControllerService serviceImpl = new AWSCredentialsProviderControllerService(); + runner.addControllerService("awsCredentialsProvider", serviceImpl); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.ACCESS_KEY, "${literal(\"awsAccessKey\")}"); + runner.setProperty(serviceImpl, CredentialPropertyDescriptors.SECRET_KEY, "${literal(\"awsSecretKey\")}"); + runner.enableControllerService(serviceImpl); + + runner.assertValid(serviceImpl); + + final AWSCredentialsProviderService service = (AWSCredentialsProviderService) runner.getProcessContext() + .getControllerServiceLookup().getControllerService("awsCredentialsProvider"); + + assertEquals("Expression language should be supported for " + CredentialPropertyDescriptors.ACCESS_KEY.getName(), + "awsAccessKey", service.getCredentialsProvider().getCredentials().getAWSAccessKeyId()); + assertEquals("Expression language should be supported for " + CredentialPropertyDescriptors.SECRET_KEY.getName(), + "awsSecretKey", service.getCredentialsProvider().getCredentials().getAWSSecretKey()); + } }
