RFR 8012940 More than 50 tests failed in Serialization/DeSerialization testing (test-mangled)
Kumar Srinivasan
kumar.x.srinivasan at oracle.com
Tue Aug 13 14:07:16 UTC 2013
Hi Paul,
Looks good, you can add me as reviewer.
Thanks for doing this.
Kumar
> Hi,
>
> The updates to stream tests below are in preparation for when the lambda serialization/deserialization tests (SAND tests) transition from testing with lambda to tl. Doing this now so we don't forget later.
>
> The SAND tests do a clever trick of byte code re-writing our existing tests but for certain tests this does not work. Some of those tests are grouped in the "serialisation-hostile" test group, but in certain cases, such as for data providers, it is not possible to do this and we need to resort to some runtime check, one such case is sub lists of array lists.
>
> Paul.
>
> diff -r cc64a05836a7 test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/test/java/util/stream/bootlib/java/util/stream/LambdaTestMode.java Tue Aug 13 15:29:24 2013 +0200
> @@ -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.
> + *
> + * <p>This mode may be queried by tests or data supplied by data
> + * providers, which cannot otherwise be assigned to the test group
> + * <em>serialization-hostile</em>, to not execute or declare
> + * serialization-hostile code or data.
> + *
> + * <p>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 -r cc64a05836a7 test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java
> --- a/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java Mon Aug 12 16:09:24 2013 -0400
> +++ b/test/java/util/stream/bootlib/java/util/stream/StreamTestDataProvider.java Tue Aug 13 15:29:24 2013 +0200
> @@ -96,8 +96,14 @@
> list.add(streamDataDescr("DelegatingStream(ArrayList):" + name,
> () -> new ArrayList<>(intsAsList).stream()));
> List<Integer> 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)));
More information about the core-libs-dev
mailing list