TestVersionedWritable.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.io;
  19. import java.io.*;
  20. import java.util.Random;
  21. import junit.framework.TestCase;
  22. /** Unit tests for VersionedWritable. */
  23. public class TestVersionedWritable extends TestCase {
  24.   public TestVersionedWritable(String name) { super(name); }
  25.   /** Example class used in test cases below. */
  26.   public static class SimpleVersionedWritable extends VersionedWritable {
  27.     private static final Random RANDOM = new Random();
  28.     int state = RANDOM.nextInt();
  29.     private static byte VERSION = 1;
  30.     public byte getVersion() { 
  31.       return VERSION; 
  32.     }
  33.     public void write(DataOutput out) throws IOException {
  34.       super.write(out); // version.
  35.       out.writeInt(state);
  36.     }
  37.     public void readFields(DataInput in) throws IOException {
  38.       super.readFields(in); // version
  39.       this.state = in.readInt();
  40.     }
  41.     public static SimpleVersionedWritable read(DataInput in) throws IOException {
  42.       SimpleVersionedWritable result = new SimpleVersionedWritable();
  43.       result.readFields(in);
  44.       return result;
  45.     }
  46.     /** Required by test code, below. */
  47.     public boolean equals(Object o) {
  48.       if (!(o instanceof SimpleVersionedWritable))
  49.         return false;
  50.       SimpleVersionedWritable other = (SimpleVersionedWritable)o;
  51.       return this.state == other.state;
  52.     }
  53.   }
  54.   public static class AdvancedVersionedWritable extends SimpleVersionedWritable {
  55.     String shortTestString = "Now is the time for all good men to come to the aid of the Party";
  56.     String longTestString = "Four score and twenty years ago. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah.";
  57.     String compressableTestString = 
  58.       "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. " +
  59.       "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. " +
  60.       "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. ";
  61.     SimpleVersionedWritable containedObject = new SimpleVersionedWritable();
  62.     String[] testStringArray = {"The", "Quick", "Brown", "Fox", "Jumped", "Over", "The", "Lazy", "Dog"};
  63.     public void write(DataOutput out) throws IOException {
  64.       super.write(out);
  65.       out.writeUTF(shortTestString); 
  66.       WritableUtils.writeString(out, longTestString); 
  67.       int comp = WritableUtils.writeCompressedString(out, compressableTestString); 
  68.       System.out.println("Compression is " + comp + "%");
  69.       containedObject.write(out); // Warning if this is a recursive call, you need a null value.
  70.       WritableUtils.writeStringArray(out, testStringArray); 
  71.     }
  72.     public void readFields(DataInput in) throws IOException {
  73.       super.readFields(in);
  74.       shortTestString = in.readUTF();
  75.       longTestString = WritableUtils.readString(in); 
  76.       compressableTestString = WritableUtils.readCompressedString(in);
  77.       containedObject.readFields(in); // Warning if this is a recursive call, you need a null value.
  78.       testStringArray = WritableUtils.readStringArray(in); 
  79.     }
  80.     public boolean equals(Object o) {
  81.       super.equals(o);
  82.       if (!shortTestString.equals(((AdvancedVersionedWritable)o).shortTestString)) { return false;}
  83.       if (!longTestString.equals(((AdvancedVersionedWritable)o).longTestString)) { return false;}
  84.       if (!compressableTestString.equals(((AdvancedVersionedWritable)o).compressableTestString)) { return false;}
  85.       if (testStringArray.length != ((AdvancedVersionedWritable)o).testStringArray.length) { return false;}
  86.       for(int i=0;i< testStringArray.length;i++){
  87.         if (!testStringArray[i].equals(((AdvancedVersionedWritable)o).testStringArray[i])) {
  88.           return false;
  89.         }
  90.       }
  91.       if (!containedObject.equals(((AdvancedVersionedWritable)o).containedObject)) { return false;}
  92.       return true;
  93.     }
  94.   }
  95.   /* This one checks that version mismatch is thrown... */
  96.   public static class SimpleVersionedWritableV2 extends SimpleVersionedWritable {
  97.     static byte VERSION = 2;
  98.     public byte getVersion() { 
  99.       return VERSION; 
  100.     }
  101.   }
  102.   /** Test 1: Check that SimpleVersionedWritable. */
  103.   public void testSimpleVersionedWritable() throws Exception {
  104.     TestWritable.testWritable(new SimpleVersionedWritable());
  105.   }
  106.   /** Test 2: Check that AdvancedVersionedWritable Works (well, why wouldn't it!). */
  107.   public void testAdvancedVersionedWritable() throws Exception {
  108.     TestWritable.testWritable(new AdvancedVersionedWritable());
  109.   }
  110.   /** Test 3: Check that SimpleVersionedWritable throws an Exception. */
  111.   public void testSimpleVersionedWritableMismatch() throws Exception {
  112.     TestVersionedWritable.testVersionedWritable(new SimpleVersionedWritable(), new SimpleVersionedWritableV2());
  113.   }
  114.   /** Utility method for testing VersionedWritables. */
  115.   public static void testVersionedWritable(Writable before, Writable after) throws Exception {
  116.     DataOutputBuffer dob = new DataOutputBuffer();
  117.     before.write(dob);
  118.     DataInputBuffer dib = new DataInputBuffer();
  119.     dib.reset(dob.getData(), dob.getLength());
  120.     try {
  121.       after.readFields(dib);
  122.     } catch (VersionMismatchException vmme) {
  123.       System.out.println("Good, we expected this:" + vmme);
  124.       return;
  125.     }
  126.     throw new Exception("A Version Mismatch Didn't Happen!");
  127.   }
  128. }