You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mrunit.apache.org by br...@apache.org on 2014/03/04 19:55:46 UTC

git commit: MRUNIT-193 - Serialization.copy throws NPE instead of ISE (missing serilization impl) for Hadoop 2.x (Cosmin Lehen via Brock Noland)

Repository: mrunit
Updated Branches:
  refs/heads/trunk 2c24ab2af -> 57196c39a


MRUNIT-193 - Serialization.copy throws NPE instead of ISE (missing serilization impl) for Hadoop 2.x (Cosmin Lehen via Brock Noland)


Project: http://git-wip-us.apache.org/repos/asf/mrunit/repo
Commit: http://git-wip-us.apache.org/repos/asf/mrunit/commit/57196c39
Tree: http://git-wip-us.apache.org/repos/asf/mrunit/tree/57196c39
Diff: http://git-wip-us.apache.org/repos/asf/mrunit/diff/57196c39

Branch: refs/heads/trunk
Commit: 57196c39a73cf2251e0f2ba7da225731362407ba
Parents: 2c24ab2
Author: Brock Noland <br...@apache.org>
Authored: Tue Mar 4 12:52:41 2014 -0600
Committer: Brock Noland <br...@apache.org>
Committed: Tue Mar 4 12:52:41 2014 -0600

----------------------------------------------------------------------
 .../hadoop/mrunit/internal/io/Serialization.java     | 12 +++++++++---
 .../hadoop/mrunit/internal/io/TestSerialization.java | 15 ++++++++++++---
 2 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mrunit/blob/57196c39/src/main/java/org/apache/hadoop/mrunit/internal/io/Serialization.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/mrunit/internal/io/Serialization.java b/src/main/java/org/apache/hadoop/mrunit/internal/io/Serialization.java
index 78b60ae..8301d41 100644
--- a/src/main/java/org/apache/hadoop/mrunit/internal/io/Serialization.java
+++ b/src/main/java/org/apache/hadoop/mrunit/internal/io/Serialization.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.mrunit.internal.io;
 
+import com.google.common.base.Preconditions;
+
 import java.io.IOException;
 
 import org.apache.hadoop.conf.Configuration;
@@ -58,16 +60,20 @@ public class Serialization {
     final Class<?> clazz = orig.getClass();
     final Serializer<Object> serializer;
     final Deserializer<Object> deserializer;
+    String errorMsg = "No applicable class implementing Serialization in conf "
+                      + "at io.serializations: " + clazz;
     try {
       serializer = (Serializer<Object>) serializationFactory
           .getSerializer(clazz);
       deserializer = (Deserializer<Object>) serializationFactory
           .getDeserializer(clazz);
+    // hadoop 1.x will throw
     } catch (NullPointerException e) {
-      throw new IllegalStateException(
-          "No applicable class implementing Serialization in conf at io.serializations for "
-              + orig.getClass(), e);
+      throw new IllegalStateException(errorMsg, e);
     }
+    // hadoop 2.x will return a null
+    Preconditions.checkState(serializer != null, errorMsg);
+    Preconditions.checkState(deserializer != null, errorMsg);
     try {
       final DataOutputBuffer outputBuffer = new DataOutputBuffer();
       serializer.open(outputBuffer);

http://git-wip-us.apache.org/repos/asf/mrunit/blob/57196c39/src/test/java/org/apache/hadoop/mrunit/internal/io/TestSerialization.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/hadoop/mrunit/internal/io/TestSerialization.java b/src/test/java/org/apache/hadoop/mrunit/internal/io/TestSerialization.java
index 099b7c6..ac530ab 100644
--- a/src/test/java/org/apache/hadoop/mrunit/internal/io/TestSerialization.java
+++ b/src/test/java/org/apache/hadoop/mrunit/internal/io/TestSerialization.java
@@ -17,13 +17,14 @@
  */
 package org.apache.hadoop.mrunit.internal.io;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.io.IntWritable;
-import org.apache.hadoop.mrunit.internal.io.Serialization;
+import org.apache.hadoop.io.Writable;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
 public class TestSerialization {
 
   @Test
@@ -58,4 +59,12 @@ public class TestSerialization {
     assertEquals(new Integer(2), int2);
   }
 
+  @Test(expected = IllegalStateException.class)
+  public void testCopyExceptionIfNoSerializer() {
+    final Configuration conf = new Configuration();
+    Serialization serialization = new Serialization(conf);
+    // there's no implicit serializer for Integer, so it should throw ISE
+    serialization.copy(1, 1);
+  }
+
 }