Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate servicetalk-transport-netty-internal tests to JUnit 5 (#1568) #1601

Merged

Conversation

kashike
Copy link
Contributor

@kashike kashike commented Jun 2, 2021

Motivation:

  • JUnit 5 leverages features from Java 8 or later, such as lambda functions, making tests more powerful and easier to maintain.
  • JUnit 5 has added some very useful new features for describing, organizing, and executing tests. For instance, tests get better display names and can be organized hierarchically.
  • JUnit 5 is organized into multiple libraries, so only the features you need are imported into your project. With build systems such as Maven and Gradle, including the right libraries is easy.
  • JUnit 5 can use more than one extension at a time, which JUnit 4 could not (only one runner could be used at a time). This means you can easily combine the Spring extension with other extensions (such as your own custom extension).

Modifications:

  • Unit tests have been migrated from JUnit 4 to JUnit 5

Result:

Module servicetalk-transport-netty-internal now runs tests using JUnit 5

@kashike kashike mentioned this pull request Jun 2, 2021
44 tasks
Copy link
Member

@idelpivnitskiy idelpivnitskiy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @kashike!

Please, apply the following patch. I did some minor changes:

Index: servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/RequestResponseCloseHandlerTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/RequestResponseCloseHandlerTest.java b/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/RequestResponseCloseHandlerTest.java
--- a/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/RequestResponseCloseHandlerTest.java	(revision b9e6fd65aed3af06810928802aaafd2e11432e26)
+++ b/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/RequestResponseCloseHandlerTest.java	(date 1622657110027)
@@ -177,7 +177,6 @@
     private static Collection<Object[]> scenariosData() { // If inserting lines here, adjust the `offset` variable below
         StackTraceElement se = Thread.currentThread().getStackTrace()[1];
         List<Object[]> params = asList(new Object[][]{
-                // {Mode, Events, ExpectedEvent, Desc} - IGNORE disables test-case, keep contiguous on single line
                 {C, e(OB, OE, IB, IE), NIL, "sequential, no close"},
                 {C, e(OB, OE, IB, OB, OE, IE, IB, IE), NIL, "pipelined, no close"},
                 {C, e(OB, OC, OE, IB, IE, FC), PCO, "sequential, closing outbound"},
@@ -265,7 +264,7 @@
                 {S, e(IB, IE, IS, OS, FC), CCI, "Input closed after read, outbound closed while writing"},
         });
         String fileName = se.getFileName();
-        int offset = se.getLineNumber() + 3; // Lines between `se` and first parameter
+        int offset = se.getLineNumber() + 2; // Lines between `se` and first parameter
         for (int i = 0; i < params.size(); i++) { // Appends param location as last entry
             Object[] o = params.get(i);
             params.set(i, new Object[]{o[0], o[1], o[2], o[3], fileName + ":" + (offset + i)});
@@ -297,11 +296,7 @@
         /**
          * Simulates netty channel behavior, behavior verified by {@link ChannelBehavior} below.
          */
-        private void setup(final ScenarioMode mode, final List<ScenarioEvents> events, final ScenarioExpectEvent expectEvent,
-                           final String desc, final String location) {
-
-            // A description prefixed with "IGNORE " will not fail the suite!
-            assumeFalse(desc.startsWith("IGNORE "));
+        private void setUp(final ScenarioMode mode) {
             ctx = mock(ChannelHandlerContext.class);
             channel = mock(SocketChannel.class, "[id: 0xmocked, L:mocked - R:mocked]");
             when(ctx.channel()).thenReturn(channel);
@@ -368,16 +363,14 @@
             assertTrue(!closed.get() && !outputShutdown.get(), "Channel Closed (write) - testcase invalid or bug?");
         }
 
-        @ParameterizedTest(name = "{index}. {3} - {0} {1} = {2}")
+        @ParameterizedTest(name = "{index}. {3} - {0} {1} = {2}, {4}")
         @MethodSource("io.servicetalk.transport.netty.internal.RequestResponseCloseHandlerTest#scenariosData")
-        void simulate(final ScenarioMode mode,
-                             final List<ScenarioEvents> events,
-                             final ScenarioExpectEvent expectEvent,
-                             final String desc,
-                             final String location) {
-            setup(mode, events, expectEvent, desc, location);
+        void simulate(final ScenarioMode mode, final List<ScenarioEvents> events, final ScenarioExpectEvent expectEvent,
+                      final String desc, final String location) {
+            setUp(mode);
             LOGGER.debug("Test.Params: ({})", location); // Intellij jump to parameter format, don't change!
-            LOGGER.debug("[{}] {} - {} = {}", desc, mode, events, expectEvent);
+            LOGGER.debug("{} - {} {} = {}", desc, mode, events, expectEvent);
+
             InOrder order = inOrder(h, channel, pipeline, scc);
             verify(h).registerEventHandler(eq(channel), any());
             for (ScenarioEvents event : events) {
Index: servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/NonPipelinedCloseHandlerTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/NonPipelinedCloseHandlerTest.java b/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/NonPipelinedCloseHandlerTest.java
--- a/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/NonPipelinedCloseHandlerTest.java	(revision b9e6fd65aed3af06810928802aaafd2e11432e26)
+++ b/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/NonPipelinedCloseHandlerTest.java	(date 1622657110018)
@@ -28,6 +28,8 @@
 import io.netty.util.concurrent.EventExecutor;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 import java.util.List;
@@ -70,6 +72,8 @@
 import static org.mockito.Mockito.when;
 
 class NonPipelinedCloseHandlerTest {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NonPipelinedCloseHandlerTest.class);
+
     private ChannelHandlerContext ctx;
     private Channel channel;
     private CloseHandler h;
@@ -132,7 +136,7 @@
     }
 
     @SuppressWarnings("unused")
-    private static Collection<Object[]> data() {
+    private static Collection<Object[]> data() {    // If inserting lines here, adjust the `offset` variable below
         StackTraceElement se = Thread.currentThread().getStackTrace()[1];
         List<Object[]> params = asList(new Object[][] {
                 {true, e(OB, OE, IB, IE), NIL, "sequential, no close"},
@@ -193,7 +197,7 @@
                 {false, e(IB, IE, OB, OE, OC), PCO, "protocol outbound close while idle"},
         });
         String fileName = se.getFileName();
-        int offset = se.getLineNumber() + 3; // Lines between `se` and first parameter
+        int offset = se.getLineNumber() + 2; // Lines between `se` and first parameter
         for (int i = 0; i < params.size(); i++) { // Appends param location as last entry
             Object[] o = params.get(i);
             params.set(i, new Object[]{o[0], o[1], o[2], o[3], fileName + ":" + (offset + i)});
@@ -203,14 +207,13 @@
         return params;
     }
 
-    @ParameterizedTest(name = "{index}. {3} - {0} {1} = {2}")
+    @ParameterizedTest(name = "{index}. {3}: client={0}, {1} = {2}, {4}")
     @MethodSource("data")
-    void simulate(final boolean client,
-                         final List<Events> events,
-                         final ExpectEvent expectEvent,
-                         final String desc,
-                         final String location) {
+    void simulate(final boolean client, final List<Events> events, final ExpectEvent expectEvent,
+                  final String desc, final String location) {
         setUp(client);
+        LOGGER.debug("Test.Params: ({})", location); // Intellij jump to parameter format, don't change!
+        LOGGER.debug("{}: client={}, {} = {}", desc, client, events, expectEvent);
 
         for (Events event : events) {
             switch (event) {

Also, you have some checkstyle violations:
https://github.com/apple/servicetalk/pull/1601/checks?check_run_id=2729369372

Error: eckstyle] [ERROR] /home/runner/work/servicetalk/servicetalk/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/FlushStrategyHolderTest.java:30:5: Redundant 'public' modifier. [RedundantModifier]
1521

1522
Error: eckstyle] [ERROR] /home/runner/work/servicetalk/servicetalk/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/SslCloseNotifyAlertClientHandlingTest.java:30:5: Redundant 'public' modifier. [RedundantModifier]
1523
> Task :servicetalk-transport-netty-internal:checkstyleTest FAILED
1524
Error: eckstyle] [ERROR] /home/runner/work/servicetalk/servicetalk/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/SslCloseNotifyAlertServerHandlingTest.java:35:5: Redundant 'public' modifier. [RedundantModifier]
1525
Error: eckstyle] [ERROR] /home/runner/work/servicetalk/servicetalk/servicetalk-transport-netty-internal/src/test/java/io/servicetalk/transport/netty/internal/WriteStreamSubscriberFutureListenersTest.java:57:5: Redundant 'public' modifier. [RedundantModifier]

…1568)

Motivation:

- JUnit 5 leverages features from Java 8 or later, such as lambda functions, making tests more powerful and easier to maintain.
- JUnit 5 has added some very useful new features for describing, organizing, and executing tests. For instance, tests get better display names and can be organized hierarchically.
- JUnit 5 is organized into multiple libraries, so only the features you need are imported into your project. With build systems such as Maven and Gradle, including the right libraries is easy.
- JUnit 5 can use more than one extension at a time, which JUnit 4 could not (only one runner could be used at a time). This means you can easily combine the Spring extension with other extensions (such as your own custom extension).

Modifications:

- Unit tests have been migrated from JUnit 4 to JUnit 5

Result:

Module servicetalk-transport-netty-internal now runs tests using JUnit 5
@kashike kashike force-pushed the feature/junit-5/transport-netty-internal branch from b9e6fd6 to af6dd73 Compare June 2, 2021 18:22
@kashike
Copy link
Contributor Author

kashike commented Jun 2, 2021

@idelpivnitskiy Changes applied.

@idelpivnitskiy
Copy link
Member

Thank you, @kashike!

Next time consider pushing additional PRs to the branch instead of squashing and force pushing. It makes it easier for reviewers to see the changes. Otherwise, we have to review the full PR again.
GitHub UI allows us to squash before merging.

@idelpivnitskiy idelpivnitskiy merged commit e890ac9 into apple:main Jun 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants