Search in sources :

Example 31 with MockProcessContext

use of org.apache.nifi.util.MockProcessContext in project nifi by apache.

the class TestEncryptContent method testShouldValidatePGPPublicKeyringContainsUserId.

@Test
public void testShouldValidatePGPPublicKeyringContainsUserId() {
    // Arrange
    final TestRunner runner = TestRunners.newTestRunner(EncryptContent.class);
    Collection<ValidationResult> results;
    MockProcessContext pc;
    runner.setProperty(EncryptContent.MODE, EncryptContent.ENCRYPT_MODE);
    runner.setProperty(EncryptContent.ENCRYPTION_ALGORITHM, EncryptionMethod.PGP.name());
    runner.setProperty(EncryptContent.PUBLIC_KEYRING, "src/test/resources/TestEncryptContent/pubring.gpg");
    runner.setProperty(EncryptContent.PUBLIC_KEY_USERID, "USERID");
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    // Act
    results = pc.validate();
    // Assert
    Assert.assertEquals(1, results.size());
    ValidationResult vr = (ValidationResult) results.toArray()[0];
    String expectedResult = "PGPException: Could not find a public key with the given userId";
    String message = "'" + vr.toString() + "' contains '" + expectedResult + "'";
    Assert.assertTrue(message, vr.toString().contains(expectedResult));
}
Also used : TestRunner(org.apache.nifi.util.TestRunner) ValidationResult(org.apache.nifi.components.ValidationResult) MockProcessContext(org.apache.nifi.util.MockProcessContext) Test(org.junit.Test)

Example 32 with MockProcessContext

use of org.apache.nifi.util.MockProcessContext in project nifi by apache.

the class TestEncryptContent method testShouldExtractPGPPublicKeyFromKeyring.

@Test
public void testShouldExtractPGPPublicKeyFromKeyring() {
    // Arrange
    final TestRunner runner = TestRunners.newTestRunner(EncryptContent.class);
    Collection<ValidationResult> results;
    MockProcessContext pc;
    runner.setProperty(EncryptContent.MODE, EncryptContent.ENCRYPT_MODE);
    runner.setProperty(EncryptContent.ENCRYPTION_ALGORITHM, EncryptionMethod.PGP.name());
    runner.setProperty(EncryptContent.PUBLIC_KEYRING, "src/test/resources/TestEncryptContent/pubring.gpg");
    runner.setProperty(EncryptContent.PUBLIC_KEY_USERID, "NiFi PGP Test Key (Short test key for NiFi PGP unit tests) <alopresto.apache+test@gmail.com>");
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    // Act
    results = pc.validate();
    // Assert
    Assert.assertEquals(0, results.size());
}
Also used : TestRunner(org.apache.nifi.util.TestRunner) ValidationResult(org.apache.nifi.components.ValidationResult) MockProcessContext(org.apache.nifi.util.MockProcessContext) Test(org.junit.Test)

Example 33 with MockProcessContext

use of org.apache.nifi.util.MockProcessContext in project nifi by apache.

the class TestEncryptContent method testValidation.

@Test
public void testValidation() {
    final TestRunner runner = TestRunners.newTestRunner(EncryptContent.class);
    Collection<ValidationResult> results;
    MockProcessContext pc;
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    results = pc.validate();
    Assert.assertEquals(results.toString(), 1, results.size());
    for (final ValidationResult vr : results) {
        Assert.assertTrue(vr.toString().contains(EncryptContent.PASSWORD.getDisplayName() + " is required when using algorithm"));
    }
    runner.enqueue(new byte[0]);
    final EncryptionMethod encryptionMethod = EncryptionMethod.MD5_128AES;
    runner.setProperty(EncryptContent.ENCRYPTION_ALGORITHM, encryptionMethod.name());
    runner.setProperty(EncryptContent.KEY_DERIVATION_FUNCTION, KeyDerivationFunction.NIFI_LEGACY.name());
    runner.setProperty(EncryptContent.PASSWORD, "ThisIsAPasswordThatIsLongerThanSixteenCharacters");
    pc = (MockProcessContext) runner.getProcessContext();
    results = pc.validate();
    if (!PasswordBasedEncryptor.supportsUnlimitedStrength()) {
        logger.info(results.toString());
        Assert.assertEquals(1, results.size());
        for (final ValidationResult vr : results) {
            Assert.assertTrue("Did not successfully catch validation error of a long password in a non-JCE Unlimited Strength environment", vr.toString().contains("Password length greater than " + CipherUtility.getMaximumPasswordLengthForAlgorithmOnLimitedStrengthCrypto(encryptionMethod) + " characters is not supported by this JVM due to lacking JCE Unlimited Strength Jurisdiction Policy files."));
        }
    } else {
        Assert.assertEquals(results.toString(), 0, results.size());
    }
    runner.removeProperty(EncryptContent.PASSWORD);
    runner.setProperty(EncryptContent.ENCRYPTION_ALGORITHM, EncryptionMethod.PGP.name());
    runner.setProperty(EncryptContent.PUBLIC_KEYRING, "src/test/resources/TestEncryptContent/text.txt");
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    results = pc.validate();
    Assert.assertEquals(1, results.size());
    for (final ValidationResult vr : results) {
        Assert.assertTrue(vr.toString().contains(" encryption without a " + EncryptContent.PASSWORD.getDisplayName() + " requires both " + EncryptContent.PUBLIC_KEYRING.getDisplayName() + " and " + EncryptContent.PUBLIC_KEY_USERID.getDisplayName()));
    }
    // Legacy tests moved to individual tests to comply with new library
    // TODO: Move secring tests out to individual as well
    runner.removeProperty(EncryptContent.PUBLIC_KEYRING);
    runner.removeProperty(EncryptContent.PUBLIC_KEY_USERID);
    runner.setProperty(EncryptContent.MODE, EncryptContent.DECRYPT_MODE);
    runner.setProperty(EncryptContent.PRIVATE_KEYRING, "src/test/resources/TestEncryptContent/secring.gpg");
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    results = pc.validate();
    Assert.assertEquals(1, results.size());
    for (final ValidationResult vr : results) {
        Assert.assertTrue(vr.toString().contains(" decryption without a " + EncryptContent.PASSWORD.getDisplayName() + " requires both " + EncryptContent.PRIVATE_KEYRING.getDisplayName() + " and " + EncryptContent.PRIVATE_KEYRING_PASSPHRASE.getDisplayName()));
    }
    runner.setProperty(EncryptContent.PRIVATE_KEYRING_PASSPHRASE, "PASSWORD");
    runner.enqueue(new byte[0]);
    pc = (MockProcessContext) runner.getProcessContext();
    results = pc.validate();
    Assert.assertEquals(1, results.size());
    for (final ValidationResult vr : results) {
        Assert.assertTrue(vr.toString().contains(" could not be opened with the provided " + EncryptContent.PRIVATE_KEYRING_PASSPHRASE.getDisplayName()));
    }
}
Also used : TestRunner(org.apache.nifi.util.TestRunner) EncryptionMethod(org.apache.nifi.security.util.EncryptionMethod) ValidationResult(org.apache.nifi.components.ValidationResult) MockProcessContext(org.apache.nifi.util.MockProcessContext) Test(org.junit.Test)

Example 34 with MockProcessContext

use of org.apache.nifi.util.MockProcessContext in project nifi by apache.

the class TestRouteOnAttribute method testInvalidOnMisconfiguredProperty.

@Test
public void testInvalidOnMisconfiguredProperty() {
    final RouteOnAttribute proc = new RouteOnAttribute();
    final MockProcessContext ctx = new MockProcessContext(proc);
    // Missing closing brace
    final ValidationResult validationResult = ctx.setProperty("RouteA", "${a:equals('b')");
    assertFalse(validationResult.isValid());
}
Also used : ValidationResult(org.apache.nifi.components.ValidationResult) MockProcessContext(org.apache.nifi.util.MockProcessContext) Test(org.junit.Test)

Example 35 with MockProcessContext

use of org.apache.nifi.util.MockProcessContext in project nifi by apache.

the class SSLContextServiceTest method testValidationResultsCacheShouldExpire.

