This is an automated email from the ASF dual-hosted git repository. ppkarwasz pushed a commit to branch drop-mina-netty-from-core in repository https://gitbox.apache.org/repos/asf/logging-flume.git
commit 2efcbc55f4c3e70b2b077e4c1d27976b91412e27 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Fri Jun 12 07:20:42 2026 +0200 Drop Mina and Netty from flume-ng-core Move the sources that pull in Apache Mina and Netty out of flume-ng-core into two new modules under flume-ng-sources: - flume-syslog-source (org.apache.flume.source.syslog): SyslogTcpSource, SyslogUDPSource, MultiportSyslogTCPSource and their shared parser/utils - flume-netcat-source (org.apache.flume.source.netcat): NetcatUdpSource The classes are repackaged so each module owns a distinct package, keeping the modules JPMS-friendly (no split packages). The short source aliases in SourceType keep working; only the target FQCNs change. flume-ng-core no longer depends on io.netty:netty-all or org.apache.mina:mina-core. The TLS unit tests no longer rely on checked-in keystore/PEM blobs: the X509Certificates helper moves to the flume-ng-sdk test-jar alongside a new TestKeyStores helper, and the stores are generated in memory with Bouncy Castle. The orphaned test resources are deleted. Also remove the dead Netty PatternRule class (no references). Assisted-By: Claude Opus 4.8 <[email protected]> --- flume-bom/pom.xml | 10 ++ .../org/apache/flume/conf/source/SourceType.java | 8 +- flume-ng-core/pom.xml | 10 -- .../org/apache/flume/netty/filter/PatternRule.java | 160 --------------------- .../flume/source/TestDefaultSourceFactory.java | 4 - flume-ng-core/src/test/resources/certs/gencerts.sh | 31 ---- flume-ng-core/src/test/resources/certs/rootca.conf | 9 -- flume-ng-core/src/test/resources/certs/server.conf | 9 -- flume-ng-core/src/test/resources/keystorefile.jks | Bin 3518 -> 0 bytes .../src/test/resources/server.flume-crt.pem | 17 --- .../src/test/resources/server.flume-keystore.p12 | Bin 2447 -> 0 bytes flume-ng-core/src/test/resources/server.flume.pem | 23 --- flume-ng-core/src/test/resources/server.p12 | Bin 1637 -> 0 bytes flume-ng-core/src/test/resources/truststore.jks | Bin 687 -> 0 bytes .../src/test/resources/truststorefile.jks | Bin 775 -> 0 bytes flume-ng-dist/pom.xml | 8 ++ flume-ng-sdk/pom.xml | 13 ++ .../java/org/apache/flume/util/TestKeyStores.java | 77 ++++++++++ .../org/apache/flume/util}/X509Certificates.java | 8 +- .../apache/flume/source/http/TestHTTPSource.java | 26 +--- flume-ng-sources/{ => flume-netcat-source}/pom.xml | 39 +++-- .../flume/source/netcat}/NetcatUdpSource.java | 3 +- .../flume/source/netcat}/TestNetcatUdpSource.java | 2 +- .../flume-syslog-source}/pom.xml | 84 ++++++----- .../source/syslog}/MultiportSyslogTCPSource.java | 3 +- .../apache/flume/source/syslog}/SyslogParser.java | 2 +- .../SyslogSourceConfigurationConstants.java | 2 +- .../flume/source/syslog}/SyslogTcpSource.java | 3 +- .../flume/source/syslog}/SyslogUDPSource.java | 3 +- .../apache/flume/source/syslog}/SyslogUtils.java | 2 +- .../syslog}/TestMultiportSyslogTCPSource.java | 18 ++- .../flume/source/syslog}/TestSyslogParser.java | 2 +- .../flume/source/syslog}/TestSyslogTcpSource.java | 20 ++- .../flume/source/syslog}/TestSyslogUdpSource.java | 2 +- .../flume/source/syslog}/TestSyslogUtils.java | 2 +- flume-ng-sources/pom.xml | 2 + 36 files changed, 243 insertions(+), 359 deletions(-) diff --git a/flume-bom/pom.xml b/flume-bom/pom.xml index 774b2cab9..97cf0ad7c 100644 --- a/flume-bom/pom.xml +++ b/flume-bom/pom.xml @@ -217,6 +217,16 @@ <artifactId>flume-taildir-source</artifactId> <version>${flume-taildir.version}</version> </dependency> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-syslog-source</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-netcat-source</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.flume</groupId> <artifactId>flume-shared-kafka</artifactId> diff --git a/flume-ng-configuration/src/main/java/org/apache/flume/conf/source/SourceType.java b/flume-ng-configuration/src/main/java/org/apache/flume/conf/source/SourceType.java index f26bb5946..5792d8dce 100644 --- a/flume-ng-configuration/src/main/java/org/apache/flume/conf/source/SourceType.java +++ b/flume-ng-configuration/src/main/java/org/apache/flume/conf/source/SourceType.java @@ -61,21 +61,21 @@ public enum SourceType implements ComponentWithClassName { * * @see org.apache.flume.source.SyslogTcpSource */ - SYSLOGTCP("org.apache.flume.source.SyslogTcpSource"), + SYSLOGTCP("org.apache.flume.source.syslog.SyslogTcpSource"), /** * MultiportSyslogTCPSource * * @see org.apache.flume.source.MultiportSyslogTCPSource */ - MULTIPORT_SYSLOGTCP("org.apache.flume.source.MultiportSyslogTCPSource"), + MULTIPORT_SYSLOGTCP("org.apache.flume.source.syslog.MultiportSyslogTCPSource"), /** * SyslogUDPSource * * @see org.apache.flume.source.SyslogUDPSource */ - SYSLOGUDP("org.apache.flume.source.SyslogUDPSource"), + SYSLOGUDP("org.apache.flume.source.syslog.SyslogUDPSource"), /** * Spool directory source @@ -117,7 +117,7 @@ public enum SourceType implements ComponentWithClassName { * * @see org.apache.flume.source.NetcatUdpSource */ - NETCATUDP("org.apache.flume.source.NetcatUdpSource"); + NETCATUDP("org.apache.flume.source.netcat.NetcatUdpSource"); private final String sourceClassName; diff --git a/flume-ng-core/pom.xml b/flume-ng-core/pom.xml index f73b9627b..f8de7c35c 100644 --- a/flume-ng-core/pom.xml +++ b/flume-ng-core/pom.xml @@ -126,11 +126,6 @@ <artifactId>commons-lang</artifactId> </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-all</artifactId> - </dependency> - <dependency> <groupId>org.eclipse.jetty.ee11</groupId> <artifactId>jetty-ee11-servlet</artifactId> @@ -169,11 +164,6 @@ <scope>test</scope> </dependency> - <dependency> - <groupId>org.apache.mina</groupId> - <artifactId>mina-core</artifactId> - </dependency> - </dependencies> <build> <plugins> diff --git a/flume-ng-core/src/main/java/org/apache/flume/netty/filter/PatternRule.java b/flume-ng-core/src/main/java/org/apache/flume/netty/filter/PatternRule.java deleted file mode 100644 index 31cc2b67c..000000000 --- a/flume-ng-core/src/main/java/org/apache/flume/netty/filter/PatternRule.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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.flume.netty.filter; - -import io.netty.handler.ipfilter.IpFilterRule; -import io.netty.handler.ipfilter.IpFilterRuleType; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.UnknownHostException; -import java.util.regex.Pattern; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * The Class PatternRule represents an IP filter rule using string patterns. - * <br> - * Rule Syntax: - * <br> - * <pre> - * Rule ::= [n|i]:address n stands for computer name, i for ip address - * address ::= <regex> | localhost - * regex is a regular expression with '*' as multi character and '?' as single character wild card - * </pre> - * <br> - * Example: allow localhost: - * <br> - * new PatternRule(true, "n:localhost") - * <br> - * Example: allow local lan: - * <br> - * new PatternRule(true, "i:192.168.0.*") - * <br> - * Example: block all - * <br> - * new PatternRule(false, "n:*") - * <br> - * <p> - * For some reason Netty 4 didn't copy this from Netty 3. The code was copied from the Netty 3 PatternRule - * and modifed as required to match the new version of IpFilterRule. - */ -public class PatternRule implements IpFilterRule { - - private static final Logger logger = LoggerFactory.getLogger(PatternRule.class); - private static final String LOCALHOST = "127.0.0.1"; - private final IpFilterRuleType ruleType; - private Pattern ipPattern; - private Pattern namePattern; - private boolean localhost; - - /** - * Construct the IpFilterRule from a pattern. - * - * @param ruleType The RuleType (accept or deny) - * @param pattern The pattern. - */ - public PatternRule(IpFilterRuleType ruleType, String pattern) { - this.ruleType = ruleType; - parse(pattern); - } - - private static String addRule(String pattern, String rule) { - if (rule == null || rule.length() == 0) { - return pattern; - } - if (pattern.length() != 0) { - pattern += "|"; - } - rule = rule.replaceAll("\\.", "\\\\."); - rule = rule.replaceAll("\\*", ".*"); - rule = rule.replaceAll("\\?", "."); - pattern += '(' + rule + ')'; - return pattern; - } - - private static boolean isLocalhost(InetAddress address) { - try { - if (address.equals(InetAddress.getLocalHost())) { - return true; - } - } catch (UnknownHostException e) { - if (logger.isInfoEnabled()) { - logger.info("error getting ip of localhost", e); - } - } - try { - InetAddress[] addrs = InetAddress.getAllByName(LOCALHOST); - for (InetAddress addr : addrs) { - if (addr.equals(address)) { - return true; - } - } - } catch (UnknownHostException e) { - if (logger.isInfoEnabled()) { - logger.info("error getting ip of localhost", e); - } - } - return false; - } - - @Override - public boolean matches(InetSocketAddress inetSocketAddress) { - InetAddress inetAddress = inetSocketAddress.getAddress(); - if (localhost && isLocalhost(inetAddress)) { - return true; - } - if (ipPattern != null && ipPattern.matcher(inetAddress.getHostAddress()).matches()) { - return true; - } - if (namePattern != null) { - return namePattern.matcher(inetAddress.getHostName()).matches(); - } - return false; - } - - @Override - public IpFilterRuleType ruleType() { - return ruleType; - } - - private void parse(String pattern) { - if (pattern == null) { - return; - } - - String[] acls = pattern.split(","); - - String ip = ""; - String name = ""; - for (String c : acls) { - c = c.trim(); - if ("n:localhost".equals(c)) { - localhost = true; - } else if (c.startsWith("n:")) { - name = addRule(name, c.substring(2)); - } else if (c.startsWith("i:")) { - ip = addRule(ip, c.substring(2)); - } - } - if (ip.length() != 0) { - ipPattern = Pattern.compile(ip); - } - if (name.length() != 0) { - namePattern = Pattern.compile(name); - } - } -} diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java b/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java index df445b6cc..08897f919 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java +++ b/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java @@ -60,11 +60,7 @@ public class TestDefaultSourceFactory { public void testSourceCreation() throws Exception { verifySourceCreation("seq-src", "seq", SequenceGeneratorSource.class); verifySourceCreation("netcat-src", "netcat", NetcatSource.class); - verifySourceCreation("netcat-udp-src", "netcatudp", NetcatUdpSource.class); verifySourceCreation("exec-src", "exec", ExecSource.class); - verifySourceCreation("syslogtcp-src", "syslogtcp", SyslogTcpSource.class); - verifySourceCreation("multiport_syslogtcp-src", "multiport_syslogtcp", MultiportSyslogTCPSource.class); - verifySourceCreation("syslogudp-src", "syslogudp", SyslogUDPSource.class); // verifySourceCreation("spooldir-src", "spooldir", SpoolDirectorySource.class); // verifySourceCreation("thrift-src", "thrift", ThriftSource.class); verifySourceCreation("custom-src", MockSource.class.getCanonicalName(), MockSource.class); diff --git a/flume-ng-core/src/test/resources/certs/gencerts.sh b/flume-ng-core/src/test/resources/certs/gencerts.sh deleted file mode 100755 index 0fb0263de..000000000 --- a/flume-ng-core/src/test/resources/certs/gencerts.sh +++ /dev/null @@ -1,31 +0,0 @@ -mkdir tmp -rm ../truststorefile.jks -rm ../keystorefile.jks -rm ../server.flume-keystore.p12 -# Create the CA key and certificate -openssl req -config rootca.conf -new -x509 -nodes -keyout tmp/flume-cacert.key -out tmp/flume-ca.crt -days 10960 -# Create the trust store and import the certificate -keytool -keystore ../truststorefile.jks -storetype jks -importcert -file 'tmp/flume-ca.crt' -keypass password -storepass password -alias flume-cacert -noprompt -#Import the root certificate -keytool -keystore ../keystorefile.jks -alias flume-ca -importcert -file tmp/flume-ca.crt -keypass password -storepass password -noprompt -# Create the client private key in the client key store -keytool -genkeypair -keyalg RSA -alias client -keystore ../keystorefile.jks -storepass password -keypass password -validity 10960 -keysize 2048 -dname "CN=client.flume, C=US" -# Create a signing request for the client # -keytool -keystore ../keystorefile.jks -alias client -certreq -file tmp/client.csr -keypass password -storepass password -# Sign the client certificate -openssl x509 -req -CA 'tmp/flume-ca.crt' -CAkey 'tmp/flume-cacert.key' -in tmp/client.csr -out tmp/client.crt_signed -days 10960 -CAcreateserial -passin pass:password -# Verify the signed certificate -openssl verify -CAfile 'tmp/flume-ca.crt' tmp/client.crt_signed -#Import the client's signed certificate -keytool -keystore ../keystorefile.jks -alias client -importcert -file tmp/client.crt_signed -keypass password -storepass password -noprompt -#Verify the keystore -keytool -list -v -keystore ../keystorefile.jks -storepass password -# Create the server private key in the server key store -keytool -genkeypair -keyalg RSA -alias server -keystore ../server.flume-keystore.p12 -storepass password -storetype PKCS12 -keypass password -validity 10960 -keysize 2048 -dname "CN=server.flume, C=US" -# Create a signing request for the server # -keytool -keystore ../server.flume-keystore.p12 -alias server -certreq -file tmp/server.csr -keypass password -storepass password -# Sign the server certificate -openssl x509 -req -CA 'tmp/flume-ca.crt' -CAkey 'tmp/flume-cacert.key' -in tmp/server.csr -out ../server.flume-crt.pem -days 10960 -CAcreateserial -passin pass:password -# Extract the private key -openssl pkcs12 -in ../server.flume-keystore.p12 -passin pass:password -nokeys -out ../server.flume.pem -rm -rf tmp diff --git a/flume-ng-core/src/test/resources/certs/rootca.conf b/flume-ng-core/src/test/resources/certs/rootca.conf deleted file mode 100644 index 722e9c39b..000000000 --- a/flume-ng-core/src/test/resources/certs/rootca.conf +++ /dev/null @@ -1,9 +0,0 @@ -[ req ] -distinguished_name = CA_DN -prompt = no -output_password = password -default_bits = 2048 - -[ CA_DN ] -C = US -CN = flume-ca diff --git a/flume-ng-core/src/test/resources/certs/server.conf b/flume-ng-core/src/test/resources/certs/server.conf deleted file mode 100644 index 7a9fb5835..000000000 --- a/flume-ng-core/src/test/resources/certs/server.conf +++ /dev/null @@ -1,9 +0,0 @@ -[ req ] -distinguished_name = CA_DN -prompt = no -output_password = password -default_bits = 2048 - -[ CA_DN ] -C = US -CN = server.flume diff --git a/flume-ng-core/src/test/resources/keystorefile.jks b/flume-ng-core/src/test/resources/keystorefile.jks deleted file mode 100644 index d62e95792..000000000 Binary files a/flume-ng-core/src/test/resources/keystorefile.jks and /dev/null differ diff --git a/flume-ng-core/src/test/resources/server.flume-crt.pem b/flume-ng-core/src/test/resources/server.flume-crt.pem deleted file mode 100644 index 9e3774427..000000000 --- a/flume-ng-core/src/test/resources/server.flume-crt.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICwjCCAaoCCQD8AQyla5FbDjANBgkqhkiG9w0BAQsFADAgMQswCQYDVQQGEwJV -UzERMA8GA1UEAwwIZmx1bWUtY2EwIBcNMjMwMzIyMDAyODM0WhgPMjA1MzAzMjQw -MDI4MzRaMCQxCzAJBgNVBAYTAlVTMRUwEwYDVQQDEwxzZXJ2ZXIuZmx1bWUwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEEAUShlX2lWDYiEgcZL1JzWFw -auNkdxOGo1DtD3YaZdrU1GS2UwspLm0qcSFEF1Sx6uVTABdgjZGnxJLSTJkabVu/ -iMuP+EQrE/4AWJoyuuaYMSG0EGeP+mttTtLHYyt/k9NJkABYxFZkNqdDuo+lF/Vs -QdW3icym0vqMwiIvE+VKw9j3F+zFZizfx6MiBH0uuNrXHFCNUg52/cbeyiXO1mks -yruOV+PF8/44zAepjLWiJgp7Wo6ejXmLvR+k68RwB5V7fXrzPYueM9GQDmLffkdO -ZhrcafiRFGlzWSmC820Eb2b5+cVnm96XAlUXE5ao5o58oMmcufMnJ5k2UbFJAgMB -AAEwDQYJKoZIhvcNAQELBQADggEBAHBGpqraT39aw/HVrJdmpsw8CwSmdiir+NYk -5PprbIKAyf/P/9ObKcqesO8d8CQZVvzzm+Ok2rgcALDIl/TbbAVUPizIrN4AiH+Z -BPOqDFF4taWkw73iMDiq61QS8SpJIOxxmL8PsK5eefuABrpumnVgW5X9BT/uMIqW -NOwiyII3NVvtlErcdAL/ZTYWc3S8CEWVRc88ZpIBSLB4/tqQbPM+m+ZtYMSKi3Sh -ugOjonPuteeQqu6R7HRYOajepKdGe048Moq90v0IrDI8v+rbezLFpEWOnG0fUDEq -LfA9l7e/q1ukXRW4ccJWZWXLrZbEbX5hJeTlyYhHciwB5jfueMM= ------END CERTIFICATE----- diff --git a/flume-ng-core/src/test/resources/server.flume-keystore.p12 b/flume-ng-core/src/test/resources/server.flume-keystore.p12 deleted file mode 100644 index da51f355d..000000000 Binary files a/flume-ng-core/src/test/resources/server.flume-keystore.p12 and /dev/null differ diff --git a/flume-ng-core/src/test/resources/server.flume.pem b/flume-ng-core/src/test/resources/server.flume.pem deleted file mode 100644 index 6bc71ed79..000000000 --- a/flume-ng-core/src/test/resources/server.flume.pem +++ /dev/null @@ -1,23 +0,0 @@ -Bag Attributes - friendlyName: server - localKeyID: 54 69 6D 65 20 31 36 37 39 34 34 34 39 31 33 33 33 39 -subject=/C=US/CN=server.flume -issuer=/C=US/CN=server.flume ------BEGIN CERTIFICATE----- -MIIC6TCCAdGgAwIBAgIEMlDgqzANBgkqhkiG9w0BAQsFADAkMQswCQYDVQQGEwJV -UzEVMBMGA1UEAxMMc2VydmVyLmZsdW1lMCAXDTIzMDMyMjAwMjgzM1oYDzIwNTMw -MzI0MDAyODMzWjAkMQswCQYDVQQGEwJVUzEVMBMGA1UEAxMMc2VydmVyLmZsdW1l -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxBAFEoZV9pVg2IhIHGS9 -Sc1hcGrjZHcThqNQ7Q92GmXa1NRktlMLKS5tKnEhRBdUserlUwAXYI2Rp8SS0kyZ -Gm1bv4jLj/hEKxP+AFiaMrrmmDEhtBBnj/prbU7Sx2Mrf5PTSZAAWMRWZDanQ7qP -pRf1bEHVt4nMptL6jMIiLxPlSsPY9xfsxWYs38ejIgR9Lrja1xxQjVIOdv3G3sol -ztZpLMq7jlfjxfP+OMwHqYy1oiYKe1qOno15i70fpOvEcAeVe3168z2LnjPRkA5i -335HTmYa3Gn4kRRpc1kpgvNtBG9m+fnFZ5velwJVFxOWqOaOfKDJnLnzJyeZNlGx -SQIDAQABoyEwHzAdBgNVHQ4EFgQUClD6FZ+qPIFrtBaz0swRTtWt1WEwDQYJKoZI -hvcNAQELBQADggEBALuX9E+tRWvvA9uULj9Iq+k9iUNMQzkmyzXGu7hY46ZU9lx+ -fNnLZq82zz9rHq8IhK4HsLIsPCLfNeXwG/TNR4zUHKI53lzkburxgu76soMUDbHX -8udyUgrs0YjQcppw6IOOmlZtgNeF2nu7jeoXrCaA07yXzehAqukHv7glWaV3oORc -rDkZvHfJ2G7hPbUYYIeouJsbG9rNukNPOY9JEYGFYzDxZ8hlFt7Lp/icbdpjFGDV -tkMtPpVz59B47j/Kk/k5zxaDLnD42svL8GByyM5UxvAqAlYnfMKiZqXfY0JbCpMC -e9Z5xOyt9F8NLFyjRsmBlJD61LuLb8hAZK/Ho70= ------END CERTIFICATE----- diff --git a/flume-ng-core/src/test/resources/server.p12 b/flume-ng-core/src/test/resources/server.p12 deleted file mode 100644 index 07eef5168..000000000 Binary files a/flume-ng-core/src/test/resources/server.p12 and /dev/null differ diff --git a/flume-ng-core/src/test/resources/truststore.jks b/flume-ng-core/src/test/resources/truststore.jks deleted file mode 100644 index 8c08349e0..000000000 Binary files a/flume-ng-core/src/test/resources/truststore.jks and /dev/null differ diff --git a/flume-ng-core/src/test/resources/truststorefile.jks b/flume-ng-core/src/test/resources/truststorefile.jks deleted file mode 100644 index a0c3a49ac..000000000 Binary files a/flume-ng-core/src/test/resources/truststorefile.jks and /dev/null differ diff --git a/flume-ng-dist/pom.xml b/flume-ng-dist/pom.xml index 7bfe27428..0f328cb81 100644 --- a/flume-ng-dist/pom.xml +++ b/flume-ng-dist/pom.xml @@ -150,6 +150,14 @@ <groupId>org.apache.flume.flume-ng-sources</groupId> <artifactId>flume-taildir-source</artifactId> </dependency> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-syslog-source</artifactId> + </dependency> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-netcat-source</artifactId> + </dependency> <dependency> <groupId>org.apache.flume</groupId> <artifactId>flume-ng-environment-variable-config-filter</artifactId> diff --git a/flume-ng-sdk/pom.xml b/flume-ng-sdk/pom.xml index dc47f42b1..eaaf42b6b 100644 --- a/flume-ng-sdk/pom.xml +++ b/flume-ng-sdk/pom.xml @@ -44,6 +44,19 @@ <scope>test</scope> </dependency> + <!-- Used by the shared X509Certificates test helper (packaged in the test-jar). --> + <dependency> + <groupId>org.bouncycastle</groupId> + <artifactId>bcpkix-jdk18on</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk18on</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> diff --git a/flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java b/flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java new file mode 100644 index 000000000..7be650027 --- /dev/null +++ b/flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java @@ -0,0 +1,77 @@ +/* + * 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.flume.util; + +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyPair; +import java.security.KeyStore; +import java.security.cert.X509Certificate; + +/** + * Test helper that builds key and trust stores backed by a single self-signed certificate, + * so SSL tests can generate their TLS material in memory instead of shipping keystore files. + */ +public final class TestKeyStores { + + private final KeyPair keyPair; + private final X509Certificate certificate; + + private TestKeyStores(KeyPair keyPair, X509Certificate certificate) { + this.keyPair = keyPair; + this.certificate = certificate; + } + + /** + * Generates a self-signed credential for the given distinguished name (for example {@code CN=localhost}). + */ + public static TestKeyStores selfSigned(String dname) throws Exception { + KeyPair keyPair = X509Certificates.generateKeyPair(); + X509Certificate certificate = X509Certificates.generateSelfSignedCertificate(keyPair, dname); + return new TestKeyStores(keyPair, certificate); + } + + public X509Certificate certificate() { + return certificate; + } + + /** A keystore of the given type holding the private key and certificate under alias {@code key}. */ + public KeyStore keyStore(String type, String password) throws Exception { + KeyStore ks = KeyStore.getInstance(type); + ks.load(null, null); + ks.setKeyEntry("key", keyPair.getPrivate(), password.toCharArray(), new X509Certificate[] {certificate}); + return ks; + } + + /** A truststore of the given type holding only the certificate under alias {@code cert}. */ + public KeyStore trustStore(String type) throws Exception { + KeyStore ts = KeyStore.getInstance(type); + ts.load(null, null); + ts.setCertificateEntry("cert", certificate); + return ts; + } + + /** Writes {@link #keyStore} to {@code file} and returns its path. */ + public Path writeKeyStore(Path file, String type, String password) throws Exception { + KeyStore ks = keyStore(type, password); + try (OutputStream out = Files.newOutputStream(file)) { + ks.store(out, password.toCharArray()); + } + return file; + } +} diff --git a/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/X509Certificates.java b/flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java similarity index 94% rename from flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/X509Certificates.java rename to flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java index c98ece50f..ac3845002 100644 --- a/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/X509Certificates.java +++ b/flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source.http; +package org.apache.flume.util; import java.math.BigInteger; import java.security.KeyPair; @@ -37,7 +37,7 @@ import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; /** * Utility class to generate X.509 certificates for testing purposes. */ -final class X509Certificates { +public final class X509Certificates { private static final long MINUTE_IN_MILLIS = 60_000L; private static final long YEAR_IN_MILLIS = 365L * 24 * 60 * MINUTE_IN_MILLIS; @@ -54,7 +54,7 @@ final class X509Certificates { } } - static KeyPair generateKeyPair() { + public static KeyPair generateKeyPair() { return RSA_GENERATOR.generateKeyPair(); } @@ -66,7 +66,7 @@ final class X509Certificates { * @return a self-signed X.509 server certificate * @throws Exception if certificate creation or signing fails */ - static X509Certificate generateSelfSignedCertificate(KeyPair keyPair, String subjectDn) throws Exception { + public static X509Certificate generateSelfSignedCertificate(KeyPair keyPair, String subjectDn) throws Exception { long now = System.currentTimeMillis(); Date notBefore = new Date(now - MINUTE_IN_MILLIS); Date notAfter = new Date(now + YEAR_IN_MILLIS); diff --git a/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java index fc950b8d7..9c674cbc8 100644 --- a/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java +++ b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java @@ -24,8 +24,6 @@ import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import jakarta.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.reflect.Type; @@ -35,9 +33,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.URL; import java.net.UnknownHostException; -import java.security.KeyPair; import java.security.KeyStore; -import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -65,6 +61,7 @@ import org.apache.flume.channel.ReplicatingChannelSelector; import org.apache.flume.conf.Configurables; import org.apache.flume.event.JSONEvent; import org.apache.flume.instrumentation.SourceCounter; +import org.apache.flume.util.TestKeyStores; import org.apache.flume.util.Whitebox; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -147,23 +144,12 @@ public class TestHTTPSource { private static KeyStore trustStore; private static void generateSslStores() throws Exception { - KeyPair keyPair = X509Certificates.generateKeyPair(); - X509Certificate certificate = X509Certificates.generateSelfSignedCertificate(keyPair, "CN=localhost"); - - KeyStore keyStore = KeyStore.getInstance("JKS"); - keyStore.load(null, null); - keyStore.setKeyEntry( - "jetty", keyPair.getPrivate(), KEYSTORE_PASSWORD.toCharArray(), new X509Certificate[] {certificate}); - File keystoreFile = TEMP_FOLDER.newFile("keystore.jks"); - try (FileOutputStream out = new FileOutputStream(keystoreFile)) { - keyStore.store(out, KEYSTORE_PASSWORD.toCharArray()); - } - serverKeystorePath = keystoreFile.getAbsolutePath(); - + TestKeyStores credentials = TestKeyStores.selfSigned("CN=localhost"); + serverKeystorePath = credentials + .writeKeyStore(TEMP_FOLDER.newFile("keystore.jks").toPath(), "JKS", KEYSTORE_PASSWORD) + .toString(); // The test client only needs to trust the self-signed server certificate. - trustStore = KeyStore.getInstance("JKS"); - trustStore.load(null, null); - trustStore.setCertificateEntry("server", certificate); + trustStore = credentials.trustStore("JKS"); } @BeforeClass diff --git a/flume-ng-sources/pom.xml b/flume-ng-sources/flume-netcat-source/pom.xml similarity index 60% copy from flume-ng-sources/pom.xml copy to flume-ng-sources/flume-netcat-source/pom.xml index 683ea2a53..3b99723a4 100644 --- a/flume-ng-sources/pom.xml +++ b/flume-ng-sources/flume-netcat-source/pom.xml @@ -21,19 +21,38 @@ <parent> <groupId>org.apache.flume</groupId> - <artifactId>flume-parent</artifactId> + <artifactId>flume-ng-sources</artifactId> <version>2.0.0-SNAPSHOT</version> - <relativePath>../flume-parent/pom.xml</relativePath> </parent> - <groupId>org.apache.flume</groupId> - <artifactId>flume-ng-sources</artifactId> - <packaging>pom</packaging> - <name>Flume Sources</name> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-netcat-source</artifactId> + <name>Flume Netcat Source</name> - <modules> - <module>flume-http-source</module> - <module>flume-taildir-source</module> - </modules> + <properties> + <module.name>org.apache.flume.source.netcat</module.name> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sdk</artifactId> + </dependency> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-core</artifactId> + </dependency> + + <dependency> + <groupId>io.netty</groupId> + <artifactId>netty-all</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + </dependencies> </project> diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/NetcatUdpSource.java b/flume-ng-sources/flume-netcat-source/src/main/java/org/apache/flume/source/netcat/NetcatUdpSource.java similarity index 98% rename from flume-ng-core/src/main/java/org/apache/flume/source/NetcatUdpSource.java rename to flume-ng-sources/flume-netcat-source/src/main/java/org/apache/flume/source/netcat/NetcatUdpSource.java index be044b508..f16c3ab8f 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/NetcatUdpSource.java +++ b/flume-ng-sources/flume-netcat-source/src/main/java/org/apache/flume/source/netcat/NetcatUdpSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.netcat; import com.google.common.annotations.VisibleForTesting; import io.netty.bootstrap.Bootstrap; @@ -40,6 +40,7 @@ import org.apache.flume.conf.Configurable; import org.apache.flume.conf.Configurables; import org.apache.flume.event.EventBuilder; import org.apache.flume.exception.ChannelException; +import org.apache.flume.source.AbstractSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestNetcatUdpSource.java b/flume-ng-sources/flume-netcat-source/src/test/java/org/apache/flume/source/netcat/TestNetcatUdpSource.java similarity index 99% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestNetcatUdpSource.java rename to flume-ng-sources/flume-netcat-source/src/test/java/org/apache/flume/source/netcat/TestNetcatUdpSource.java index 7266086a4..3af5910dc 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestNetcatUdpSource.java +++ b/flume-ng-sources/flume-netcat-source/src/test/java/org/apache/flume/source/netcat/TestNetcatUdpSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.netcat; import com.google.common.base.Charsets; import java.io.IOException; diff --git a/flume-ng-sdk/pom.xml b/flume-ng-sources/flume-syslog-source/pom.xml similarity index 60% copy from flume-ng-sdk/pom.xml copy to flume-ng-sources/flume-syslog-source/pom.xml index dc47f42b1..000736368 100644 --- a/flume-ng-sdk/pom.xml +++ b/flume-ng-sources/flume-syslog-source/pom.xml @@ -16,27 +16,53 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.flume</groupId> - <artifactId>flume-parent</artifactId> + <artifactId>flume-ng-sources</artifactId> <version>2.0.0-SNAPSHOT</version> - <relativePath>../flume-parent/pom.xml</relativePath> </parent> - <artifactId>flume-ng-sdk</artifactId> - <name>Flume NG SDK</name> - <description>Flume Software Development Kit: Stable public API for integration with Flume 1.x</description> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-syslog-source</artifactId> + <name>Flume Syslog Source</name> <properties> - <!-- TODO fix spotbugs/pmd violations --> - <spotbugs.maxAllowedViolations>69</spotbugs.maxAllowedViolations> - <pmd.maxAllowedViolations>170</pmd.maxAllowedViolations> - <module.name>org.apache.flume.sdk</module.name> + <module.name>org.apache.flume.source.syslog</module.name> </properties> <dependencies> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sdk</artifactId> + </dependency> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sdk</artifactId> + <classifier>tests</classifier> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + + <dependency> + <groupId>io.netty</groupId> + <artifactId>netty-all</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.mina</groupId> + <artifactId>mina-core</artifactId> + </dependency> <dependency> <groupId>junit</groupId> @@ -45,54 +71,34 @@ </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> </dependency> <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> + <groupId>org.bouncycastle</groupId> + <artifactId>bcpkix-jdk18on</artifactId> + <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-slf4j-impl</artifactId> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk18on</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-jul</artifactId> + <artifactId>log4j-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-1.2-api</artifactId> + <artifactId>log4j-slf4j-impl</artifactId> <scope>test</scope> </dependency> - - <dependency> - <groupId>commons-lang</groupId> - <artifactId>commons-lang</artifactId> - </dependency> - </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - - </plugins> - </build> </project> diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/MultiportSyslogTCPSource.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/MultiportSyslogTCPSource.java similarity index 99% rename from flume-ng-core/src/main/java/org/apache/flume/source/MultiportSyslogTCPSource.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/MultiportSyslogTCPSource.java index 8853857cc..2a92c7468 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/MultiportSyslogTCPSource.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/MultiportSyslogTCPSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; @@ -38,6 +38,7 @@ import org.apache.flume.conf.Configurable; import org.apache.flume.conf.LogPrivacyUtil; import org.apache.flume.event.EventBuilder; import org.apache.flume.instrumentation.SourceCounter; +import org.apache.flume.source.SslContextAwareAbstractSource; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogParser.java similarity index 99% rename from flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogParser.java index 8e84a7cc8..97cd8af10 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogParser.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogParser.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogSourceConfigurationConstants.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogSourceConfigurationConstants.java similarity index 98% rename from flume-ng-core/src/main/java/org/apache/flume/source/SyslogSourceConfigurationConstants.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogSourceConfigurationConstants.java index 8378f1056..e791a0162 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogSourceConfigurationConstants.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogSourceConfigurationConstants.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; public final class SyslogSourceConfigurationConstants { diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogTcpSource.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogTcpSource.java similarity index 98% rename from flume-ng-core/src/main/java/org/apache/flume/source/SyslogTcpSource.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogTcpSource.java index 09bfa4952..48c587a7b 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogTcpSource.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogTcpSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import com.google.common.annotations.VisibleForTesting; import io.netty.bootstrap.ServerBootstrap; @@ -45,6 +45,7 @@ import org.apache.flume.conf.Configurable; import org.apache.flume.conf.Configurables; import org.apache.flume.exception.ChannelException; import org.apache.flume.instrumentation.SourceCounter; +import org.apache.flume.source.SslContextAwareAbstractSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUDPSource.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUDPSource.java similarity index 98% rename from flume-ng-core/src/main/java/org/apache/flume/source/SyslogUDPSource.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUDPSource.java index d5d159b02..cb4862d39 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUDPSource.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUDPSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import com.google.common.annotations.VisibleForTesting; import io.netty.bootstrap.Bootstrap; @@ -37,6 +37,7 @@ import org.apache.flume.conf.Configurable; import org.apache.flume.conf.Configurables; import org.apache.flume.exception.ChannelException; import org.apache.flume.instrumentation.SourceCounter; +import org.apache.flume.source.AbstractSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUtils.java similarity index 99% rename from flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java rename to flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUtils.java index 049020b4a..ac65eea27 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java +++ b/flume-ng-sources/flume-syslog-source/src/main/java/org/apache/flume/source/syslog/SyslogUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import io.netty.buffer.ByteBuf; import java.io.ByteArrayOutputStream; diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestMultiportSyslogTCPSource.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java similarity index 97% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestMultiportSyslogTCPSource.java rename to flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java index 49c74421d..8a63720de 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestMultiportSyslogTCPSource.java +++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -33,6 +33,8 @@ import java.net.SocketAddress; import java.net.UnknownHostException; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; import java.security.cert.X509Certificate; import java.text.ParseException; import java.time.ZonedDateTime; @@ -59,10 +61,11 @@ import org.apache.flume.channel.ReplicatingChannelSelector; import org.apache.flume.conf.Configurables; import org.apache.flume.exception.ChannelException; import org.apache.flume.instrumentation.SourceCounter; -import org.apache.flume.source.MultiportSyslogTCPSource.LineSplitter; -import org.apache.flume.source.MultiportSyslogTCPSource.MultiportSyslogHandler; -import org.apache.flume.source.MultiportSyslogTCPSource.ParsedBuffer; -import org.apache.flume.source.MultiportSyslogTCPSource.ThreadSafeDecoder; +import org.apache.flume.source.syslog.MultiportSyslogTCPSource.LineSplitter; +import org.apache.flume.source.syslog.MultiportSyslogTCPSource.MultiportSyslogHandler; +import org.apache.flume.source.syslog.MultiportSyslogTCPSource.ParsedBuffer; +import org.apache.flume.source.syslog.MultiportSyslogTCPSource.ThreadSafeDecoder; +import org.apache.flume.util.TestKeyStores; import org.apache.flume.util.Whitebox; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -231,9 +234,12 @@ public class TestMultiportSyslogTCPSource { SocketFactory socketFactory = sslContext.getSocketFactory(); + Path keystore = TestKeyStores.selfSigned("CN=localhost") + .writeKeyStore(Files.createTempFile("server", ".p12"), "PKCS12", "password"); + Context context = new Context(); context.put("ssl", "true"); - context.put("keystore", "src/test/resources/server.flume-keystore.p12"); + context.put("keystore", keystore.toString()); context.put("keystore-password", "password"); context.put("keystore-type", "PKCS12"); diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogParser.java similarity index 99% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java rename to flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogParser.java index 07200383a..ca6e53ed7 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogParser.java +++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogParser.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import com.google.common.base.Charsets; import com.google.common.collect.Lists; diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogTcpSource.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java similarity index 94% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogTcpSource.java rename to flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java index feb955629..fbfd87403 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogTcpSource.java +++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -28,6 +28,7 @@ import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; +import java.nio.file.Path; import java.security.cert.X509Certificate; import java.time.LocalDateTime; import java.util.ArrayList; @@ -47,8 +48,12 @@ import org.apache.flume.channel.MemoryChannel; import org.apache.flume.channel.ReplicatingChannelSelector; import org.apache.flume.conf.Configurables; import org.apache.flume.exception.ChannelException; +import org.apache.flume.util.TestKeyStores; import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.ClassRule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import org.mockito.Mockito; import org.slf4j.LoggerFactory; @@ -68,6 +73,17 @@ public class TestSyslogTcpSource { private final String bodyWithTimestamp = stamp1 + " " + data1; private final String bodyWithTandH = "<10>" + stamp1 + " " + host1 + " " + data1 + "\n"; + @ClassRule + public static final TemporaryFolder TEMP_FOLDER = new TemporaryFolder(); + + private static Path serverKeystore; + + @BeforeClass + public static void generateKeystore() throws Exception { + serverKeystore = TestKeyStores.selfSigned("CN=localhost") + .writeKeyStore(TEMP_FOLDER.newFile("server.p12").toPath(), "PKCS12", "password"); + } + private void init(String keepFields) { init(keepFields, new Context()); } @@ -96,7 +112,7 @@ public class TestSyslogTcpSource { private void initSsl() { Context context = new Context(); context.put("ssl", "true"); - context.put("keystore", "src/test/resources/server.p12"); + context.put("keystore", serverKeystore.toString()); context.put("keystore-password", "password"); context.put("keystore-type", "PKCS12"); init("none", context); diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUdpSource.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUdpSource.java similarity index 99% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUdpSource.java rename to flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUdpSource.java index 9979906cf..7d8ce85a2 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUdpSource.java +++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUdpSource.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUtils.java similarity index 99% rename from flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java rename to flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUtils.java index fd8206cdd..9834ca3ee 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java +++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.flume.source; +package org.apache.flume.source.syslog; import static io.netty.buffer.Unpooled.*; import static org.junit.Assert.assertEquals; diff --git a/flume-ng-sources/pom.xml b/flume-ng-sources/pom.xml index 683ea2a53..3318e3fd2 100644 --- a/flume-ng-sources/pom.xml +++ b/flume-ng-sources/pom.xml @@ -34,6 +34,8 @@ <modules> <module>flume-http-source</module> <module>flume-taildir-source</module> + <module>flume-syslog-source</module> + <module>flume-netcat-source</module> </modules> </project>
