zentol commented on a change in pull request #9258: [FLINK-13460][tests] Rework 
SerializedThrowableTest to not use Unsafe#defineClass()
URL: https://github.com/apache/flink/pull/9258#discussion_r314186298
 
 

 ##########
 File path: 
flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java
 ##########
 @@ -185,26 +185,152 @@ public Serializable getObject() {
         * This is useful when unit testing the class loading behavior of code, 
and needing a class that
         * is outside the system class path.
         *
-        * <p>This method behaves like {@code 
createObjectFromNewClassLoader(ClassLoader.getSystemClassLoader())}.
+        * <p>This method behaves like {@code 
createSerializableObjectFromNewClassLoader(ClassLoader.getSystemClassLoader())}.
         */
-       public static ObjectAndClassLoader createObjectFromNewClassLoader() {
-               return 
createObjectFromNewClassLoader(ClassLoader.getSystemClassLoader());
+       public static ObjectAndClassLoader<Serializable> 
createSerializableObjectFromNewClassLoader() {
+               return 
createSerializableObjectFromNewClassLoader(ClassLoader.getSystemClassLoader());
        }
 
        /**
         * Creates a new ClassLoader and a new class inside that ClassLoader.
         * This is useful when unit testing the class loading behavior of code, 
and needing a class that
         * is outside the system class path.
         *
+        * <p>This method behaves like {@code 
createExceptionObjectFromNewClassLoader(ClassLoader.getSystemClassLoader())}.
+        */
+       public static ObjectAndClassLoader<Exception> 
createExceptionObjectFromNewClassLoader() {
+               return 
createExceptionObjectFromNewClassLoader(ClassLoader.getSystemClassLoader());
+       }
+
+       /**
+        * Creates a new ClassLoader and a new {@link Serializable} class 
inside that ClassLoader.
+        * This is useful when unit testing the class loading behavior of code, 
and needing a class that
+        * is outside the system class path.
+        *
         * <p>NOTE: Even though this method may throw IOExceptions, we do not 
declare those and rather
         * wrap them in Runtime Exceptions. While this is generally 
discouraged, we do this here because it
         * is merely a test utility and not production code, and it makes it 
easier to use this method
         * during the initialization of variables and especially static 
variables.
         *
         * @param parentClassLoader The parent class loader used for the newly 
created class loader.
         */
-       public static ObjectAndClassLoader 
createObjectFromNewClassLoader(@Nullable ClassLoader parentClassLoader) {
-               final String testClassName = 
"org.apache.flink.TestSerializable";
+       public static ObjectAndClassLoader<Serializable> 
createSerializableObjectFromNewClassLoader(@Nullable ClassLoader 
parentClassLoader) {
+               // this is the byte code of the following simple class:
+               // 
----------------------------------------------------------------------
+               // package org.apache.flink;
+               //
+               // public class TestSerializable implements 
java.io.Serializable {}
+               // 
----------------------------------------------------------------------
+
+               final byte[] classData = {-54, -2, -70, -66, 0, 0, 0, 51, 0, 
65, 10, 0, 15, 0, 43, 7, 0, 44,
+                       10, 0, 2, 0, 43, 10, 0, 2, 0, 45, 9, 0, 7, 0, 46, 10, 
0, 15, 0, 47, 7, 0, 48, 7, 0,
+                       49, 10, 0, 8, 0, 43, 8, 0, 50, 10, 0, 8, 0, 51, 10, 0, 
8, 0, 52, 10, 0, 8, 0, 53, 10,
+                       0, 8, 0, 54, 7, 0, 55, 7, 0, 56, 1, 0, 16, 115, 101, 
114, 105, 97, 108, 86, 101, 114,
+                       115, 105, 111, 110, 85, 73, 68, 1, 0, 1, 74, 1, 0, 13, 
67, 111, 110, 115, 116, 97, 110,
+                       116, 86, 97, 108, 117, 101, 5, -1, -1, -1, -1, -1, -1, 
-1, -3, 1, 0, 6, 114, 97, 110,
+                       100, 111, 109, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 
0, 3, 40, 41, 86, 1, 0, 4, 67,
+                       111, 100, 101, 1, 0, 15, 76, 105, 110, 101, 78, 117, 
109, 98, 101, 114, 84, 97, 98, 108,
+                       101, 1, 0, 18, 76, 111, 99, 97, 108, 86, 97, 114, 105, 
97, 98, 108, 101, 84, 97, 98,
+                       108, 101, 1, 0, 4, 116, 104, 105, 115, 1, 0, 35, 76, 
111, 114, 103, 47, 97, 112, 97, 99,
+                       104, 101, 47, 102, 108, 105, 110, 107, 47, 84, 101, 
115, 116, 83, 101, 114, 105, 97, 108,
+                       105, 122, 97, 98, 108, 101, 59, 1, 0, 6, 101, 113, 117, 
97, 108, 115, 1, 0, 21, 40, 76,
+                       106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 
106, 101, 99, 116, 59, 41, 90, 1, 0,
+                       1, 111, 1, 0, 18, 76, 106, 97, 118, 97, 47, 108, 97, 
110, 103, 47, 79, 98, 106, 101, 99,
+                       116, 59, 1, 0, 4, 116, 104, 97, 116, 1, 0, 13, 83, 116, 
97, 99, 107, 77, 97, 112, 84, 97,
+                       98, 108, 101, 7, 0, 48, 1, 0, 8, 104, 97, 115, 104, 67, 
111, 100, 101, 1, 0, 3, 40, 41,
+                       73, 1, 0, 8, 116, 111, 83, 116, 114, 105, 110, 103, 1, 
0, 20, 40, 41, 76, 106, 97, 118, 97,
+                       47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 
59, 1, 0, 10, 83, 111, 117, 114,
+                       99, 101, 70, 105, 108, 101, 1, 0, 21, 84, 101, 115, 
116, 83, 101, 114, 105, 97, 108, 105,
+                       122, 97, 98, 108, 101, 46, 106, 97, 118, 97, 12, 0, 23, 
0, 24, 1, 0, 16, 106, 97, 118, 97,
+                       47, 117, 116, 105, 108, 47, 82, 97, 110, 100, 111, 109, 
12, 0, 57, 0, 58, 12, 0, 22, 0, 18,
+                       12, 0, 59, 0, 60, 1, 0, 33, 111, 114, 103, 47, 97, 112, 
97, 99, 104, 101, 47, 102, 108, 105,
+                       110, 107, 47, 84, 101, 115, 116, 83, 101, 114, 105, 97, 
108, 105, 122, 97, 98, 108, 101, 1,
+                       0, 23, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 
116, 114, 105, 110, 103, 66, 117,
+                       105, 108, 100, 101, 114, 1, 0, 24, 84, 101, 115, 116, 
83, 101, 114, 105, 97, 108, 105, 122,
+                       97, 98, 108, 101, 123, 114, 97, 110, 100, 111, 109, 61, 
12, 0, 61, 0, 62, 12, 0, 61, 0, 63,
+                       12, 0, 61, 0, 64, 12, 0, 39, 0, 40, 1, 0, 16, 106, 97, 
118, 97, 47, 108, 97, 110, 103, 47,
+                       79, 98, 106, 101, 99, 116, 1, 0, 20, 106, 97, 118, 97, 
47, 105, 111, 47, 83, 101, 114, 105,
+                       97, 108, 105, 122, 97, 98, 108, 101, 1, 0, 8, 110, 101, 
120, 116, 76, 111, 110, 103, 1, 0,
+                       3, 40, 41, 74, 1, 0, 8, 103, 101, 116, 67, 108, 97, 
115, 115, 1, 0, 19, 40, 41, 76, 106, 97,
+                       118, 97, 47, 108, 97, 110, 103, 47, 67, 108, 97, 115, 
115, 59, 1, 0, 6, 97, 112, 112, 101,
+                       110, 100, 1, 0, 45, 40, 76, 106, 97, 118, 97, 47, 108, 
97, 110, 103, 47, 83, 116, 114, 105,
+                       110, 103, 59, 41, 76, 106, 97, 118, 97, 47, 108, 97, 
110, 103, 47, 83, 116, 114, 105, 110,
+                       103, 66, 117, 105, 108, 100, 101, 114, 59, 1, 0, 28, 
40, 74, 41, 76, 106, 97, 118, 97, 47,
+                       108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 66, 
117, 105, 108, 100, 101, 114, 59, 1,
+                       0, 28, 40, 67, 41, 76, 106, 97, 118, 97, 47, 108, 97, 
110, 103, 47, 83, 116, 114, 105, 110,
+                       103, 66, 117, 105, 108, 100, 101, 114, 59, 0, 33, 0, 7, 
0, 15, 0, 1, 0, 16, 0, 2, 0, 26, 0,
+                       17, 0, 18, 0, 1, 0, 19, 0, 0, 0, 2, 0, 20, 0, 18, 0, 
22, 0, 18, 0, 0, 0, 4, 0, 1, 0, 23, 0,
+                       24, 0, 1, 0, 25, 0, 0, 0, 69, 0, 3, 0, 1, 0, 0, 0, 19, 
42, -73, 0, 1, 42, -69, 0, 2, 89, -73,
+                       0, 3, -74, 0, 4, -75, 0, 5, -79, 0, 0, 0, 2, 0, 26, 0, 
0, 0, 14, 0, 3, 0, 0, 0, 30, 0, 4, 0,
+                       31, 0, 18, 0, 32, 0, 27, 0, 0, 0, 12, 0, 1, 0, 0, 0, 
19, 0, 28, 0, 29, 0, 0, 0, 1, 0, 30, 0,
+                       31, 0, 1, 0, 25, 0, 0, 0, -116, 0, 4, 0, 3, 0, 0, 0, 
47, 42, 43, -90, 0, 5, 4, -84, 43, -58,
+                       0, 14, 42, -74, 0, 6, 43, -74, 0, 6, -91, 0, 5, 3, -84, 
43, -64, 0, 7, 77, 42, -76, 0, 5, 44,
+                       -76, 0, 5, -108, -102, 0, 7, 4, -89, 0, 4, 3, -84, 0, 
0, 0, 3, 0, 26, 0, 0, 0, 18, 0, 4, 0, 0,
+                       0, 36, 0, 7, 0, 37, 0, 24, 0, 39, 0, 29, 0, 40, 0, 27, 
0, 0, 0, 32, 0, 3, 0, 0, 0, 47, 0, 28,
+                       0, 29, 0, 0, 0, 0, 0, 47, 0, 32, 0, 33, 0, 1, 0, 29, 0, 
18, 0, 34, 0, 29, 0, 2, 0, 35, 0, 0,
+                       0, 13, 0, 5, 7, 14, 1, -4, 0, 20, 7, 0, 36, 64, 1, 0, 
1, 0, 37, 0, 38, 0, 1, 0, 25, 0, 0, 0,
+                       56, 0, 5, 0, 1, 0, 0, 0, 14, 42, -76, 0, 5, 42, -76, 0, 
5, 16, 32, 125, -125, -120, -84, 0, 0,
+                       0, 2, 0, 26, 0, 0, 0, 6, 0, 1, 0, 0, 0, 46, 0, 27, 0, 
0, 0, 12, 0, 1, 0, 0, 0, 14, 0, 28, 0,
+                       29, 0, 0, 0, 1, 0, 39, 0, 40, 0, 1, 0, 25, 0, 0, 0, 70, 
0, 3, 0, 1, 0, 0, 0, 28, -69, 0, 8,
+                       89, -73, 0, 9, 18, 10, -74, 0, 11, 42, -76, 0, 5, -74, 
0, 12, 16, 125, -74, 0, 13, -74, 0, 14,
+                       -80, 0, 0, 0, 2, 0, 26, 0, 0, 0, 6, 0, 1, 0, 0, 0, 51, 
0, 27, 0, 0, 0, 12, 0, 1, 0, 0, 0, 28,
+                       0, 28, 0, 29, 0, 0, 0, 1, 0, 41, 0, 0, 0, 2, 0, 42};
+
+               return createObjectFromNewClassLoader(
+                       "org.apache.flink.TestSerializable",
+                       Serializable.class,
+                       classData,
+                       parentClassLoader);
+       }
+
+       /**
+        * Creates a new ClassLoader and a new {@link Exception} class inside 
that ClassLoader.
+        * This is useful when unit testing the class loading behavior of code, 
and needing a class that
+        * is outside the system class path.
+        *
+        * <p>NOTE: Even though this method may throw IOExceptions, we do not 
declare those and rather
+        * wrap them in Runtime Exceptions. While this is generally 
discouraged, we do this here because it
+        * is merely a test utility and not production code, and it makes it 
easier to use this method
+        * during the initialization of variables and especially static 
variables.
+        *
+        * @param parentClassLoader The parent class loader used for the newly 
created class loader.
+        */
+       public static ObjectAndClassLoader<Exception> 
createExceptionObjectFromNewClassLoader(@Nullable ClassLoader 
parentClassLoader) {
+               // an exception class, as bytes
 
 Review comment:
   It's just a class that extends `extends Exception`.
   
   the binary code will be replace with actual source code in a follow-up. 
(FLINK-13650)

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to