From 26a217c8e75b238bbba5f1799b7d91b5b4910123 Mon Sep 17 00:00:00 2001 From: John Roesler Date: Wed, 5 Aug 2020 15:52:50 -0500 Subject: [PATCH] MINOR: Streams integration tests should not call exit (#9067) - replace System.exit with Exit.exit in all relevant classes - forbid use of System.exit in all relevant classes and add exceptions for others Co-authored-by: John Roesler Co-authored-by: Matthias J. Sax Reviewers: Lucas Bradstreet , Ismael Juma --- checkstyle/checkstyle.xml | 8 ++++++++ checkstyle/suppressions.xml | 19 +++++++++++++++---- .../examples/pageview/PageViewTypedDemo.java | 2 +- .../wordcount/WordCountProcessorDemo.java | 2 +- .../SmokeTestDriverIntegrationTest.java | 7 +++++++ .../tests/BrokerCompatibilityTest.java | 5 +++-- .../StreamsBrokerDownResilienceTest.java | 6 +++--- .../kafka/streams/tests/StreamsEosTest.java | 11 ++++++----- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../tests/StreamsStandByReplicaTest.java | 10 +++++----- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../kafka/streams/tests/StreamsSmokeTest.java | 7 ++++--- .../tools/TransactionalMessageCopier.java | 2 +- 16 files changed, 74 insertions(+), 40 deletions(-) diff --git a/checkstyle/checkstyle.xml b/checkstyle/checkstyle.xml index 13cfdb82bd0..91045adc608 100644 --- a/checkstyle/checkstyle.xml +++ b/checkstyle/checkstyle.xml @@ -103,6 +103,14 @@ + + + + + + + + diff --git a/checkstyle/suppressions.xml b/checkstyle/suppressions.xml index f6bafbfcfe5..57cf0798137 100644 --- a/checkstyle/suppressions.xml +++ b/checkstyle/suppressions.xml @@ -17,8 +17,12 @@ files="(ApiMessageType).java|MessageDataGenerator.java"/> + + - + @@ -167,7 +171,7 @@ - + @@ -195,16 +199,19 @@ - + + + + - + + { + throw new AssertionError("Test called exit(). code:" + statusCode + " message:" + message); + }); + Exit.setHaltProcedure((statusCode, message) -> { + throw new AssertionError("Test called halt(). code:" + statusCode + " message:" + message); + }); int numClientsCreated = 0; final ArrayList clients = new ArrayList<>(); diff --git a/streams/src/test/java/org/apache/kafka/streams/tests/BrokerCompatibilityTest.java b/streams/src/test/java/org/apache/kafka/streams/tests/BrokerCompatibilityTest.java index 5b8e48eb8c7..961d76e2d69 100644 --- a/streams/src/test/java/org/apache/kafka/streams/tests/BrokerCompatibilityTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/tests/BrokerCompatibilityTest.java @@ -28,6 +28,7 @@ import org.apache.kafka.common.serialization.Serde; import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.KafkaStreams; import org.apache.kafka.streams.StreamsBuilder; @@ -49,7 +50,7 @@ public class BrokerCompatibilityTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("BrokerCompatibilityTest are expecting two parameters: propFile, processingMode; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } System.out.println("StreamsTest instance started"); @@ -62,7 +63,7 @@ public class BrokerCompatibilityTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } streamsProperties.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-streams-system-test-broker-compatibility"); diff --git a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsBrokerDownResilienceTest.java b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsBrokerDownResilienceTest.java index 5b879f7c0b5..c1fef626454 100644 --- a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsBrokerDownResilienceTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsBrokerDownResilienceTest.java @@ -49,7 +49,7 @@ public class StreamsBrokerDownResilienceTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsBrokerDownResilienceTest are expecting two parameters: propFile, additionalConfigs; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } System.out.println("StreamsTest instance started"); @@ -62,7 +62,7 @@ public class StreamsBrokerDownResilienceTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } streamsProperties.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-streams-resilience"); @@ -86,7 +86,7 @@ public class StreamsBrokerDownResilienceTest { StreamsConfig.producerPrefix(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG), StreamsConfig.producerPrefix(ProducerConfig.MAX_BLOCK_MS_CONFIG))); - System.exit(1); + Exit.exit(1); } final StreamsBuilder builder = new StreamsBuilder(); diff --git a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsEosTest.java b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsEosTest.java index 52af996edaa..aa195d09c28 100644 --- a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsEosTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsEosTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -31,7 +32,7 @@ public class StreamsEosTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsEosTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -43,7 +44,7 @@ public class StreamsEosTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command) || "process-complex".equals(command)) { @@ -51,7 +52,7 @@ public class StreamsEosTest { !StreamsConfig.EXACTLY_ONCE_BETA.equals(processingGuarantee)) { System.err.println("processingGuarantee must be either " + StreamsConfig.EXACTLY_ONCE + " or " + StreamsConfig.EXACTLY_ONCE_BETA); - System.exit(1); + Exit.exit(1); } } @@ -62,7 +63,7 @@ public class StreamsEosTest { System.out.flush(); if (command == null || propFileName == null) { - System.exit(-1); + Exit.exit(-1); } switch (command) { @@ -84,7 +85,7 @@ public class StreamsEosTest { default: System.out.println("unknown command: " + command); System.out.flush(); - System.exit(-1); + Exit.exit(-1); } } diff --git a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 933fb7d8909..1b425c50739 100644 --- a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -64,7 +65,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + ", " + StreamsConfig.EXACTLY_ONCE + ", or " + StreamsConfig.EXACTLY_ONCE_BETA); - System.exit(1); + Exit.exit(1); } } diff --git a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsStandByReplicaTest.java b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsStandByReplicaTest.java index 0d424749dad..4da2b2d4815 100644 --- a/streams/src/test/java/org/apache/kafka/streams/tests/StreamsStandByReplicaTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/tests/StreamsStandByReplicaTest.java @@ -48,7 +48,7 @@ public class StreamsStandByReplicaTest { if (args.length < 2) { System.err.println("StreamsStandByReplicaTest are expecting two parameters: " + "propFile, additionalConfigs; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } System.out.println("StreamsTest instance started"); @@ -61,7 +61,7 @@ public class StreamsStandByReplicaTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } streamsProperties.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-streams-standby-tasks"); @@ -75,7 +75,7 @@ public class StreamsStandByReplicaTest { if (additionalConfigs == null) { System.err.println("additional configs are not provided"); System.err.flush(); - System.exit(1); + Exit.exit(1); } final Map updated = SystemTestUtil.parseConfigs(additionalConfigs); @@ -92,7 +92,7 @@ public class StreamsStandByReplicaTest { sinkTopic1, sinkTopic2)); System.err.flush(); - System.exit(1); + Exit.exit(1); } streamsProperties.putAll(updated); @@ -104,7 +104,7 @@ public class StreamsStandByReplicaTest { StreamsConfig.producerPrefix(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG), StreamsConfig.producerPrefix(ProducerConfig.MAX_BLOCK_MS_CONFIG))); - System.exit(1); + Exit.exit(1); } final StreamsBuilder builder = new StreamsBuilder(); diff --git a/streams/upgrade-system-tests-22/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/upgrade-system-tests-22/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 07c7d5d82eb..f280eb07218 100644 --- a/streams/upgrade-system-tests-22/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/upgrade-system-tests-22/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -63,7 +64,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + " or " + StreamsConfig.EXACTLY_ONCE); - System.exit(1); + Exit.exit(1); } } diff --git a/streams/upgrade-system-tests-23/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/upgrade-system-tests-23/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 07c7d5d82eb..f280eb07218 100644 --- a/streams/upgrade-system-tests-23/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/upgrade-system-tests-23/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -63,7 +64,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + " or " + StreamsConfig.EXACTLY_ONCE); - System.exit(1); + Exit.exit(1); } } diff --git a/streams/upgrade-system-tests-24/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/upgrade-system-tests-24/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 07c7d5d82eb..f280eb07218 100644 --- a/streams/upgrade-system-tests-24/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/upgrade-system-tests-24/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -63,7 +64,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + " or " + StreamsConfig.EXACTLY_ONCE); - System.exit(1); + Exit.exit(1); } } diff --git a/streams/upgrade-system-tests-25/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/upgrade-system-tests-25/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 07c7d5d82eb..f280eb07218 100644 --- a/streams/upgrade-system-tests-25/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/upgrade-system-tests-25/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -63,7 +64,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + " or " + StreamsConfig.EXACTLY_ONCE); - System.exit(1); + Exit.exit(1); } } diff --git a/streams/upgrade-system-tests-26/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java b/streams/upgrade-system-tests-26/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java index 07c7d5d82eb..f280eb07218 100644 --- a/streams/upgrade-system-tests-26/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java +++ b/streams/upgrade-system-tests-26/src/test/java/org/apache/kafka/streams/tests/StreamsSmokeTest.java @@ -16,6 +16,7 @@ */ package org.apache.kafka.streams.tests; +import org.apache.kafka.common.utils.Exit; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.streams.StreamsConfig; @@ -40,7 +41,7 @@ public class StreamsSmokeTest { public static void main(final String[] args) throws IOException { if (args.length < 2) { System.err.println("StreamsSmokeTest are expecting two parameters: propFile, command; but only see " + args.length + " parameter"); - System.exit(1); + Exit.exit(1); } final String propFileName = args[0]; @@ -53,7 +54,7 @@ public class StreamsSmokeTest { if (kafka == null) { System.err.println("No bootstrap kafka servers specified in " + StreamsConfig.BOOTSTRAP_SERVERS_CONFIG); - System.exit(1); + Exit.exit(1); } if ("process".equals(command)) { @@ -63,7 +64,7 @@ public class StreamsSmokeTest { System.err.println("processingGuarantee must be either " + StreamsConfig.AT_LEAST_ONCE + " or " + StreamsConfig.EXACTLY_ONCE); - System.exit(1); + Exit.exit(1); } } diff --git a/tools/src/main/java/org/apache/kafka/tools/TransactionalMessageCopier.java b/tools/src/main/java/org/apache/kafka/tools/TransactionalMessageCopier.java index 13c18d088b5..cbdfa4df1a2 100644 --- a/tools/src/main/java/org/apache/kafka/tools/TransactionalMessageCopier.java +++ b/tools/src/main/java/org/apache/kafka/tools/TransactionalMessageCopier.java @@ -382,6 +382,6 @@ public class TransactionalMessageCopier { consumer.close(); } } - System.exit(0); + Exit.exit(0); } }