You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tz...@apache.org on 2019/01/17 11:53:57 UTC

[flink] 06/06: [FLINK-10778] [tests] Extend all TypeSerializerSnapshotMigrationTestBase subclasses to test restoring from 1.7

This is an automated email from the ASF dual-hosted git repository.

tzulitai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git

commit 76dd766aab76befa95937476e5fa80a29099e86a
Author: Tzu-Li (Gordon) Tai <tz...@apache.org>
AuthorDate: Tue Jan 15 18:26:16 2019 +0100

    [FLINK-10778] [tests] Extend all TypeSerializerSnapshotMigrationTestBase subclasses to test restoring from 1.7
    
    This closes #7504.
---
 ...mpositeTypeSerializerSnapshotMigrationTest.java |  46 +--
 .../TypeSerializerSnapshotMigrationTestBase.java   | 109 +++++++
 .../BaseTypeSerializerSnapshotMigrationTest.java   | 352 ++-------------------
 .../base/ListSerializerSnapshotMigrationTest.java  |  37 ++-
 .../base/MapSerializerSnapshotMigrationTest.java   |  38 ++-
 ...mitiveArraySerializerSnapshotMigrationTest.java | 166 +++-------
 ...lizer-data => flink-1.6-either-serializer-data} | Bin
 ...apshot => flink-1.6-either-serializer-snapshot} | Bin
 ...ata => flink-1.6-generic-array-serializer-data} | Bin
 ...=> flink-1.6-generic-array-serializer-snapshot} | Bin
 .../resources/flink-1.7-big-dec-serializer-data    | Bin 0 -> 300 bytes
 .../flink-1.7-big-dec-serializer-snapshot          | Bin 0 -> 155 bytes
 .../resources/flink-1.7-big-int-serializer-data    | Bin 0 -> 150 bytes
 .../flink-1.7-big-int-serializer-snapshot          | Bin 0 -> 155 bytes
 ...ink-1.7-boolean-primitive-array-serializer-data | Bin 0 -> 90 bytes
 ...1.7-boolean-primitive-array-serializer-snapshot | Bin 0 -> 212 bytes
 .../resources/flink-1.7-boolean-serializer-data    |   1 +
 .../flink-1.7-boolean-serializer-snapshot          | Bin 0 -> 158 bytes
 .../flink-1.7-boolean-value-serializer-data        | Bin 0 -> 10 bytes
 .../flink-1.7-boolean-value-serializer-snapshot    | Bin 0 -> 173 bytes
 .../flink-1.7-byte-primitive-array-serializer-data | Bin 0 -> 100 bytes
 ...nk-1.7-byte-primitive-array-serializer-snapshot | Bin 0 -> 203 bytes
 .../test/resources/flink-1.7-byte-serializer-data  |   1 +
 .../resources/flink-1.7-byte-serializer-snapshot   | Bin 0 -> 149 bytes
 .../resources/flink-1.7-byte-value-serializer-data |   1 +
 .../flink-1.7-byte-value-serializer-snapshot       | Bin 0 -> 164 bytes
 .../flink-1.7-char-primitive-array-serializer-data | Bin 0 -> 240 bytes
 ...nk-1.7-char-primitive-array-serializer-snapshot | Bin 0 -> 203 bytes
 .../test/resources/flink-1.7-char-serializer-data  | Bin 0 -> 20 bytes
 .../resources/flink-1.7-char-serializer-snapshot   | Bin 0 -> 149 bytes
 .../resources/flink-1.7-char-value-serializer-data | Bin 0 -> 20 bytes
 .../flink-1.7-char-value-serializer-snapshot       | Bin 0 -> 164 bytes
 .../test/resources/flink-1.7-date-serializer-data  | Bin 0 -> 80 bytes
 .../resources/flink-1.7-date-serializer-snapshot   | Bin 0 -> 149 bytes
 ...link-1.7-double-primitive-array-serializer-data | Bin 0 -> 360 bytes
 ...-1.7-double-primitive-array-serializer-snapshot | Bin 0 -> 209 bytes
 .../resources/flink-1.7-double-serializer-data     |   1 +
 .../resources/flink-1.7-double-serializer-snapshot | Bin 0 -> 155 bytes
 .../flink-1.7-double-value-serializer-data         |   1 +
 .../flink-1.7-double-value-serializer-snapshot     | Bin 0 -> 170 bytes
 .../resources/flink-1.7-either-serializer-data     | Bin 0 -> 130 bytes
 .../resources/flink-1.7-either-serializer-snapshot | Bin 0 -> 383 bytes
 ...flink-1.7-float-primitive-array-serializer-data | Bin 0 -> 160 bytes
 ...k-1.7-float-primitive-array-serializer-snapshot | Bin 0 -> 206 bytes
 .../test/resources/flink-1.7-float-serializer-data |   1 +
 .../resources/flink-1.7-float-serializer-snapshot  | Bin 0 -> 152 bytes
 .../flink-1.7-float-value-serializer-data          |   1 +
 .../flink-1.7-float-value-serializer-snapshot      | Bin 0 -> 167 bytes
 .../flink-1.7-generic-array-serializer-data        | Bin 0 -> 280 bytes
 .../flink-1.7-generic-array-serializer-snapshot    | Bin 0 -> 270 bytes
 .../flink-1.7-int-primitive-array-serializer-data  | Bin 0 -> 160 bytes
 ...ink-1.7-int-primitive-array-serializer-snapshot | Bin 0 -> 200 bytes
 .../test/resources/flink-1.7-int-serializer-data   | Bin 0 -> 40 bytes
 .../resources/flink-1.7-int-serializer-snapshot    | Bin 0 -> 146 bytes
 .../resources/flink-1.7-int-value-serializer-data  | Bin 0 -> 40 bytes
 .../flink-1.7-int-value-serializer-snapshot        | Bin 0 -> 161 bytes
 .../test/resources/flink-1.7-list-serializer-data  | Bin 0 -> 240 bytes
 .../resources/flink-1.7-list-serializer-snapshot   | Bin 0 -> 238 bytes
 .../flink-1.7-long-primitive-array-serializer-data | Bin 0 -> 280 bytes
 ...nk-1.7-long-primitive-array-serializer-snapshot | Bin 0 -> 203 bytes
 .../test/resources/flink-1.7-long-serializer-data  | Bin 0 -> 80 bytes
 .../resources/flink-1.7-long-serializer-snapshot   | Bin 0 -> 149 bytes
 .../resources/flink-1.7-long-value-serializer-data | Bin 0 -> 80 bytes
 .../flink-1.7-long-value-serializer-snapshot       | Bin 0 -> 164 bytes
 .../test/resources/flink-1.7-map-serializer-data   | Bin 0 -> 390 bytes
 .../resources/flink-1.7-map-serializer-snapshot    | Bin 0 -> 379 bytes
 .../resources/flink-1.7-null-value-serializer-data |   0
 .../flink-1.7-null-value-serializer-snapshot       | Bin 0 -> 164 bytes
 ...flink-1.7-short-primitive-array-serializer-data | Bin 0 -> 120 bytes
 ...k-1.7-short-primitive-array-serializer-snapshot | Bin 0 -> 206 bytes
 .../test/resources/flink-1.7-short-serializer-data | Bin 0 -> 20 bytes
 .../resources/flink-1.7-short-serializer-snapshot  | Bin 0 -> 152 bytes
 .../flink-1.7-short-value-serializer-data          | Bin 0 -> 20 bytes
 .../flink-1.7-short-value-serializer-snapshot      | Bin 0 -> 167 bytes
 .../resources/flink-1.7-sql-date-serializer-data   | Bin 0 -> 80 bytes
 .../flink-1.7-sql-date-serializer-snapshot         | Bin 0 -> 158 bytes
 .../resources/flink-1.7-sql-time-serializer-data   | Bin 0 -> 80 bytes
 .../flink-1.7-sql-time-serializer-snapshot         | Bin 0 -> 158 bytes
 .../flink-1.7-sql-timestamp-serializer-data        | Bin 0 -> 120 bytes
 .../flink-1.7-sql-timestamp-serializer-snapshot    | Bin 0 -> 173 bytes
 .../flink-1.7-string-array-serializer-data         | Bin 0 -> 240 bytes
 .../flink-1.7-string-array-serializer-snapshot     | Bin 0 -> 182 bytes
 .../resources/flink-1.7-string-serializer-data     |   1 +
 .../resources/flink-1.7-string-serializer-snapshot | Bin 0 -> 155 bytes
 .../flink-1.7-string-value-serializer-data         |   1 +
 .../flink-1.7-string-value-serializer-snapshot     | Bin 0 -> 170 bytes
 .../typeutils/AvroSerializerMigrationTest.java     |  53 ++--
 ...7-avro-generic-type-serializer-address-snapshot | Bin 0 -> 370 bytes
 .../flink-1.7-avro-type-serializer-address-data    | Bin 0 -> 240 bytes
 ...flink-1.7-avro-type-serializer-address-snapshot | Bin 0 -> 380 bytes
 ...ockableTypeSerializerSnapshotMigrationTest.java |  39 ++-
 .../flink-1.7-lockable-type-serializer-data        | Bin 0 -> 160 bytes
 .../flink-1.7-lockable-type-serializer-snapshot    | Bin 0 -> 241 bytes
 .../ListViewSerializerSnapshotMigrationTest.java   |  39 ++-
 .../MapViewSerializerSnapshotMigrationTest.java    |  40 ++-
 .../resources/flink-1.7-list-view-serializer-data  | Bin 0 -> 240 bytes
 .../flink-1.7-list-view-serializer-snapshot        | Bin 0 -> 314 bytes
 .../resources/flink-1.7-map-view-serializer-data   | Bin 0 -> 390 bytes
 .../flink-1.7-map-view-serializer-snapshot         | Bin 0 -> 454 bytes
 .../state/ArrayListSerializerMigrationTest.java    |  37 ++-
 .../resources/flink-1.7-arraylist-serializer-data  | Bin 0 -> 240 bytes
 .../flink-1.7-arraylist-serializer-snapshot        | Bin 0 -> 231 bytes
 ...ScalaEitherSerializerSnapshotMigrationTest.java |  40 ++-
 .../flink-1.7-scala-either-serializer-data         | Bin 0 -> 130 bytes
 .../flink-1.7-scala-either-serializer-snapshot     | Bin 0 -> 381 bytes
 105 files changed, 412 insertions(+), 593 deletions(-)

diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/CompositeTypeSerializerSnapshotMigrationTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/CompositeTypeSerializerSnapshotMigrationTest.java
index c8833b6..6294bef 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/CompositeTypeSerializerSnapshotMigrationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/CompositeTypeSerializerSnapshotMigrationTest.java
@@ -25,12 +25,10 @@ import org.apache.flink.api.common.typeutils.base.StringSerializer;
 import org.apache.flink.api.java.typeutils.runtime.EitherSerializer;
 import org.apache.flink.api.java.typeutils.runtime.JavaEitherSerializerSnapshot;
 import org.apache.flink.testutils.migration.MigrationVersion;
-import org.apache.flink.types.Either;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import java.util.Arrays;
 import java.util.Collection;
 
 /**
@@ -45,33 +43,21 @@ public class CompositeTypeSerializerSnapshotMigrationTest extends TypeSerializer
 
 	@SuppressWarnings("unchecked")
 	@Parameterized.Parameters(name = "Test Specification = {0}")
-	public static Collection<Object[]> testSpecifications() {
-
-		// Either<String, Integer>
-
-		final TestSpecification<Either<String, Integer>> either =TestSpecification.<Either<String, Integer>>builder(
-				"1.6-either",
-				EitherSerializer.class,
-				JavaEitherSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> new EitherSerializer<>(StringSerializer.INSTANCE, IntSerializer.INSTANCE))
-			.withSnapshotDataLocation("flink-1.6-either-type-serializer-snapshot")
-			.withTestData("flink-1.6-either-type-serializer-data", 10);
-
-		// GenericArray<String>
-
-		final TestSpecification<String[]> array = TestSpecification.<String[]>builder(
-				"1.6-generic-array",
-				GenericArraySerializer.class,
-				GenericArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> new GenericArraySerializer<>(String.class, StringSerializer.INSTANCE))
-			.withSnapshotDataLocation("flink-1.6-array-type-serializer-snapshot")
-			.withTestData("flink-1.6-array-type-serializer-data", 10);
-
-		return Arrays.asList(
-			new Object[]{either},
-			new Object[]{array}
-		);
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			"either-serializer",
+			EitherSerializer.class,
+			JavaEitherSerializerSnapshot.class,
+			() -> new EitherSerializer<>(StringSerializer.INSTANCE, IntSerializer.INSTANCE));
+		testSpecifications.add(
+			"generic-array-serializer",
+			GenericArraySerializer.class,
+			GenericArraySerializerSnapshot.class,
+			() -> new GenericArraySerializer<>(String.class, StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeSerializerSnapshotMigrationTestBase.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeSerializerSnapshotMigrationTestBase.java
index 05143a8..57c939d 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeSerializerSnapshotMigrationTestBase.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeSerializerSnapshotMigrationTestBase.java
@@ -37,9 +37,13 @@ import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
+import static org.apache.flink.util.Preconditions.checkArgument;
 import static org.apache.flink.util.Preconditions.checkNotNull;
 import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.CoreMatchers.instanceOf;
@@ -280,6 +284,111 @@ public abstract class TypeSerializerSnapshotMigrationTestBase<ElementT> extends
 		}
 	}
 
+	/**
+	 * Utility class to help build a collection of {@link TestSpecification} for
+	 * multiple test migration versions. For each test specification added,
+	 * an entry will be added for each specified migration version.
+	 */
+	protected static final class TestSpecifications {
+
+		private static final int DEFAULT_TEST_DATA_COUNT = 10;
+		private static final String DEFAULT_SNAPSHOT_FILENAME_FORMAT = "flink-%s-%s-snapshot";
+		private static final String DEFAULT_TEST_DATA_FILENAME_FORMAT = "flink-%s-%s-data";
+
+		private final Collection<TestSpecification<?>> testSpecifications = new LinkedList<>();
+		private final MigrationVersion[] testVersions;
+
+		public TestSpecifications(MigrationVersion... testVersions) {
+			checkArgument(
+				testVersions.length > 0,
+				"At least one test migration version should be specified.");
+			this.testVersions = testVersions;
+		}
+
+		/**
+		 * Adds a test specification to be tested for all specified test versions.
+		 *
+		 * <p>This method adds the specification with pre-defined snapshot and data filenames,
+		 * with the format "flink-&lt;testVersion&gt;-&lt;specName&gt;-&lt;data/snapshot&gt;",
+		 * and each specification's test data count is assumed to always be 10.
+		 *
+		 * @param name test specification name.
+		 * @param serializerClass class of the current serializer.
+		 * @param snapshotClass class of the current serializer snapshot class.
+		 * @param serializerProvider provider for an instance of the current serializer.
+		 *
+		 * @param <T> type of the test data.
+		 */
+		public <T> void add(
+				String name,
+				Class<? extends TypeSerializer> serializerClass,
+				Class<? extends TypeSerializerSnapshot> snapshotClass,
+				Supplier<? extends TypeSerializer<T>> serializerProvider) {
+			for (MigrationVersion testVersion : testVersions) {
+				testSpecifications.add(
+					TestSpecification.<T>builder(
+						getSpecNameForVersion(name, testVersion),
+						serializerClass,
+						snapshotClass,
+						testVersion)
+						.withNewSerializerProvider(serializerProvider)
+						.withSnapshotDataLocation(
+							String.format(DEFAULT_SNAPSHOT_FILENAME_FORMAT, testVersion, name))
+						.withTestData(
+							String.format(DEFAULT_TEST_DATA_FILENAME_FORMAT, testVersion, name),
+							DEFAULT_TEST_DATA_COUNT)
+				);
+			}
+		}
+
+		/**
+		 * Adds a test specification to be tested for all specified test versions.
+		 *
+		 * @param name test specification name.
+		 * @param serializerClass class of the current serializer.
+		 * @param snapshotClass class of the current serializer snapshot class.
+		 * @param serializerProvider provider for an instance of the current serializer.
+		 * @param testSnapshotFilenameProvider provider for the filename of the test snapshot.
+		 * @param testDataFilenameProvider provider for the filename of the test data.
+		 * @param testDataCount expected number of records to be read in the test data files.
+		 *
+		 * @param <T> type of the test data.
+		 */
+		public <T> void add(
+				String name,
+				Class<? extends TypeSerializer> serializerClass,
+				Class<? extends TypeSerializerSnapshot> snapshotClass,
+				Supplier<? extends TypeSerializer<T>> serializerProvider,
+				TestResourceFilenameSupplier testSnapshotFilenameProvider,
+				TestResourceFilenameSupplier testDataFilenameProvider,
+				int testDataCount) {
+			for (MigrationVersion testVersion : testVersions) {
+				testSpecifications.add(
+					TestSpecification.<T>builder(
+						getSpecNameForVersion(name, testVersion),
+						serializerClass,
+						snapshotClass,
+						testVersion)
+					.withNewSerializerProvider(serializerProvider)
+					.withSnapshotDataLocation(testSnapshotFilenameProvider.get(testVersion))
+					.withTestData(testDataFilenameProvider.get(testVersion), testDataCount)
+				);
+			}
+		}
+
+		public Collection<TestSpecification<?>> get() {
+			return Collections.unmodifiableCollection(testSpecifications);
+		}
+
+		private static String getSpecNameForVersion(String baseName, MigrationVersion testVersion) {
+			return testVersion + "-" + baseName;
+		}
+	}
+
+	protected interface TestResourceFilenameSupplier {
+		String get(MigrationVersion testVersion);
+	}
+
 	// --------------------------------------------------------------------------------------------------------------
 	// Utilities
 	// --------------------------------------------------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/BaseTypeSerializerSnapshotMigrationTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/BaseTypeSerializerSnapshotMigrationTest.java
