TestVersionedWritable.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.io;
- import java.io.*;
- import java.util.Random;
- import junit.framework.TestCase;
- /** Unit tests for VersionedWritable. */
- public class TestVersionedWritable extends TestCase {
- public TestVersionedWritable(String name) { super(name); }
-
-
- /** Example class used in test cases below. */
- public static class SimpleVersionedWritable extends VersionedWritable {
-
- private static final Random RANDOM = new Random();
- int state = RANDOM.nextInt();
-
- private static byte VERSION = 1;
- public byte getVersion() {
- return VERSION;
- }
-
- public void write(DataOutput out) throws IOException {
- super.write(out); // version.
- out.writeInt(state);
- }
-
- public void readFields(DataInput in) throws IOException {
- super.readFields(in); // version
- this.state = in.readInt();
- }
-
- public static SimpleVersionedWritable read(DataInput in) throws IOException {
- SimpleVersionedWritable result = new SimpleVersionedWritable();
- result.readFields(in);
- return result;
- }
-
- /** Required by test code, below. */
- public boolean equals(Object o) {
- if (!(o instanceof SimpleVersionedWritable))
- return false;
- SimpleVersionedWritable other = (SimpleVersionedWritable)o;
- return this.state == other.state;
- }
- }
-
- public static class AdvancedVersionedWritable extends SimpleVersionedWritable {
- String shortTestString = "Now is the time for all good men to come to the aid of the Party";
- String longTestString = "Four score and twenty years ago. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah.";
-
- String compressableTestString =
- "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. " +
- "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. " +
- "Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. Blah. ";
- SimpleVersionedWritable containedObject = new SimpleVersionedWritable();
- String[] testStringArray = {"The", "Quick", "Brown", "Fox", "Jumped", "Over", "The", "Lazy", "Dog"};
- public void write(DataOutput out) throws IOException {
- super.write(out);
- out.writeUTF(shortTestString);
- WritableUtils.writeString(out, longTestString);
- int comp = WritableUtils.writeCompressedString(out, compressableTestString);
- System.out.println("Compression is " + comp + "%");
- containedObject.write(out); // Warning if this is a recursive call, you need a null value.
- WritableUtils.writeStringArray(out, testStringArray);
- }
-
-
- public void readFields(DataInput in) throws IOException {
- super.readFields(in);
- shortTestString = in.readUTF();
- longTestString = WritableUtils.readString(in);
- compressableTestString = WritableUtils.readCompressedString(in);
- containedObject.readFields(in); // Warning if this is a recursive call, you need a null value.
- testStringArray = WritableUtils.readStringArray(in);
- }
-
- public boolean equals(Object o) {
- super.equals(o);
- if (!shortTestString.equals(((AdvancedVersionedWritable)o).shortTestString)) { return false;}
- if (!longTestString.equals(((AdvancedVersionedWritable)o).longTestString)) { return false;}
- if (!compressableTestString.equals(((AdvancedVersionedWritable)o).compressableTestString)) { return false;}
-
- if (testStringArray.length != ((AdvancedVersionedWritable)o).testStringArray.length) { return false;}
- for(int i=0;i< testStringArray.length;i++){
- if (!testStringArray[i].equals(((AdvancedVersionedWritable)o).testStringArray[i])) {
- return false;
- }
- }
-
- if (!containedObject.equals(((AdvancedVersionedWritable)o).containedObject)) { return false;}
-
- return true;
- }
-
- }
- /* This one checks that version mismatch is thrown... */
- public static class SimpleVersionedWritableV2 extends SimpleVersionedWritable {
- static byte VERSION = 2;
- public byte getVersion() {
- return VERSION;
- }
- }
- /** Test 1: Check that SimpleVersionedWritable. */
- public void testSimpleVersionedWritable() throws Exception {
- TestWritable.testWritable(new SimpleVersionedWritable());
- }
- /** Test 2: Check that AdvancedVersionedWritable Works (well, why wouldn't it!). */
- public void testAdvancedVersionedWritable() throws Exception {
- TestWritable.testWritable(new AdvancedVersionedWritable());
- }
- /** Test 3: Check that SimpleVersionedWritable throws an Exception. */
- public void testSimpleVersionedWritableMismatch() throws Exception {
- TestVersionedWritable.testVersionedWritable(new SimpleVersionedWritable(), new SimpleVersionedWritableV2());
- }
-
- /** Utility method for testing VersionedWritables. */
- public static void testVersionedWritable(Writable before, Writable after) throws Exception {
- DataOutputBuffer dob = new DataOutputBuffer();
- before.write(dob);
-
- DataInputBuffer dib = new DataInputBuffer();
- dib.reset(dob.getData(), dob.getLength());
- try {
- after.readFields(dib);
- } catch (VersionMismatchException vmme) {
- System.out.println("Good, we expected this:" + vmme);
- return;
- }
-
- throw new Exception("A Version Mismatch Didn't Happen!");
- }
- }