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

网格计算

开发平台:

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.hdfs;
  19. import java.io.IOException;
  20. import java.io.InputStream;
  21. import java.io.OutputStream;
  22. import java.util.Random;
  23. import junit.framework.TestCase;
  24. import org.apache.commons.logging.Log;
  25. import org.apache.commons.logging.LogFactory;
  26. import org.apache.hadoop.conf.Configuration;
  27. import org.apache.hadoop.fs.FileStatus;
  28. import org.apache.hadoop.fs.FileSystem;
  29. import org.apache.hadoop.fs.Path;
  30. import org.apache.hadoop.security.UnixUserGroupInformation;
  31. import org.apache.hadoop.security.UserGroupInformation;
  32. /** Utilities for append-related tests */ 
  33. class AppendTestUtil {
  34.   /** For specifying the random number generator seed,
  35.    *  change the following value:
  36.    */
  37.   static final Long RANDOM_NUMBER_GENERATOR_SEED = null;
  38.   static final Log LOG = LogFactory.getLog(AppendTestUtil.class);
  39.   private static final Random SEED = new Random();
  40.   static {
  41.     final long seed = RANDOM_NUMBER_GENERATOR_SEED == null?
  42.         SEED.nextLong(): RANDOM_NUMBER_GENERATOR_SEED;
  43.     LOG.info("seed=" + seed);
  44.     SEED.setSeed(seed);
  45.   }
  46.   private static final ThreadLocal<Random> RANDOM = new ThreadLocal<Random>() {
  47.     protected Random initialValue() {
  48.       final Random r =  new Random();
  49.       synchronized(SEED) { 
  50.         final long seed = SEED.nextLong();
  51.         r.setSeed(seed);
  52.         LOG.info(Thread.currentThread().getName() + ": seed=" + seed);
  53.       }
  54.       return r;
  55.     }
  56.   };
  57.   
  58.   static int nextInt() {return RANDOM.get().nextInt();}
  59.   static int nextInt(int n) {return RANDOM.get().nextInt(n);}
  60.   static int nextLong() {return RANDOM.get().nextInt();}
  61.   static byte[] randomBytes(long seed, int size) {
  62.     LOG.info("seed=" + seed + ", size=" + size);
  63.     final byte[] b = new byte[size];
  64.     final Random rand = new Random(seed);
  65.     rand.nextBytes(b);
  66.     return b;
  67.   }
  68.   static void sleep(long ms) {
  69.     try {
  70.       Thread.sleep(ms);
  71.     } catch (InterruptedException e) {
  72.       LOG.info("ms=" + ms, e);
  73.     }
  74.   }
  75.   static FileSystem createHdfsWithDifferentUsername(Configuration conf
  76.       ) throws IOException {
  77.     Configuration conf2 = new Configuration(conf);
  78.     String username = UserGroupInformation.getCurrentUGI().getUserName()+"_XXX";
  79.     UnixUserGroupInformation.saveToConf(conf2,
  80.         UnixUserGroupInformation.UGI_PROPERTY_NAME,
  81.         new UnixUserGroupInformation(username, new String[]{"supergroup"}));
  82.     return FileSystem.get(conf2);
  83.   }
  84.   static void write(OutputStream out, int offset, int length) throws IOException {
  85.     final byte[] bytes = new byte[length];
  86.     for(int i = 0; i < length; i++) {
  87.       bytes[i] = (byte)(offset + i);
  88.     }
  89.     out.write(bytes);
  90.   }
  91.   
  92.   static void check(FileSystem fs, Path p, long length) throws IOException {
  93.     int i = -1;
  94.     try {
  95.       final FileStatus status = fs.getFileStatus(p);
  96.       TestCase.assertEquals(length, status.getLen());
  97.       InputStream in = fs.open(p);
  98.       for(i++; i < length; i++) {
  99.         TestCase.assertEquals((byte)i, (byte)in.read());  
  100.       }
  101.       i = -(int)length;
  102.       TestCase.assertEquals(-1, in.read()); //EOF  
  103.       in.close();
  104.     } catch(IOException ioe) {
  105.       throw new IOException("p=" + p + ", length=" + length + ", i=" + i, ioe);
  106.     }
  107.   }
  108. }