index 93725c4..2ed4a85 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/BaseTypeSerializerSnapshotMigrationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/BaseTypeSerializerSnapshotMigrationTest.java
@@ -19,29 +19,12 @@
 package org.apache.flink.api.common.typeutils.base;
 
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
-
 import org.apache.flink.testutils.migration.MigrationVersion;
-import org.apache.flink.types.BooleanValue;
-import org.apache.flink.types.ByteValue;
-import org.apache.flink.types.CharValue;
-import org.apache.flink.types.DoubleValue;
-import org.apache.flink.types.FloatValue;
-import org.apache.flink.types.IntValue;
-import org.apache.flink.types.LongValue;
-import org.apache.flink.types.NullValue;
-import org.apache.flink.types.ShortValue;
-import org.apache.flink.types.StringValue;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Date;
 
 /**
  * Migration tests for basic type serializers' snapshots.
@@ -55,309 +38,36 @@ public class BaseTypeSerializerSnapshotMigrationTest extends TypeSerializerSnaps
 
 	@SuppressWarnings("unchecked")
 	@Parameterized.Parameters(name = "Test Specification = {0}")
-	public static Collection<Object> testSpecifications() {
-
-		// BigDecimal
-
-		final TestSpecification<BigDecimal> bigDec = TestSpecification.<BigDecimal>builder(
-				"1.6-big-dec",
-				BigDecSerializer.class,
-				BigDecSerializer.BigDecSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BigDecSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-big-dec-serializer-snapshot")
-			.withTestData("flink-1.6-big-dec-serializer-data", 10);
-
-		// BigInteger
-
-		final TestSpecification<BigInteger> bigInt = TestSpecification.<BigInteger>builder(
-				"1.6-big-int",
-				BigIntSerializer.class,
-				BigIntSerializer.BigIntSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BigIntSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-big-int-serializer-snapshot")
-			.withTestData("flink-1.6-big-int-serializer-data", 10);
-
-		// Boolean
-
-		final TestSpecification<Boolean> booleanType = TestSpecification.<Boolean>builder(
-				"1.6-boolean",
-				BooleanSerializer.class,
-				BooleanSerializer.BooleanSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BooleanSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-boolean-serializer-snapshot")
-			.withTestData("flink-1.6-boolean-serializer-data", 10);
-
-		// BooleanValue
-
-		final TestSpecification<BooleanValue> booleanValue = TestSpecification.<BooleanValue>builder(
-				"1.6-boolean-value",
-				BooleanValueSerializer.class,
-				BooleanValueSerializer.BooleanValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BooleanValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-boolean-value-serializer-snapshot")
-			.withTestData("flink-1.6-boolean-value-serializer-data", 10);
-
-		// Byte
-
-		final TestSpecification<Byte> byteType = TestSpecification.<Byte>builder(
-				"1.6-byte",
-				ByteSerializer.class,
-				ByteSerializer.ByteSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> ByteSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-byte-serializer-snapshot")
-			.withTestData("flink-1.6-byte-serializer-data", 10);
-
-		// ByteValue
-
-		final TestSpecification<ByteValue> byteValue = TestSpecification.<ByteValue>builder(
-				"1.6-byte-value",
-				ByteValueSerializer.class,
-				ByteValueSerializer.ByteValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> ByteValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-byte-value-serializer-snapshot")
-			.withTestData("flink-1.6-byte-value-serializer-data", 10);
-
-		// Character
-
-		final TestSpecification<Character> charType = TestSpecification.<Character>builder(
-				"1.6-char",
-				CharSerializer.class,
-				CharSerializer.CharSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> CharSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-char-serializer-snapshot")
-			.withTestData("flink-1.6-char-serializer-data", 10);
-
-		// CharValue
-
-		final TestSpecification<CharValue> charValue = TestSpecification.<CharValue>builder(
-				"1.6-char-value",
-				CharValueSerializer.class,
-				CharValueSerializer.CharValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> CharValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-char-value-serializer-snapshot")
-			.withTestData("flink-1.6-char-value-serializer-data", 10);
-
-		// java.util.Date
-
-		final TestSpecification<Date> javaDate = TestSpecification.<Date>builder(
-				"1.6-date",
-				DateSerializer.class,
-				DateSerializer.DateSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> DateSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-date-serializer-snapshot")
-			.withTestData("flink-1.6-date-serializer-data", 10);
-
-		// Double
-
-		final TestSpecification<Double> doubleType = TestSpecification.<Double>builder(
-				"1.6-double",
-				DoubleSerializer.class,
-				DoubleSerializer.DoubleSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> DoubleSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-double-serializer-snapshot")
-			.withTestData("flink-1.6-double-serializer-data", 10);
-
-		// DoubleValue
-
-		final TestSpecification<DoubleValue> doubleValue = TestSpecification.<DoubleValue>builder(
-				"1.6-double-value",
-				DoubleValueSerializer.class,
-				DoubleValueSerializer.DoubleValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> DoubleValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-double-value-serializer-snapshot")
-			.withTestData("flink-1.6-double-value-serializer-data", 10);
-
-		// Float
-
-		final TestSpecification<Float> floatType = TestSpecification.<Float>builder(
-				"1.6-float",
-				FloatSerializer.class,
-				FloatSerializer.FloatSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> FloatSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-float-serializer-snapshot")
-			.withTestData("flink-1.6-float-serializer-data", 10);
-
-		// FloatValue
-
-		final TestSpecification<FloatValue> floatValue = TestSpecification.<FloatValue>builder(
-				"1.6-float-value",
-				FloatValueSerializer.class,
-				FloatValueSerializer.FloatValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> FloatValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-float-value-serializer-snapshot")
-			.withTestData("flink-1.6-float-value-serializer-data", 10);
-
-		// Integer
-
-		final TestSpecification<Integer> intType = TestSpecification.<Integer>builder(
-				"1.6-int",
-				IntSerializer.class,
-				IntSerializer.IntSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> IntSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-int-serializer-snapshot")
-			.withTestData("flink-1.6-int-serializer-data", 10);
-
-		// IntValue
-
-		final TestSpecification<IntValue> intValue = TestSpecification.<IntValue>builder(
-				"1.6-int-value",
-				IntValueSerializer.class,
-				IntValueSerializer.IntValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> IntValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-int-value-serializer-snapshot")
-			.withTestData("flink-1.6-int-value-serializer-data", 10);
-
-		// Long
-
-		final TestSpecification<Long> longType = TestSpecification.<Long>builder(
-				"1.6-long",
-				LongSerializer.class,
-				LongSerializer.LongSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> LongSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-long-serializer-snapshot")
-			.withTestData("flink-1.6-long-serializer-data", 10);
-
-		// LongValue
-
-		final TestSpecification<LongValue> longValue = TestSpecification.<LongValue>builder(
-				"1.6-long-value",
-				LongValueSerializer.class,
-				LongValueSerializer.LongValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> LongValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-long-value-serializer-snapshot")
-			.withTestData("flink-1.6-long-value-serializer-data", 10);
-
-		// NullValue
-
-		final TestSpecification<NullValue> nullValue = TestSpecification.<NullValue>builder(
-				"1.6-null-value",
-				NullValueSerializer.class,
-				NullValueSerializer.NullValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> NullValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-null-value-serializer-snapshot")
-			.withTestData("flink-1.6-null-value-serializer-data", 10);
-
-		// Short
-
-		final TestSpecification<Short> shortType = TestSpecification.<Short>builder(
-				"1.6-short",
-				ShortSerializer.class,
-				ShortSerializer.ShortSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> ShortSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-short-serializer-snapshot")
-			.withTestData("flink-1.6-short-serializer-data", 10);
-
-		// ShortValue
-
-		final TestSpecification<ShortValue> shortValue = TestSpecification.<ShortValue>builder(
-				"1.6-short-value",
-				ShortValueSerializer.class,
-				ShortValueSerializer.ShortValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> ShortValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-short-value-serializer-snapshot")
-			.withTestData("flink-1.6-short-value-serializer-data", 10);
-
-		// java.sql.Date
-
-		final TestSpecification<java.sql.Date> sqlDate = TestSpecification.<java.sql.Date>builder(
-				"1.6-sql-date",
-				SqlDateSerializer.class,
-				SqlDateSerializer.SqlDateSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> SqlDateSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-sql-date-serializer-snapshot")
-			.withTestData("flink-1.6-sql-date-serializer-data", 10);
-
-		// java.sql.Time
-
-		final TestSpecification<Time> sqlTime = TestSpecification.<Time>builder(
-				"1.6-sql-time",
-				SqlTimeSerializer.class,
-				SqlTimeSerializer.SqlTimeSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> SqlTimeSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-sql-time-serializer-snapshot")
-			.withTestData("flink-1.6-sql-time-serializer-data", 10);
-
-		// java.sql.Timestamp
-
-		final TestSpecification<Timestamp> sqlTimestamp = TestSpecification.<Timestamp>builder(
-				"1.6-sql-timestamp",
-				SqlTimestampSerializer.class,
-				SqlTimestampSerializer.SqlTimestampSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> SqlTimestampSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-sql-timestamp-serializer-snapshot")
-			.withTestData("flink-1.6-sql-timestamp-serializer-data", 10);
-
-		// String
-
-		final TestSpecification<String> stringType = TestSpecification.<String>builder(
-				"1.6-string",
-				StringSerializer.class,
-				StringSerializer.StringSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> StringSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-string-serializer-snapshot")
-			.withTestData("flink-1.6-string-serializer-data", 10);
-
-		// StringValue
-
-		final TestSpecification<StringValue> stringValue = TestSpecification.<StringValue>builder(
-				"1.6-string-value",
-				StringValueSerializer.class,
-				StringValueSerializer.StringValueSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> StringValueSerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-string-value-serializer-snapshot")
-			.withTestData("flink-1.6-string-value-serializer-data", 10);
-
-		return Arrays.asList(
-			bigDec,
-			bigInt,
-			booleanType,
-			booleanValue,
-			byteType,
-			byteValue,
-			charType,
-			charValue,
-			javaDate,
-			doubleType,
-			doubleValue,
-			floatType,
-			floatValue,
-			intType,
-			intValue,
-			longType,
-			longValue,
-			nullValue,
-			shortType,
-			shortValue,
-			sqlDate,
-			sqlTime,
-			sqlTimestamp,
-			stringType,
-			stringValue
-		);
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add("big-dec-serializer", BigDecSerializer.class, BigDecSerializer.BigDecSerializerSnapshot.class, () -> BigDecSerializer.INSTANCE);
+		testSpecifications.add("big-int-serializer", BigIntSerializer.class, BigIntSerializer.BigIntSerializerSnapshot.class, () -> BigIntSerializer.INSTANCE);
+		testSpecifications.add("boolean-serializer", BooleanSerializer.class, BooleanSerializer.BooleanSerializerSnapshot.class, () -> BooleanSerializer.INSTANCE);
+		testSpecifications.add("boolean-value-serializer", BooleanValueSerializer.class, BooleanValueSerializer.BooleanValueSerializerSnapshot.class, () -> BooleanValueSerializer.INSTANCE);
+		testSpecifications.add("byte-serializer", ByteSerializer.class, ByteSerializer.ByteSerializerSnapshot.class, () -> ByteSerializer.INSTANCE);
+		testSpecifications.add("byte-value-serializer", ByteValueSerializer.class, ByteValueSerializer.ByteValueSerializerSnapshot.class, () -> ByteValueSerializer.INSTANCE);
+		testSpecifications.add("char-serializer", CharSerializer.class, CharSerializer.CharSerializerSnapshot.class, () -> CharSerializer.INSTANCE);
+		testSpecifications.add("char-value-serializer", CharValueSerializer.class, CharValueSerializer.CharValueSerializerSnapshot.class, () -> CharValueSerializer.INSTANCE);
+		testSpecifications.add("date-serializer", DateSerializer.class, DateSerializer.DateSerializerSnapshot.class, () -> DateSerializer.INSTANCE);
+		testSpecifications.add("double-serializer", DoubleSerializer.class, DoubleSerializer.DoubleSerializerSnapshot.class, () -> DoubleSerializer.INSTANCE);
+		testSpecifications.add("double-value-serializer", DoubleValueSerializer.class, DoubleValueSerializer.DoubleValueSerializerSnapshot.class, () -> DoubleValueSerializer.INSTANCE);
+		testSpecifications.add("float-serializer", FloatSerializer.class, FloatSerializer.FloatSerializerSnapshot.class, () -> FloatSerializer.INSTANCE);
+		testSpecifications.add("float-value-serializer", FloatValueSerializer.class, FloatValueSerializer.FloatValueSerializerSnapshot.class, () -> FloatValueSerializer.INSTANCE);
+		testSpecifications.add("int-serializer", IntSerializer.class, IntSerializer.IntSerializerSnapshot.class, () -> IntSerializer.INSTANCE);
+		testSpecifications.add("int-value-serializer", IntValueSerializer.class, IntValueSerializer.IntValueSerializerSnapshot.class, () -> IntValueSerializer.INSTANCE);
+		testSpecifications.add("long-serializer", LongSerializer.class, LongSerializer.LongSerializerSnapshot.class, () -> LongSerializer.INSTANCE);
+		testSpecifications.add("long-value-serializer", LongValueSerializer.class, LongValueSerializer.LongValueSerializerSnapshot.class, () -> LongValueSerializer.INSTANCE);
+		testSpecifications.add("null-value-serializer", NullValueSerializer.class, NullValueSerializer.NullValueSerializerSnapshot.class, () -> NullValueSerializer.INSTANCE);
+		testSpecifications.add("short-serializer", ShortSerializer.class, ShortSerializer.ShortSerializerSnapshot.class, () -> ShortSerializer.INSTANCE);
+		testSpecifications.add("short-value-serializer", ShortValueSerializer.class, ShortValueSerializer.ShortValueSerializerSnapshot.class, () -> ShortValueSerializer.INSTANCE);
+		testSpecifications.add("sql-date-serializer", SqlDateSerializer.class, SqlDateSerializer.SqlDateSerializerSnapshot.class, () -> SqlDateSerializer.INSTANCE);
+		testSpecifications.add("sql-time-serializer", SqlTimeSerializer.class, SqlTimeSerializer.SqlTimeSerializerSnapshot.class, () -> SqlTimeSerializer.INSTANCE);
+		testSpecifications.add("sql-timestamp-serializer", SqlTimestampSerializer.class, SqlTimestampSerializer.SqlTimestampSerializerSnapshot.class, () -> SqlTimestampSerializer.INSTANCE);
+		testSpecifications.add("string-serializer", StringSerializer.class, StringSerializer.StringSerializerSnapshot.class, () -> StringSerializer.INSTANCE);
+		testSpecifications.add("string-value-serializer", StringValueSerializer.class, StringValueSerializer.StringValueSerializerSnapshot.class, () -> StringValueSerializer.INSTANCE);
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/ListSerializerSnapshotMigrationTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/ListSerializerSnapshotMigrationTest.java
index 524a801..f3662c6 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/ListSerializerSnapshotMigrationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/ListSerializerSnapshotMigrationTest.java
@@ -20,27 +20,36 @@ package org.apache.flink.api.common.typeutils.base;
 
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
 import org.apache.flink.testutils.migration.MigrationVersion;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
  * Migration test for the {@link ListSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class ListSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<List<String>> {
 
-	private static final String DATA = "flink-1.6-list-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-list-serializer-snapshot";
-
-	public ListSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<List<String>>builder(
-					"1.6-list-serializer",
-					ListSerializer.class,
-					ListSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new ListSerializer<>(StringSerializer.INSTANCE))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "list-serializer";
+
+	public ListSerializerSnapshotMigrationTest(TestSpecification<List<String>> testSpecification) {
+		super(testSpecification);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			ListSerializer.class,
+			ListSerializerSnapshot.class,
+			() -> new ListSerializer<>(StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/MapSerializerSnapshotMigrationTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/MapSerializerSnapshotMigrationTest.java
index be9f152..804eac4 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/MapSerializerSnapshotMigrationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/MapSerializerSnapshotMigrationTest.java
@@ -21,26 +21,36 @@ package org.apache.flink.api.common.typeutils.base;
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
 import org.apache.flink.testutils.migration.MigrationVersion;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
 import java.util.Map;
 
 /**
  * Migration test for the {@link MapSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class MapSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<Map<Integer, String>> {
 
-	private static final String DATA = "flink-1.6-map-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-map-serializer-snapshot";
-
-	public MapSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<Map<Integer, String>>builder(
-					"1.6-map-serializer",
-					MapSerializer.class,
-					MapSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new MapSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "map-serializer";
+
+	public MapSerializerSnapshotMigrationTest(TestSpecification<Map<Integer, String>> testSpecification) {
+		super(testSpecification);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			MapSerializer.class,
+			MapSerializerSnapshot.class,
+			() -> new MapSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/array/PrimitiveArraySerializerSnapshotMigrationTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/array/PrimitiveArraySerializerSnapshotMigrationTest.java
index f6aa59f..6163e2c 100644
--- a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/array/PrimitiveArraySerializerSnapshotMigrationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/base/array/PrimitiveArraySerializerSnapshotMigrationTest.java
@@ -19,12 +19,11 @@
 package org.apache.flink.api.common.typeutils.base.array;
 
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
-
 import org.apache.flink.testutils.migration.MigrationVersion;
+
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import java.util.Arrays;
 import java.util.Collection;
 
 /**
@@ -39,118 +38,57 @@ public class PrimitiveArraySerializerSnapshotMigrationTest extends TypeSerialize
 
 	@SuppressWarnings("unchecked")
 	@Parameterized.Parameters(name = "Test Specification = {0}")
-	public static Collection<Object> testSpecifications() {
-
-		// boolean[]
-
-		final TestSpecification<boolean[]> booleanArray = TestSpecification.<boolean[]>builder(
-				"1.6-boolean-primitive-array",
-				BooleanPrimitiveArraySerializer.class,
-				BooleanPrimitiveArraySerializer.BooleanPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BooleanPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-boolean-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-boolean-primitive-array-serializer-data", 10);
-
-		// byte[]
-
-		final TestSpecification<byte[]> byteArray = TestSpecification.<byte[]>builder(
-				"1.6-byte-primitive-array",
-				BytePrimitiveArraySerializer.class,
-				BytePrimitiveArraySerializer.BytePrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> BytePrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-byte-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-byte-primitive-array-serializer-data", 10);
-
-		// char[]
-
-		final TestSpecification<char[]> charArray = TestSpecification.<char[]>builder(
-				"1.6-char-primitive-array",
-				CharPrimitiveArraySerializer.class,
-				CharPrimitiveArraySerializer.CharPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> CharPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-char-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-char-primitive-array-serializer-data", 10);
-
-		// double[]
-
-		final TestSpecification<double[]> doubleArray = TestSpecification.<double[]>builder(
-				"1.6-double-primitive-array",
-				DoublePrimitiveArraySerializer.class,
-				DoublePrimitiveArraySerializer.DoublePrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> DoublePrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-double-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-double-primitive-array-serializer-data", 10);
-
-		// float[]
-
-		final TestSpecification<float[]> floatArray = TestSpecification.<float[]>builder(
-				"1.6-float-primitive-array",
-				FloatPrimitiveArraySerializer.class,
-				FloatPrimitiveArraySerializer.FloatPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> FloatPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-float-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-float-primitive-array-serializer-data", 10);
-
-		// int[]
-
-		final TestSpecification<int[]> intArray = TestSpecification.<int[]>builder(
-				"1.6-int-primitive-array",
-				IntPrimitiveArraySerializer.class,
-				IntPrimitiveArraySerializer.IntPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> IntPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-int-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-int-primitive-array-serializer-data", 10);
-
-		// long[]
-
-		final TestSpecification<long[]> longArray = TestSpecification.<long[]>builder(
-				"1.6-long-primitive-array",
-				LongPrimitiveArraySerializer.class,
-				LongPrimitiveArraySerializer.LongPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> LongPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-long-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-long-primitive-array-serializer-data", 10);
-
-		// short[]
-
-		final TestSpecification<short[]> shortArray = TestSpecification.<short[]>builder(
-				"1.6-short-primitive-array",
-				ShortPrimitiveArraySerializer.class,
-				ShortPrimitiveArraySerializer.ShortPrimitiveArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> ShortPrimitiveArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-short-primitive-array-serializer-snapshot")
-			.withTestData("flink-1.6-short-primitive-array-serializer-data", 10);
-
-		// String[]
-
-		final TestSpecification<String[]> stringArray = TestSpecification.<String[]>builder(
-				"1.6-string-array",
-				StringArraySerializer.class,
-				StringArraySerializer.StringArraySerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> StringArraySerializer.INSTANCE)
-			.withSnapshotDataLocation("flink-1.6-string-array-serializer-snapshot")
-			.withTestData("flink-1.6-string-array-serializer-data", 10);
-
-		return Arrays.asList(
-			booleanArray,
-			byteArray,
-			charArray,
-			doubleArray,
-			floatArray,
-			intArray,
-			longArray,
-			shortArray,
-			stringArray
-		);
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			"boolean-primitive-array-serializer",
+			BooleanPrimitiveArraySerializer.class,
+			BooleanPrimitiveArraySerializer.BooleanPrimitiveArraySerializerSnapshot.class,
+			() -> BooleanPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"byte-primitive-array-serializer",
+			BytePrimitiveArraySerializer.class,
+			BytePrimitiveArraySerializer.BytePrimitiveArraySerializerSnapshot.class,
+			() -> BytePrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"char-primitive-array-serializer",
+			CharPrimitiveArraySerializer.class,
+			CharPrimitiveArraySerializer.CharPrimitiveArraySerializerSnapshot.class,
+			() -> CharPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"double-primitive-array-serializer",
+			DoublePrimitiveArraySerializer.class,
+			DoublePrimitiveArraySerializer.DoublePrimitiveArraySerializerSnapshot.class,
+			() -> DoublePrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"float-primitive-array-serializer",
+			FloatPrimitiveArraySerializer.class,
+			FloatPrimitiveArraySerializer.FloatPrimitiveArraySerializerSnapshot.class,
+			() -> FloatPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"int-primitive-array-serializer",
+			IntPrimitiveArraySerializer.class,
+			IntPrimitiveArraySerializer.IntPrimitiveArraySerializerSnapshot.class,
+			() -> IntPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"long-primitive-array-serializer",
+			LongPrimitiveArraySerializer.class,
+			LongPrimitiveArraySerializer.LongPrimitiveArraySerializerSnapshot.class,
+			() -> LongPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"short-primitive-array-serializer",
+			ShortPrimitiveArraySerializer.class,
+			ShortPrimitiveArraySerializer.ShortPrimitiveArraySerializerSnapshot.class,
+			() -> ShortPrimitiveArraySerializer.INSTANCE);
+		testSpecifications.add(
+			"string-array-serializer",
+			StringArraySerializer.class,
+			StringArraySerializer.StringArraySerializerSnapshot.class,
+			() -> StringArraySerializer.INSTANCE);
+
+		return testSpecifications.get();
 	}
 
 }
diff --git a/flink-core/src/test/resources/flink-1.6-either-type-serializer-data b/flink-core/src/test/resources/flink-1.6-either-serializer-data
similarity index 100%
rename from flink-core/src/test/resources/flink-1.6-either-type-serializer-data
rename to flink-core/src/test/resources/flink-1.6-either-serializer-data
diff --git a/flink-core/src/test/resources/flink-1.6-either-type-serializer-snapshot b/flink-core/src/test/resources/flink-1.6-either-serializer-snapshot
similarity index 100%
rename from flink-core/src/test/resources/flink-1.6-either-type-serializer-snapshot
rename to flink-core/src/test/resources/flink-1.6-either-serializer-snapshot
diff --git a/flink-core/src/test/resources/flink-1.6-array-type-serializer-data b/flink-core/src/test/resources/flink-1.6-generic-array-serializer-data
similarity index 100%
rename from flink-core/src/test/resources/flink-1.6-array-type-serializer-data
rename to flink-core/src/test/resources/flink-1.6-generic-array-serializer-data
diff --git a/flink-core/src/test/resources/flink-1.6-array-type-serializer-snapshot b/flink-core/src/test/resources/flink-1.6-generic-array-serializer-snapshot
similarity index 100%
rename from flink-core/src/test/resources/flink-1.6-array-type-serializer-snapshot
rename to flink-core/src/test/resources/flink-1.6-generic-array-serializer-snapshot
diff --git a/flink-core/src/test/resources/flink-1.7-big-dec-serializer-data b/flink-core/src/test/resources/flink-1.7-big-dec-serializer-data
new file mode 100644
index 0000000..77e75f8
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-big-dec-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-big-dec-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-big-dec-serializer-snapshot
new file mode 100644
index 0000000..06f174d
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-big-dec-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-big-int-serializer-data b/flink-core/src/test/resources/flink-1.7-big-int-serializer-data
new file mode 100644
index 0000000..5cabbfc
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-big-int-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-big-int-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-big-int-serializer-snapshot
new file mode 100644
index 0000000..3a8111e
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-big-int-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-data
new file mode 100644
index 0000000..96acd9c
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..7001c14
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-boolean-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-serializer-data b/flink-core/src/test/resources/flink-1.7-boolean-serializer-data
new file mode 100644
index 0000000..21808bb
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-boolean-serializer-data
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-boolean-serializer-snapshot
new file mode 100644
index 0000000..c65c7db
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-boolean-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-data b/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-data
new file mode 100644
index 0000000..cb43b5c
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-snapshot
new file mode 100644
index 0000000..d4e5cf8
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-boolean-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-data
new file mode 100644
index 0000000..8956669
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..a9cba34
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-byte-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-byte-serializer-data b/flink-core/src/test/resources/flink-1.7-byte-serializer-data
new file mode 100644
index 0000000..0120536
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-byte-serializer-data
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-byte-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-byte-serializer-snapshot
new file mode 100644
index 0000000..a09d139
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-byte-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-byte-value-serializer-data b/flink-core/src/test/resources/flink-1.7-byte-value-serializer-data
new file mode 100644
index 0000000..0120536
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-byte-value-serializer-data
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-byte-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-byte-value-serializer-snapshot
new file mode 100644
index 0000000..c37f0aa
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-byte-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-data
new file mode 100644
index 0000000..918413b
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..3f7deae
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-serializer-data b/flink-core/src/test/resources/flink-1.7-char-serializer-data
new file mode 100644
index 0000000..9ecd9cd
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-char-serializer-snapshot
new file mode 100644
index 0000000..2671531
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-value-serializer-data b/flink-core/src/test/resources/flink-1.7-char-value-serializer-data
new file mode 100644
index 0000000..9ecd9cd
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-value-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-char-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-char-value-serializer-snapshot
new file mode 100644
index 0000000..3d10a36
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-char-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-date-serializer-data b/flink-core/src/test/resources/flink-1.7-date-serializer-data
new file mode 100644
index 0000000..d374944
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-date-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-date-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-date-serializer-snapshot
new file mode 100644
index 0000000..d5084d2
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-date-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-data
new file mode 100644
index 0000000..16e6183
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..3e4ee96
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-double-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-double-serializer-data b/flink-core/src/test/resources/flink-1.7-double-serializer-data
new file mode 100644
index 0000000..49fbf3f
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-double-serializer-data
@@ -0,0 +1 @@
+@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-double-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-double-serializer-snapshot
new file mode 100644
index 0000000..2cce3e5
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-double-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-double-value-serializer-data b/flink-core/src/test/resources/flink-1.7-double-value-serializer-data
new file mode 100644
index 0000000..49fbf3f
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-double-value-serializer-data
@@ -0,0 +1 @@
+@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n@	!���n
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-double-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-double-value-serializer-snapshot
new file mode 100644
index 0000000..1c87532
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-double-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-either-serializer-data b/flink-core/src/test/resources/flink-1.7-either-serializer-data
new file mode 100644
index 0000000..203067c
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-either-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-either-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-either-serializer-snapshot
new file mode 100644
index 0000000..7f2cf0f
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-either-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-data
new file mode 100644
index 0000000..e5371bb
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..7e01a51
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-float-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-float-serializer-data b/flink-core/src/test/resources/flink-1.7-float-serializer-data
new file mode 100644
index 0000000..2d8b79f
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-float-serializer-data
@@ -0,0 +1 @@
+@I�@I�@I�@I�@I�@I�@I�@I�@I�@I�
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-float-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-float-serializer-snapshot
new file mode 100644
index 0000000..76e52b4
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-float-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-float-value-serializer-data b/flink-core/src/test/resources/flink-1.7-float-value-serializer-data
new file mode 100644
index 0000000..2d8b79f
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-float-value-serializer-data
@@ -0,0 +1 @@
+@I�@I�@I�@I�@I�@I�@I�@I�@I�@I�
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-float-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-float-value-serializer-snapshot
new file mode 100644
index 0000000..c6d2d12
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-float-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-generic-array-serializer-data b/flink-core/src/test/resources/flink-1.7-generic-array-serializer-data
new file mode 100644
index 0000000..e2d6a23
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-generic-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-generic-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-generic-array-serializer-snapshot
new file mode 100644
index 0000000..9ace763
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-generic-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-data
new file mode 100644
index 0000000..6966366
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..6ef72a2
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-serializer-data b/flink-core/src/test/resources/flink-1.7-int-serializer-data
new file mode 100644
index 0000000..a69d5c4
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-int-serializer-snapshot
new file mode 100644
index 0000000..de2be82
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-value-serializer-data b/flink-core/src/test/resources/flink-1.7-int-value-serializer-data
new file mode 100644
index 0000000..a69d5c4
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-value-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-int-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-int-value-serializer-snapshot
new file mode 100644
index 0000000..124b4e4
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-int-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-list-serializer-data b/flink-core/src/test/resources/flink-1.7-list-serializer-data
new file mode 100644
index 0000000..7b6c68a
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-list-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-list-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-list-serializer-snapshot
new file mode 100644
index 0000000..a8efd3a
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-list-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-data
new file mode 100644
index 0000000..267bb12
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..eec2da3
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-serializer-data b/flink-core/src/test/resources/flink-1.7-long-serializer-data
new file mode 100644
index 0000000..0bf438f
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-long-serializer-snapshot
new file mode 100644
index 0000000..85cfea9
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-value-serializer-data b/flink-core/src/test/resources/flink-1.7-long-value-serializer-data
new file mode 100644
index 0000000..0bf438f
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-value-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-long-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-long-value-serializer-snapshot
new file mode 100644
index 0000000..93de3c5
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-long-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-map-serializer-data b/flink-core/src/test/resources/flink-1.7-map-serializer-data
new file mode 100644
index 0000000..4d7334a
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-map-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-map-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-map-serializer-snapshot
new file mode 100644
index 0000000..2d5f1f0
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-map-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-null-value-serializer-data b/flink-core/src/test/resources/flink-1.7-null-value-serializer-data
new file mode 100644
index 0000000..e69de29
diff --git a/flink-core/src/test/resources/flink-1.7-null-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-null-value-serializer-snapshot
new file mode 100644
index 0000000..c7a05b1
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-null-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-data b/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-data
new file mode 100644
index 0000000..9dcf64f
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-snapshot
new file mode 100644
index 0000000..e07dc66
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-primitive-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-serializer-data b/flink-core/src/test/resources/flink-1.7-short-serializer-data
new file mode 100644
index 0000000..c1a8300
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-short-serializer-snapshot
new file mode 100644
index 0000000..3d79053
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-value-serializer-data b/flink-core/src/test/resources/flink-1.7-short-value-serializer-data
new file mode 100644
index 0000000..c1a8300
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-value-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-short-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-short-value-serializer-snapshot
new file mode 100644
index 0000000..91db2ab
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-short-value-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-date-serializer-data b/flink-core/src/test/resources/flink-1.7-sql-date-serializer-data
new file mode 100644
index 0000000..141ae41
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-date-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-date-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-sql-date-serializer-snapshot
new file mode 100644
index 0000000..ded2e33
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-date-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-time-serializer-data b/flink-core/src/test/resources/flink-1.7-sql-time-serializer-data
new file mode 100644
index 0000000..086ab90
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-time-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-time-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-sql-time-serializer-snapshot
new file mode 100644
index 0000000..f9a4597
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-time-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-data b/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-data
new file mode 100644
index 0000000..5639302
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-snapshot
new file mode 100644
index 0000000..300a1b6
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-sql-timestamp-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-string-array-serializer-data b/flink-core/src/test/resources/flink-1.7-string-array-serializer-data
new file mode 100644
index 0000000..7b6c68a
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-string-array-serializer-data differ
diff --git a/flink-core/src/test/resources/flink-1.7-string-array-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-string-array-serializer-snapshot
new file mode 100644
index 0000000..adbd5a9
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-string-array-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-string-serializer-data b/flink-core/src/test/resources/flink-1.7-string-serializer-data
new file mode 100644
index 0000000..383ccad
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-string-serializer-data
@@ -0,0 +1 @@
+hello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello world
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-string-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-string-serializer-snapshot
new file mode 100644
index 0000000..a9d82ff
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-string-serializer-snapshot differ
diff --git a/flink-core/src/test/resources/flink-1.7-string-value-serializer-data b/flink-core/src/test/resources/flink-1.7-string-value-serializer-data
new file mode 100644
index 0000000..0857b1e
--- /dev/null
+++ b/flink-core/src/test/resources/flink-1.7-string-value-serializer-data
@@ -0,0 +1 @@
+hello-worldhello-worldhello-worldhello-worldhello-worldhello-worldhello-worldhello-worldhello-worldhello-world
\ No newline at end of file
diff --git a/flink-core/src/test/resources/flink-1.7-string-value-serializer-snapshot b/flink-core/src/test/resources/flink-1.7-string-value-serializer-snapshot
new file mode 100644
index 0000000..a435f70
Binary files /dev/null and b/flink-core/src/test/resources/flink-1.7-string-value-serializer-snapshot differ
diff --git a/flink-formats/flink-avro/src/test/java/org/apache/flink/formats/avro/typeutils/AvroSerializerMigrationTest.java b/flink-formats/flink-avro/src/test/java/org/apache/flink/formats/avro/typeutils/AvroSerializerMigrationTest.java
index 019183e..73b76a6 100644
--- a/flink-formats/flink-avro/src/test/java/org/apache/flink/formats/avro/typeutils/AvroSerializerMigrationTest.java
+++ b/flink-formats/flink-avro/src/test/java/org/apache/flink/formats/avro/typeutils/AvroSerializerMigrationTest.java
@@ -20,55 +20,52 @@ package org.apache.flink.formats.avro.typeutils;
 
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
 import org.apache.flink.formats.avro.generated.Address;
+import org.apache.flink.testutils.migration.MigrationVersion;
 
 import org.apache.avro.generic.GenericRecord;
-import org.apache.flink.testutils.migration.MigrationVersion;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import java.util.Arrays;
 import java.util.Collection;
 
 /**
  * Tests migrations for {@link AvroSerializerSnapshot}.
  */
 @RunWith(Parameterized.class)
-public class AvroSerializerMigrationTest extends TypeSerializerSnapshotMigrationTestBase<Object> {
+public class AvroSerializerMigrationTest extends TypeSerializerSnapshotMigrationTestBase<Address> {
 
-	private static final String DATA = "flink-1.6-avro-type-serializer-address-data";
-	private static final String SPECIFIC_SNAPSHOT = "flink-1.6-avro-type-serializer-address-snapshot";
-	private static final String GENERIC_SNAPSHOT = "flink-1.6-avro-generic-type-serializer-address-snapshot";
+	private static final String DATA_FILE_FORMAT = "flink-%s-avro-type-serializer-address-data";
+	private static final String SPECIFIC_SNAPSHOT_FILE_FORMAT = "flink-%s-avro-type-serializer-address-snapshot";
+	private static final String GENERIC_SNAPSHOT_FILE_FORMAT = "flink-%s-avro-generic-type-serializer-address-snapshot";
 
-	public AvroSerializerMigrationTest(TestSpecification<Object> testSpec) {
+	public AvroSerializerMigrationTest(TestSpecification<Address> testSpec) {
 		super(testSpec);
 	}
 
 	@SuppressWarnings("unchecked")
 	@Parameterized.Parameters(name = "Test Specification = {0}")
-	public static Collection<Object[]> testSpecifications() {
+	public static Collection<TestSpecification<?>> testSpecifications() {
 
-		final TestSpecification<Address> genericCase = TestSpecification.<Address>builder(
-				"1.6-generic",
-				AvroSerializer.class,
-				AvroSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> new AvroSerializer(GenericRecord.class, Address.getClassSchema()))
-			.withSnapshotDataLocation(GENERIC_SNAPSHOT)
-			.withTestData(DATA, 10);
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
 
-		final TestSpecification<Address> specificCase = TestSpecification.<Address>builder(
-				"1.6-specific",
-				AvroSerializer.class,
-				AvroSerializerSnapshot.class,
-				MigrationVersion.v1_6)
-			.withNewSerializerProvider(() -> new AvroSerializer<>(Address.class))
-			.withSnapshotDataLocation(SPECIFIC_SNAPSHOT)
-			.withTestData(DATA, 10);
+		testSpecifications.add(
+			"generic-avro-serializer",
+			AvroSerializer.class,
+			AvroSerializerSnapshot.class,
+			() -> new AvroSerializer(GenericRecord.class, Address.getClassSchema()),
+			testVersion -> String.format(GENERIC_SNAPSHOT_FILE_FORMAT, testVersion),
+			testVersion -> String.format(DATA_FILE_FORMAT, testVersion),
+			10);
+		testSpecifications.add(
+			"specific-avro-serializer",
+			AvroSerializer.class,
+			AvroSerializerSnapshot.class,
+			() -> new AvroSerializer<>(Address.class),
+			testVersion -> String.format(SPECIFIC_SNAPSHOT_FILE_FORMAT, testVersion),
+			testVersion -> String.format(DATA_FILE_FORMAT, testVersion),
+			10);
 
-		return Arrays.asList(
-			new Object[]{genericCase},
-			new Object[]{specificCase}
-		);
+		return testSpecifications.get();
 	}
 
 }
diff --git a/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-generic-type-serializer-address-snapshot b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-generic-type-serializer-address-snapshot
new file mode 100644
index 0000000..f27d2dc
Binary files /dev/null and b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-generic-type-serializer-address-snapshot differ
diff --git a/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-data b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-data
new file mode 100644
index 0000000..74acf72
Binary files /dev/null and b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-data differ
diff --git a/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-snapshot b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-snapshot
new file mode 100644
index 0000000..7c8f6c2
Binary files /dev/null and b/flink-formats/flink-avro/src/test/resources/flink-1.7-avro-type-serializer-address-snapshot differ
diff --git a/flink-libraries/flink-cep/src/test/java/org/apache/flink/cep/nfa/sharedbuffer/LockableTypeSerializerSnapshotMigrationTest.java b/flink-libraries/flink-cep/src/test/java/org/apache/flink/cep/nfa/sharedbuffer/LockableTypeSerializerSnapshotMigrationTest.java
index cb911d6..4682617 100644
--- a/flink-libraries/flink-cep/src/test/java/org/apache/flink/cep/nfa/sharedbuffer/LockableTypeSerializerSnapshotMigrationTest.java
+++ b/flink-libraries/flink-cep/src/test/java/org/apache/flink/cep/nfa/sharedbuffer/LockableTypeSerializerSnapshotMigrationTest.java
@@ -22,24 +22,35 @@ import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTest
 import org.apache.flink.api.common.typeutils.base.StringSerializer;
 import org.apache.flink.testutils.migration.MigrationVersion;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
+
 /**
  * Migration test for the {@link LockableTypeSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class LockableTypeSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<Lockable<String>> {
 
-	private static final String DATA = "flink-1.6-lockable-type-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-lockable-type-serializer-snapshot";
-
-	public LockableTypeSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<Lockable<String>>builder(
-					"1.6-lockable-type-serializer",
-					Lockable.LockableTypeSerializer.class,
-					LockableTypeSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new Lockable.LockableTypeSerializer<>(StringSerializer.INSTANCE))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "lockable-type-serializer";
+
+	public LockableTypeSerializerSnapshotMigrationTest(TestSpecification<Lockable<String>> testSpecification) {
+		super(testSpecification);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			Lockable.LockableTypeSerializer.class,
+			LockableTypeSerializerSnapshot.class,
+			() -> new Lockable.LockableTypeSerializer<>(StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-data b/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-data
new file mode 100644
index 0000000..b175040
Binary files /dev/null and b/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-data differ
diff --git a/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-snapshot b/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-snapshot
new file mode 100644
index 0000000..42b3d45
Binary files /dev/null and b/flink-libraries/flink-cep/src/test/resources/flink-1.7-lockable-type-serializer-snapshot differ
diff --git a/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/ListViewSerializerSnapshotMigrationTest.java b/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/ListViewSerializerSnapshotMigrationTest.java
index 69cbe08..1983046 100644
--- a/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/ListViewSerializerSnapshotMigrationTest.java
+++ b/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/ListViewSerializerSnapshotMigrationTest.java
@@ -24,24 +24,35 @@ import org.apache.flink.api.common.typeutils.base.StringSerializer;
 import org.apache.flink.table.api.dataview.ListView;
 import org.apache.flink.testutils.migration.MigrationVersion;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
+
 /**
  * Migration test for the {@link ListViewSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class ListViewSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<ListView<String>> {
 
-	private static final String DATA = "flink-1.6-list-view-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-list-view-serializer-snapshot";
-
-	public ListViewSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<ListView<String>>builder(
-					"1.6-list-view-serializer",
-					ListViewSerializer.class,
-					ListViewSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new ListViewSerializer<>(new ListSerializer<>(StringSerializer.INSTANCE)))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "list-view-serializer";
+
+	public ListViewSerializerSnapshotMigrationTest(TestSpecification<ListView<String>> testSpecification) {
+		super(testSpecification);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			ListViewSerializer.class,
+			ListViewSerializerSnapshot.class,
+			() -> new ListViewSerializer<>(new ListSerializer<>(StringSerializer.INSTANCE)));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/MapViewSerializerSnapshotMigrationTest.java b/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/MapViewSerializerSnapshotMigrationTest.java
index 26281da..2679f6a 100644
--- a/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/MapViewSerializerSnapshotMigrationTest.java
+++ b/flink-libraries/flink-table/src/test/java/org/apache/flink/table/dataview/MapViewSerializerSnapshotMigrationTest.java
@@ -25,25 +25,35 @@ import org.apache.flink.api.common.typeutils.base.StringSerializer;
 import org.apache.flink.table.api.dataview.MapView;
 import org.apache.flink.testutils.migration.MigrationVersion;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
+
 /**
  * Migration test for the {@link MapViewSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class MapViewSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<MapView<Integer, String>> {
 
-	private static final String DATA = "flink-1.6-map-view-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-map-view-serializer-snapshot";
-
-	public MapViewSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<MapView<Integer, String>>builder(
-					"1.6-map-view-serializer",
-					MapViewSerializer.class,
-					MapViewSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new MapViewSerializer<>(
-					new MapSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE)))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "map-view-serializer";
+
+	public MapViewSerializerSnapshotMigrationTest(TestSpecification<MapView<Integer, String>> testSpecification) {
+		super(testSpecification);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			MapViewSerializer.class,
+			MapViewSerializerSnapshot.class,
+			() -> new MapViewSerializer<>(new MapSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE)));
+
+		return testSpecifications.get();
 	}
 }
diff --git a/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-data b/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-data
new file mode 100644
index 0000000..7b6c68a
Binary files /dev/null and b/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-data differ
diff --git a/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-snapshot b/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-snapshot
new file mode 100644
index 0000000..2bc7b5c
Binary files /dev/null and b/flink-libraries/flink-table/src/test/resources/flink-1.7-list-view-serializer-snapshot differ
diff --git a/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-data b/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-data
new file mode 100644
index 0000000..4d7334a
Binary files /dev/null and b/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-data differ
diff --git a/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-snapshot b/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-snapshot
new file mode 100644
index 0000000..19003a0
Binary files /dev/null and b/flink-libraries/flink-table/src/test/resources/flink-1.7-map-view-serializer-snapshot differ
diff --git a/flink-runtime/src/test/java/org/apache/flink/runtime/state/ArrayListSerializerMigrationTest.java b/flink-runtime/src/test/java/org/apache/flink/runtime/state/ArrayListSerializerMigrationTest.java
index ffbfd25..91b9658 100644
--- a/flink-runtime/src/test/java/org/apache/flink/runtime/state/ArrayListSerializerMigrationTest.java
+++ b/flink-runtime/src/test/java/org/apache/flink/runtime/state/ArrayListSerializerMigrationTest.java
@@ -22,27 +22,36 @@ import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTest
 import org.apache.flink.api.common.typeutils.base.StringSerializer;
 import org.apache.flink.testutils.migration.MigrationVersion;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
 import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * Migration test for the {@link ArrayListSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class ArrayListSerializerMigrationTest extends TypeSerializerSnapshotMigrationTestBase<ArrayList<String>> {
 
-	private static final String DATA = "flink-1.6-arraylist-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-arraylist-serializer-snapshot";
-
-	public ArrayListSerializerMigrationTest() {
-		super(
-			TestSpecification.<ArrayList<String>>builder(
-					"1.6-arraylist-serializer",
-					ArrayListSerializer.class,
-					ArrayListSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new ArrayListSerializer<>(StringSerializer.INSTANCE))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "arraylist-serializer";
+
+	public ArrayListSerializerMigrationTest(TestSpecification<ArrayList<String>> testSpecification) {
+		super(testSpecification);
 	}
 
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			ArrayListSerializer.class,
+			ArrayListSerializerSnapshot.class,
+			() -> new ArrayListSerializer<>(StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
+	}
 }
diff --git a/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-data b/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-data
new file mode 100644
index 0000000..7b6c68a
Binary files /dev/null and b/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-data differ
diff --git a/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-snapshot b/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-snapshot
new file mode 100644
index 0000000..cf43209
Binary files /dev/null and b/flink-runtime/src/test/resources/flink-1.7-arraylist-serializer-snapshot differ
diff --git a/flink-scala/src/test/java/org/apache/flink/api/scala/typeutils/ScalaEitherSerializerSnapshotMigrationTest.java b/flink-scala/src/test/java/org/apache/flink/api/scala/typeutils/ScalaEitherSerializerSnapshotMigrationTest.java
index df836a3..45339ab 100644
--- a/flink-scala/src/test/java/org/apache/flink/api/scala/typeutils/ScalaEitherSerializerSnapshotMigrationTest.java
+++ b/flink-scala/src/test/java/org/apache/flink/api/scala/typeutils/ScalaEitherSerializerSnapshotMigrationTest.java
@@ -21,29 +21,39 @@ package org.apache.flink.api.scala.typeutils;
 import org.apache.flink.api.common.typeutils.TypeSerializerSnapshotMigrationTestBase;
 import org.apache.flink.api.common.typeutils.base.IntSerializer;
 import org.apache.flink.api.common.typeutils.base.StringSerializer;
-
 import org.apache.flink.testutils.migration.MigrationVersion;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
+
 import scala.util.Either;
 
 /**
  * Migration test for the {@link ScalaEitherSerializerSnapshot}.
  */
+@RunWith(Parameterized.class)
 public class ScalaEitherSerializerSnapshotMigrationTest extends TypeSerializerSnapshotMigrationTestBase<Either<Integer, String>> {
 
-	private static final String DATA = "flink-1.6-scala-either-serializer-data";
-	private static final String SNAPSHOT = "flink-1.6-scala-either-serializer-snapshot";
-
-	public ScalaEitherSerializerSnapshotMigrationTest() {
-		super(
-			TestSpecification.<Either<Integer, String>>builder(
-					"1.6-scala-either-serializer",
-					EitherSerializer.class,
-					ScalaEitherSerializerSnapshot.class,
-					MigrationVersion.v1_6)
-				.withNewSerializerProvider(() -> new EitherSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE))
-				.withSnapshotDataLocation(SNAPSHOT)
-				.withTestData(DATA, 10)
-		);
+	private static final String SPEC_NAME = "scala-either-serializer";
+
+	public ScalaEitherSerializerSnapshotMigrationTest(TestSpecification<Either<Integer, String>> testSpecification) {
+		super(testSpecification);
 	}
 
+	@SuppressWarnings("unchecked")
+	@Parameterized.Parameters(name = "Test Specification = {0}")
+	public static Collection<TestSpecification<?>> testSpecifications() {
+
+		final TestSpecifications testSpecifications = new TestSpecifications(MigrationVersion.v1_6, MigrationVersion.v1_7);
+
+		testSpecifications.add(
+			SPEC_NAME,
+			EitherSerializer.class,
+			ScalaEitherSerializerSnapshot.class,
+			() -> new EitherSerializer<>(IntSerializer.INSTANCE, StringSerializer.INSTANCE));
+
+		return testSpecifications.get();
+	}
 }
diff --git a/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-data b/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-data
new file mode 100644
index 0000000..203067c
Binary files /dev/null and b/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-data differ
diff --git a/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-snapshot b/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-snapshot
new file mode 100644
index 0000000..3e12866
Binary files /dev/null and b/flink-scala/src/test/resources/flink-1.7-scala-either-serializer-snapshot differ