@Test
public void testValidationResultsCacheShouldExpire() throws InitializationException, IOException {
    // Arrange
    // Copy the keystore and truststore to a tmp directory so the originals are not modified
    File originalKeystore = new File("src/test/resources/localhost-ks.jks");
    File originalTruststore = new File("src/test/resources/localhost-ts.jks");
    File tmpKeystore = tmp.newFile("keystore-tmp.jks");
    File tmpTruststore = tmp.newFile("truststore-tmp.jks");
    Files.copy(originalKeystore.toPath(), tmpKeystore.toPath(), StandardCopyOption.REPLACE_EXISTING);
    Files.copy(originalTruststore.toPath(), tmpTruststore.toPath(), StandardCopyOption.REPLACE_EXISTING);
    final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
    SSLContextService service = new StandardSSLContextService();
    final String serviceIdentifier = "test-should-expire";
    runner.addControllerService(serviceIdentifier, service);
    runner.setProperty(service, StandardSSLContextService.KEYSTORE.getName(), tmpKeystore.getAbsolutePath());
    runner.setProperty(service, StandardSSLContextService.KEYSTORE_PASSWORD.getName(), "localtest");
    runner.setProperty(service, StandardSSLContextService.KEYSTORE_TYPE.getName(), "JKS");
    runner.setProperty(service, StandardSSLContextService.TRUSTSTORE.getName(), tmpTruststore.getAbsolutePath());
    runner.setProperty(service, StandardSSLContextService.TRUSTSTORE_PASSWORD.getName(), "localtest");
    runner.setProperty(service, StandardSSLContextService.TRUSTSTORE_TYPE.getName(), "JKS");
    runner.enableControllerService(service);
    runner.setProperty("SSL Context Svc ID", serviceIdentifier);
    runner.assertValid(service);
    final StandardSSLContextService sslContextService = (StandardSSLContextService) service;
    // Act
    boolean isDeleted = tmpKeystore.delete();
    assert isDeleted;
    assert !tmpKeystore.exists();
    logger.info("Deleted keystore file");
    // Manually validate the service (expecting cached result to be returned)
    final MockProcessContext processContext = (MockProcessContext) runner.getProcessContext();
    // This service does not use the state manager or variable registry
    final ValidationContext validationContext = new MockValidationContext(processContext, null, null);
    // Even though the keystore file is no longer present, because no property changed, the cached result is still valid
    Collection<ValidationResult> validationResults = sslContextService.customValidate(validationContext);
    assertTrue("validation results is not empty", validationResults.isEmpty());
    logger.info("(1) StandardSSLContextService#customValidate() returned true even though the keystore file is no longer available");
    // Have to exhaust the cached result by checking n-1 more times
    for (int i = 2; i < sslContextService.getValidationCacheExpiration(); i++) {
        validationResults = sslContextService.customValidate(validationContext);
        assertTrue("validation results is not empty", validationResults.isEmpty());
        logger.info("(" + i + ") StandardSSLContextService#customValidate() returned true even though the keystore file is no longer available");
    }
    validationResults = sslContextService.customValidate(validationContext);
    assertFalse("validation results is empty", validationResults.isEmpty());
    logger.info("(" + sslContextService.getValidationCacheExpiration() + ") StandardSSLContextService#customValidate() returned false because the cache expired");
}
Also used : TestRunner(org.apache.nifi.util.TestRunner) MockValidationContext(org.apache.nifi.util.MockValidationContext) ValidationResult(org.apache.nifi.components.ValidationResult) File(java.io.File) MockProcessContext(org.apache.nifi.util.MockProcessContext) ValidationContext(org.apache.nifi.components.ValidationContext) MockValidationContext(org.apache.nifi.util.MockValidationContext) Test(org.junit.Test)

Aggregations

MockProcessContext (org.apache.nifi.util.MockProcessContext)39 Test (org.junit.Test)35 ValidationResult (org.apache.nifi.components.ValidationResult)25 TestRunner (org.apache.nifi.util.TestRunner)24 ProcessContext (org.apache.nifi.processor.ProcessContext)16 MockProcessorInitializationContext (org.apache.nifi.util.MockProcessorInitializationContext)10 MockValidationContext (org.apache.nifi.util.MockValidationContext)6 HashSet (java.util.HashSet)4 ProcessorInitializationContext (org.apache.nifi.processor.ProcessorInitializationContext)4 Relationship (org.apache.nifi.processor.Relationship)4 ProcessSession (org.apache.nifi.processor.ProcessSession)3 JmsProcessingSummary (org.apache.nifi.processors.standard.util.JmsProcessingSummary)3 Matchers.anyString (org.mockito.Matchers.anyString)3 File (java.io.File)2 IOException (java.io.IOException)2 InputStream (java.io.InputStream)2 MalformedURLException (java.net.MalformedURLException)2 AtomicLong (java.util.concurrent.atomic.AtomicLong)2 NullSink (org.apache.flume.sink.NullSink)2 AvroSource (org.apache.flume.source.AvroSource)2