You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2026/09/01 19:31:31 UTC
(logging-flume) branch feat/sdk-test-module created (now dec490bb)
This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a change to branch feat/sdk-test-module
in repository https://gitbox.apache.org/repos/asf/logging-flume.git
at dec490bb Replace the SDK test JAR with a `flume-ng-sdk-test` module
This branch includes the following new commits:
new dec490bb Replace the SDK test JAR with a `flume-ng-sdk-test` module
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(logging-flume) 01/01: Replace the SDK test JAR with a `flume-ng-sdk-test` module
Posted by pk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a commit to branch feat/sdk-test-module
in repository https://gitbox.apache.org/repos/asf/logging-flume.git
commit dec490bb8635d90ca27a56583e58508667916d61
Author: Piotr P. Karwasz <pk...@apache.org>
AuthorDate: Tue Sep 1 21:31:17 2026 +0200
Replace the SDK test JAR with a `flume-ng-sdk-test` module
The site build runs `mvnw -Dmaven.test.skip install`, which also skips
`jar:test-jar`. Maven still resolves the full test classpath before
`compiler:testCompile` and `surefire:test` can read their skip flags, so
the cross-module `flume-ng-sdk:tests` dependency was demanded but never
produced and `deploy-site` failed to resolve it.
Assisted-By: Claude Opus 5 (1M context) <no...@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WnSh7gt5XaRzNgDYLuFzZ6
---
flume-bom/pom.xml | 5 ++
flume-ng-core/pom.xml | 3 +-
.../org/apache/flume/sink/TestRollingFileSink.java | 2 +-
.../pom.xml | 48 +++++++---------
.../org/apache/flume/sdk/test}/TestKeyStores.java | 2 +-
.../java/org/apache/flume/sdk/test}/Whitebox.java | 2 +-
.../apache/flume/sdk/test}/X509Certificates.java | 2 +-
.../flume/sdk/test/TestSelfSignedKeyStores.java | 67 ++++++++++++++++++++++
.../org/apache/flume/sdk/test/TestWhitebox.java | 37 +++++++-----
.../flume/sdk/test/TestX509Certificates.java | 57 ++++++++++++++++++
flume-ng-sdk/pom.xml | 39 -------------
flume-ng-sources/flume-http-source/pom.xml | 3 +-
.../apache/flume/source/http/TestHTTPSource.java | 4 +-
flume-ng-sources/flume-syslog-source/pom.xml | 3 +-
.../syslog/TestMultiportSyslogTCPSource.java | 4 +-
.../flume/source/syslog/TestSyslogTcpSource.java | 2 +-
flume-ng-sources/flume-taildir-source/pom.xml | 3 +-
.../flume/source/taildir/TestTaildirSource.java | 2 +-
flume-parent/pom.xml | 3 +-
pom.xml | 1 +
20 files changed, 187 insertions(+), 102 deletions(-)
diff --git a/flume-bom/pom.xml b/flume-bom/pom.xml
index 9477ac6d..f65016bd 100644
--- a/flume-bom/pom.xml
+++ b/flume-bom/pom.xml
@@ -103,6 +103,11 @@
<artifactId>flume-ng-sdk</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.flume</groupId>
+ <artifactId>flume-ng-sdk-test</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-node</artifactId>
diff --git a/flume-ng-core/pom.xml b/flume-ng-core/pom.xml
index 2f8044fe..42efd81a 100644
--- a/flume-ng-core/pom.xml
+++ b/flume-ng-core/pom.xml
@@ -46,8 +46,7 @@
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
diff --git a/flume-ng-core/src/test/java/org/apache/flume/sink/TestRollingFileSink.java b/flume-ng-core/src/test/java/org/apache/flume/sink/TestRollingFileSink.java
index c419a37b..2d948b53 100644
--- a/flume-ng-core/src/test/java/org/apache/flume/sink/TestRollingFileSink.java
+++ b/flume-ng-core/src/test/java/org/apache/flume/sink/TestRollingFileSink.java
@@ -32,7 +32,7 @@ import org.apache.flume.conf.Configurables;
import org.apache.flume.event.SimpleEvent;
import org.apache.flume.exception.ChannelException;
import org.apache.flume.instrumentation.SinkCounter;
-import org.apache.flume.util.Whitebox;
+import org.apache.flume.sdk.test.Whitebox;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.After;
diff --git a/flume-ng-sources/flume-taildir-source/pom.xml b/flume-ng-sdk-test/pom.xml
similarity index 59%
copy from flume-ng-sources/flume-taildir-source/pom.xml
copy to flume-ng-sdk-test/pom.xml
index d371c0f3..6e5083d1 100644
--- a/flume-ng-sources/flume-taildir-source/pom.xml
+++ b/flume-ng-sdk-test/pom.xml
@@ -16,45 +16,44 @@
~ 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-ng-sources</artifactId>
+ <artifactId>flume-parent</artifactId>
<version>${revision}</version>
+ <relativePath>../flume-parent/pom.xml</relativePath>
</parent>
- <groupId>org.apache.flume.flume-ng-sources</groupId>
- <artifactId>flume-taildir-source</artifactId>
- <name>Flume Taildir Source</name>
+ <artifactId>flume-ng-sdk-test</artifactId>
+ <name>Flume NG SDK Test</name>
+ <description>Test fixtures shared by the Flume modules.
+ The fixtures live in `main`, so that they are packaged in a regular JAR instead of a test JAR.</description>
<properties>
- <!-- TODO fix spotbugs/pmd violations -->
- <spotbugs.maxAllowedViolations>24</spotbugs.maxAllowedViolations>
- <pmd.maxAllowedViolations>4</pmd.maxAllowedViolations>
- <module.name>org.apache.flume.source.taildir</module.name>
+ <!-- This artifact was never released before -->
+ <bnd.baseline.fail.on.missing>false</bnd.baseline.fail.on.missing>
+ <!-- `TestKeyStores.certificate()` hands out the `X509Certificate` it was built from, which SpotBugs
+ reports as exposing internal representation. -->
+ <spotbugs.maxAllowedViolations>1</spotbugs.maxAllowedViolations>
+ <module.name>org.apache.flume.sdk.test</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-sdk</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
</dependency>
+
<dependency>
- <groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-core</artifactId>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcpkix-jdk18on</artifactId>
</dependency>
<dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk18on</artifactId>
</dependency>
<dependency>
@@ -63,12 +62,5 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
-
</project>
diff --git a/flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/TestKeyStores.java
similarity index 98%
rename from flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java
rename to flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/TestKeyStores.java
index 7be65002..5b7415c1 100644
--- a/flume-ng-sdk/src/test/java/org/apache/flume/util/TestKeyStores.java
+++ b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/TestKeyStores.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.flume.util;
+package org.apache.flume.sdk.test;
import java.io.OutputStream;
import java.nio.file.Files;
diff --git a/flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/Whitebox.java
similarity index 97%
copy from flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java
copy to flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/Whitebox.java
index 995e0ae3..881c0cc2 100644
--- a/flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java
+++ b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/Whitebox.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.flume.util;
+package org.apache.flume.sdk.test;
import org.apache.commons.lang3.reflect.FieldUtils;
diff --git a/flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/X509Certificates.java
similarity index 99%
rename from flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java
rename to flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/X509Certificates.java
index ac384500..b1ae2f44 100644
--- a/flume-ng-sdk/src/test/java/org/apache/flume/util/X509Certificates.java
+++ b/flume-ng-sdk-test/src/main/java/org/apache/flume/sdk/test/X509Certificates.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.flume.util;
+package org.apache.flume.sdk.test;
import java.math.BigInteger;
import java.security.KeyPair;
diff --git a/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestSelfSignedKeyStores.java b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestSelfSignedKeyStores.java
new file mode 100644
index 00000000..b76fc8a6
--- /dev/null
+++ b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestSelfSignedKeyStores.java
@@ -0,0 +1,67 @@
+/*
+ * 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.sdk.test;
+
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestSelfSignedKeyStores {
+
+ private static final String PASSWORD = "password";
+
+ @Test
+ public void testKeyStoreHoldsThePrivateKey() throws Exception {
+ TestKeyStores credentials = TestKeyStores.selfSigned("CN=localhost");
+ KeyStore keyStore = credentials.keyStore("JKS", PASSWORD);
+
+ Assert.assertTrue(keyStore.isKeyEntry("key"));
+ Assert.assertEquals(credentials.certificate(), keyStore.getCertificateChain("key")[0]);
+ Assert.assertNotNull(keyStore.getKey("key", PASSWORD.toCharArray()));
+ }
+
+ @Test
+ public void testTrustStoreHoldsOnlyTheCertificate() throws Exception {
+ TestKeyStores credentials = TestKeyStores.selfSigned("CN=localhost");
+ KeyStore trustStore = credentials.trustStore("JKS");
+
+ Assert.assertFalse(trustStore.isKeyEntry("cert"));
+ Assert.assertEquals(credentials.certificate(), trustStore.getCertificate("cert"));
+ }
+
+ @Test
+ public void testWrittenKeyStoreCanBeReloaded() throws Exception {
+ TestKeyStores credentials = TestKeyStores.selfSigned("CN=localhost");
+ Path file = Files.createTempFile("keystore", ".jks");
+ try {
+ credentials.writeKeyStore(file, "JKS", PASSWORD);
+
+ KeyStore reloaded = KeyStore.getInstance("JKS");
+ try (InputStream in = Files.newInputStream(file)) {
+ reloaded.load(in, PASSWORD.toCharArray());
+ }
+ X509Certificate certificate = (X509Certificate) reloaded.getCertificateChain("key")[0];
+ Assert.assertEquals(credentials.certificate(), certificate);
+ } finally {
+ Files.deleteIfExists(file);
+ }
+ }
+}
diff --git a/flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestWhitebox.java
similarity index 53%
rename from flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java
rename to flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestWhitebox.java
index 995e0ae3..16e15d20 100644
--- a/flume-ng-sdk/src/test/java/org/apache/flume/util/Whitebox.java
+++ b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestWhitebox.java
@@ -14,24 +14,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.flume.util;
+package org.apache.flume.sdk.test;
-import org.apache.commons.lang3.reflect.FieldUtils;
+import org.junit.Assert;
+import org.junit.Test;
-public class Whitebox {
- public static <T> T getInternalState(Object target, String fieldName) {
- try {
- return (T) FieldUtils.readField(target, fieldName, true);
- } catch (IllegalAccessException ex) {
- throw new RuntimeException("Unable to access field " + fieldName, ex);
- }
+public class TestWhitebox {
+
+ private static final class Target {
+ private String value = "initial";
+ }
+
+ @Test
+ public void testGetInternalState() {
+ Assert.assertEquals("initial", Whitebox.getInternalState(new Target(), "value"));
+ }
+
+ @Test
+ public void testSetInternalState() {
+ Target target = new Target();
+ Whitebox.setInternalState(target, "value", "replaced");
+ Assert.assertEquals("replaced", target.value);
}
- public static void setInternalState(Object target, String field, Object value) {
- try {
- FieldUtils.writeField(target, field, value, true);
- } catch (IllegalAccessException ex) {
- throw new RuntimeException("Unable to access field " + field, ex);
- }
+ @Test(expected = RuntimeException.class)
+ public void testUnknownFieldFails() {
+ Whitebox.getInternalState(new Target(), "missing");
}
}
diff --git a/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestX509Certificates.java b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestX509Certificates.java
new file mode 100644
index 00000000..ea31fabe
--- /dev/null
+++ b/flume-ng-sdk-test/src/test/java/org/apache/flume/sdk/test/TestX509Certificates.java
@@ -0,0 +1,57 @@
+/*
+ * 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.sdk.test;
+
+import java.security.KeyPair;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.Date;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestX509Certificates {
+
+ @Test
+ public void testSelfSignedCertificate() throws Exception {
+ KeyPair keyPair = X509Certificates.generateKeyPair();
+ X509Certificate certificate = X509Certificates.generateSelfSignedCertificate(keyPair, "CN=localhost");
+
+ Assert.assertEquals(
+ "CN=localhost", certificate.getSubjectX500Principal().getName());
+ Assert.assertEquals(certificate.getSubjectX500Principal(), certificate.getIssuerX500Principal());
+ // A self-signed certificate verifies against its own public key.
+ certificate.verify(keyPair.getPublic());
+ certificate.checkValidity(new Date());
+ }
+
+ @Test
+ public void testServerCertificateExtensions() throws Exception {
+ KeyPair keyPair = X509Certificates.generateKeyPair();
+ X509Certificate certificate = X509Certificates.generateSelfSignedCertificate(keyPair, "CN=localhost");
+
+ // A negative path length constraint marks a certificate that is not a CA.
+ Assert.assertEquals(-1, certificate.getBasicConstraints());
+ Assert.assertEquals(Collections.singletonList("1.3.6.1.5.5.7.3.1"), certificate.getExtendedKeyUsage());
+ }
+
+ @Test
+ public void testKeyPairsAreDistinct() {
+ Assert.assertNotEquals(
+ X509Certificates.generateKeyPair().getPrivate(),
+ X509Certificates.generateKeyPair().getPrivate());
+ }
+}
diff --git a/flume-ng-sdk/pom.xml b/flume-ng-sdk/pom.xml
index c5b1d20d..afc5fc81 100644
--- a/flume-ng-sdk/pom.xml
+++ b/flume-ng-sdk/pom.xml
@@ -44,19 +44,6 @@
<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.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
@@ -82,32 +69,6 @@
<build>
<plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
- <configuration>
- <!-- BND describes the main classes in a single manifest per module, which `logging-parent`
- feeds to every execution. Drop it here: the test JAR is not that bundle, and its
- Package URL needs the qualifiers of a classified artifact. -->
- <archive combine.self="override">
- <manifest>
- <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
- <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
- </manifest>
- <manifestEntries>
- <Purl>pkg:maven/${project.groupId}/${project.artifactId}@${project.version}?classifier=tests&type=test-jar</Purl>
- </manifestEntries>
- </archive>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
diff --git a/flume-ng-sources/flume-http-source/pom.xml b/flume-ng-sources/flume-http-source/pom.xml
index d7f2b585..d3def5ee 100644
--- a/flume-ng-sources/flume-http-source/pom.xml
+++ b/flume-ng-sources/flume-http-source/pom.xml
@@ -45,8 +45,7 @@
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
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 8aa5ea2e..4b182805 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
@@ -63,8 +63,8 @@ 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.flume.sdk.test.TestKeyStores;
+import org.apache.flume.sdk.test.Whitebox;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpOptions;
diff --git a/flume-ng-sources/flume-syslog-source/pom.xml b/flume-ng-sources/flume-syslog-source/pom.xml
index 1f0beb2f..50ef7a20 100644
--- a/flume-ng-sources/flume-syslog-source/pom.xml
+++ b/flume-ng-sources/flume-syslog-source/pom.xml
@@ -49,8 +49,7 @@
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
diff --git a/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java
index 4976e135..af739b58 100644
--- a/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java
+++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestMultiportSyslogTCPSource.java
@@ -62,12 +62,12 @@ 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.sdk.test.TestKeyStores;
+import org.apache.flume.sdk.test.Whitebox;
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;
import org.apache.mina.core.buffer.IoBuffer;
diff --git a/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java
index d6cf09a4..a4eb816f 100644
--- a/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java
+++ b/flume-ng-sources/flume-syslog-source/src/test/java/org/apache/flume/source/syslog/TestSyslogTcpSource.java
@@ -50,7 +50,7 @@ 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.apache.flume.sdk.test.TestKeyStores;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Assert;
diff --git a/flume-ng-sources/flume-taildir-source/pom.xml b/flume-ng-sources/flume-taildir-source/pom.xml
index d371c0f3..2444b0f8 100644
--- a/flume-ng-sources/flume-taildir-source/pom.xml
+++ b/flume-ng-sources/flume-taildir-source/pom.xml
@@ -43,8 +43,7 @@
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/flume-ng-sources/flume-taildir-source/src/test/java/org/apache/flume/source/taildir/TestTaildirSource.java b/flume-ng-sources/flume-taildir-source/src/test/java/org/apache/flume/source/taildir/TestTaildirSource.java
index 4c8ec6a6..ff4bb18f 100644
--- a/flume-ng-sources/flume-taildir-source/src/test/java/org/apache/flume/source/taildir/TestTaildirSource.java
+++ b/flume-ng-sources/flume-taildir-source/src/test/java/org/apache/flume/source/taildir/TestTaildirSource.java
@@ -57,7 +57,7 @@ import org.apache.flume.conf.Configurables;
import org.apache.flume.exception.ChannelException;
import org.apache.flume.lifecycle.LifecycleController;
import org.apache.flume.lifecycle.LifecycleState;
-import org.apache.flume.util.Whitebox;
+import org.apache.flume.sdk.test.Whitebox;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
diff --git a/flume-parent/pom.xml b/flume-parent/pom.xml
index 8036ba0a..03005e9c 100644
--- a/flume-parent/pom.xml
+++ b/flume-parent/pom.xml
@@ -213,9 +213,8 @@
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
+ <artifactId>flume-ng-sdk-test</artifactId>
<version>${flume-project.version}</version>
- <classifier>tests</classifier>
<scope>test</scope>
</dependency>
diff --git a/pom.xml b/pom.xml
index 061bef42..019f9ad8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,7 @@
-->
<module>flume-ng-channels</module>
<module>flume-ng-sdk</module>
+ <module>flume-ng-sdk-test</module>
<!-- Temporarily disable integration tests
<module>flume-ng-tests</module>
-->