diff --git a/pom.xml b/pom.xml
index b51cd6d76a..bc66fb9d06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -394,6 +394,7 @@
testsuite-http2
testsuite-osgi
testsuite-shading
+ testsuite-native
testsuite-native-image
testsuite-native-image-client
testsuite-native-image-client-runtime-init
diff --git a/testsuite-native/pom.xml b/testsuite-native/pom.xml
new file mode 100644
index 0000000000..6cdf0db494
--- /dev/null
+++ b/testsuite-native/pom.xml
@@ -0,0 +1,166 @@
+
+
+
+
+ 4.0.0
+
+ io.netty
+ netty-parent
+ 5.0.0.Final-SNAPSHOT
+
+
+ netty-testsuite-native
+ jar
+
+ Netty/Testsuite/Native
+
+
+ true
+ false
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+ junit
+ junit
+
+
+
+
+ skipTests
+
+
+ skipTests
+
+
+
+ true
+
+
+
+
+ default
+
+ true
+
+
+
+ ${project.groupId}
+ netty-transport-native-epoll
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ netty-transport-native-kqueue
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ netty-resolver-dns-native-macos
+ ${project.version}
+ compile
+
+
+
+
+
+ linux
+
+
+ linux
+
+
+
+
+ ${project.groupId}
+ netty-transport-native-epoll
+ ${project.version}
+ ${jni.classifier}
+ compile
+
+
+ ${project.groupId}
+ netty-transport-native-kqueue
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ netty-resolver-dns-native-macos
+ ${project.version}
+ compile
+
+
+
+
+
+ mac
+
+
+ mac
+
+
+
+
+ ${project.groupId}
+ netty-transport-native-kqueue
+ ${project.version}
+ ${jni.classifier}
+ compile
+
+
+ ${project.groupId}
+ netty-resolver-dns-native-macos
+ ${project.version}
+ ${jni.classifier}
+ compile
+
+
+ ${project.groupId}
+ netty-transport-native-epoll
+ ${project.version}
+ compile
+
+
+
+
+
+
+
+
+ maven-surefire-plugin
+
+ ${skipNativeTestsuite}
+
+
+
+
+
diff --git a/testsuite-native/src/test/java/io/netty/testsuite_native/NativeLoadingTest.java b/testsuite-native/src/test/java/io/netty/testsuite_native/NativeLoadingTest.java
new file mode 100644
index 0000000000..ae279c6eab
--- /dev/null
+++ b/testsuite-native/src/test/java/io/netty/testsuite_native/NativeLoadingTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2020 The Netty Project
+ *
+ * The Netty Project 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:
+ *
+ * https://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 io.netty.testsuite_native;
+
+import io.netty.channel.epoll.Epoll;
+import io.netty.channel.kqueue.KQueue;
+import io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+
+public class NativeLoadingTest {
+
+ @Test
+ @EnabledOnOs(OS.MAC)
+ public void testNativeLoadingKqueue() {
+ KQueue.ensureAvailability();
+ }
+
+ @Test
+ @EnabledOnOs(OS.MAC)
+ public void testNativeLoadingDnsServerAddressStreamProvider() {
+ MacOSDnsServerAddressStreamProvider.ensureAvailability();
+ }
+
+ @Test
+ @EnabledOnOs(OS.LINUX)
+ public void testNativeLoadingEpoll() {
+ Epoll.ensureAvailability();
+ }
+}