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

网格计算

开发平台:

Java

  1. /**
  2.  * Copyright 2007 The Apache Software Foundation
  3.  *
  4.  * Licensed to the Apache Software Foundation (ASF) under one
  5.  * or more contributor license agreements.  See the NOTICE file
  6.  * distributed with this work for additional information
  7.  * regarding copyright ownership.  The ASF licenses this file
  8.  * to you under the Apache License, Version 2.0 (the
  9.  * "License"); you may not use this file except in compliance
  10.  * with the License.  You may obtain a copy of the License at
  11.  *
  12.  *     http://www.apache.org/licenses/LICENSE-2.0
  13.  *
  14.  * Unless required by applicable law or agreed to in writing, software
  15.  * distributed under the License is distributed on an "AS IS" BASIS,
  16.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17.  * See the License for the specific language governing permissions and
  18.  * limitations under the License.
  19.  */
  20. package org.apache.hadoop.io;
  21. import java.io.ByteArrayInputStream;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.DataInputStream;
  24. import java.io.DataOutputStream;
  25. import java.util.Map;
  26. import junit.framework.TestCase;
  27. /**
  28.  * Tests MapWritable
  29.  */
  30. public class TestMapWritable extends TestCase {
  31.   /** the test */
  32.   @SuppressWarnings("unchecked")
  33.   public void testMapWritable() {
  34.     Text[] keys = {
  35.         new Text("key1"),
  36.         new Text("key2"),
  37.         new Text("Key3"),
  38.     };
  39.     
  40.     BytesWritable[] values = {
  41.         new BytesWritable("value1".getBytes()),
  42.         new BytesWritable("value2".getBytes()),
  43.         new BytesWritable("value3".getBytes())
  44.     };
  45.     MapWritable inMap = new MapWritable();
  46.     for (int i = 0; i < keys.length; i++) {
  47.       inMap.put(keys[i], values[i]);
  48.     }
  49.     MapWritable outMap = new MapWritable(inMap);
  50.     assertEquals(inMap.size(), outMap.size());
  51.     
  52.     for (Map.Entry<Writable, Writable> e: inMap.entrySet()) {
  53.       assertTrue(outMap.containsKey(e.getKey()));
  54.       assertEquals(0, ((WritableComparable) outMap.get(e.getKey())).compareTo(
  55.           e.getValue()));
  56.     }
  57.     
  58.     // Now for something a little harder...
  59.     
  60.     Text[] maps = {
  61.         new Text("map1"),
  62.         new Text("map2")
  63.     };
  64.     
  65.     MapWritable mapOfMaps = new MapWritable();
  66.     mapOfMaps.put(maps[0], inMap);
  67.     mapOfMaps.put(maps[1], outMap);
  68.     
  69.     MapWritable copyOfMapOfMaps = new MapWritable(mapOfMaps);
  70.     for (int i = 0; i < maps.length; i++) {
  71.       assertTrue(copyOfMapOfMaps.containsKey(maps[i]));
  72.       MapWritable a = (MapWritable) mapOfMaps.get(maps[i]);
  73.       MapWritable b = (MapWritable) copyOfMapOfMaps.get(maps[i]);
  74.       assertEquals(a.size(), b.size());
  75.       for (Writable key: a.keySet()) {
  76.         assertTrue(b.containsKey(key));
  77.         
  78.         // This will work because we know what we put into each set
  79.         
  80.         WritableComparable aValue = (WritableComparable) a.get(key);
  81.         WritableComparable bValue = (WritableComparable) b.get(key);
  82.         assertEquals(0, aValue.compareTo(bValue));
  83.       }
  84.     }
  85.   }
  86.   /**
  87.    * Test that number of "unknown" classes is propagated across multiple copies.
  88.    */
  89.   @SuppressWarnings("deprecation")
  90.   public void testForeignClass() {
  91.     MapWritable inMap = new MapWritable();
  92.     inMap.put(new Text("key"), new UTF8("value"));
  93.     inMap.put(new Text("key2"), new UTF8("value2"));
  94.     MapWritable outMap = new MapWritable(inMap);
  95.     MapWritable copyOfCopy = new MapWritable(outMap);
  96.     assertEquals(1, copyOfCopy.getNewClasses());
  97.   }
  98.   
  99.   /**
  100.    * Assert MapWritable does not grow across calls to readFields.
  101.    * @throws Exception
  102.    * @see <a href="https://issues.apache.org/jira/browse/HADOOP-2244">HADOOP-2244</a>
  103.    */
  104.   public void testMultipleCallsToReadFieldsAreSafe() throws Exception {
  105.     // Create an instance and add a key/value.
  106.     MapWritable m = new MapWritable();
  107.     final Text t = new Text(getName());
  108.     m.put(t, t);
  109.     // Get current size of map.  Key values are 't'.
  110.     int count = m.size();
  111.     // Now serialize... save off the bytes.
  112.     ByteArrayOutputStream baos = new ByteArrayOutputStream();
  113.     DataOutputStream dos = new DataOutputStream(baos);
  114.     m.write(dos);
  115.     dos.close();
  116.     // Now add new values to the MapWritable.
  117.     m.put(new Text("key1"), new Text("value1"));
  118.     m.put(new Text("key2"), new Text("value2"));
  119.     // Now deserialize the original MapWritable.  Ensure count and key values
  120.     // match original state.
  121.     ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
  122.     DataInputStream dis = new DataInputStream(bais);
  123.     m.readFields(dis);
  124.     assertEquals(count, m.size());
  125.     assertTrue(m.get(t).equals(t));
  126.     dis.close();
  127.   }
  128. }