From 772a828f730628b53be5e83d6024992718adf834 Mon Sep 17 00:00:00 2001 From: Paul Sandoz Date: Fri, 16 Aug 2013 12:46:30 +0200 Subject: [PATCH] 8012940: More than 50 tests failed in Serialization/DeSerialization testing (test-mangled) Reviewed-by: ksrini --- .../java/util/stream/LambdaTestMode.java | 71 +++++++++++++++++++ .../util/stream/StreamTestDataProvider.java | 10 ++- 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 jdk/test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java diff --git a/jdk/test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java b/jdk/test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java new file mode 100644 index 00000000000..b598964a89e --- /dev/null +++ b/jdk/test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.stream; + +/** + * Runtime modes of test execution. + */ +public enum LambdaTestMode { + /** + * Execution mode with no particular runtime constraints. + */ + NORMAL, + + /** + * Execution mode where tests are executed for testing lambda serialization + * and deserialization. + * + *

This mode may be queried by tests or data supplied by data + * providers, which cannot otherwise be assigned to the test group + * serialization-hostile, to not execute or declare + * serialization-hostile code or data. + * + *

This mode is enabled if the boolean system property + * {@code org.openjdk.java.util.stream.sand.mode} is declared with a + * {@code true} value. + */ + SERIALIZATION; + + /** + * {@code true} if tests are executed in the mode for testing lambda + * Serialization ANd Deserialization (SAND). + */ + private static final boolean IS_LAMBDA_SERIALIZATION_MODE = + Boolean.getBoolean("org.openjdk.java.util.stream.sand.mode"); + + /** + * + * @return the mode of test execution. + */ + public static LambdaTestMode getMode() { + return IS_LAMBDA_SERIALIZATION_MODE ? SERIALIZATION : NORMAL; + } + + /** + * + * @return {@code true} if normal test mode. + */ + public static boolean isNormalMode() { + return getMode() == NORMAL; + } +} diff --git a/jdk/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java b/jdk/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java index 08a71c479aa..cc98529df7f 100644 --- a/jdk/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java +++ b/jdk/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java @@ -96,8 +96,14 @@ public class StreamTestDataProvider { list.add(streamDataDescr("DelegatingStream(ArrayList):" + name, () -> new ArrayList<>(intsAsList).stream())); List aList = new ArrayList<>(intsAsList); - list.add(collectionDataDescr("ArrayList.Sublist:" + name, - (ints.length) <= 1 ? aList.subList(0, 0) : aList.subList(1, ints.length / 2))); + if (LambdaTestMode.isNormalMode()) { + // Only include sub-lists for normal test execution mode + // This data is serialization-hostile since the state of the + // deserialized sub-list will be out of sync with the + // enclosing list. + list.add(collectionDataDescr("ArrayList.Sublist:" + name, + (ints.length) <= 1 ? aList.subList(0, 0) : aList.subList(1, ints.length / 2))); + } list.add(collectionDataDescr("LinkedList:" + name, new LinkedList<>(intsAsList))); list.add(collectionDataDescr("HashSet:" + name, new HashSet<>(intsAsList))); list.add(collectionDataDescr("LinkedHashSet:" + name, new LinkedHashSet<>(intsAsList)));