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

网格计算

开发平台:

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 junit.framework.TestCase;
  21. import org.apache.commons.logging.*;
  22. import org.apache.hadoop.fs.*;
  23. import org.apache.hadoop.conf.*;
  24. /** Support for flat files of binary key/value pairs. */
  25. public class TestArrayFile extends TestCase {
  26.   private static final Log LOG = LogFactory.getLog(TestArrayFile.class);
  27.   private static String FILE =
  28.     System.getProperty("test.build.data",".") + "/test.array";
  29.   public TestArrayFile(String name) { 
  30.     super(name); 
  31.   }
  32.   public void testArrayFile() throws Exception {
  33.     Configuration conf = new Configuration();
  34.     FileSystem fs = FileSystem.getLocal(conf);
  35.     RandomDatum[] data = generate(10000);
  36.     writeTest(fs, data, FILE);
  37.     readTest(fs, data, FILE, conf);
  38.   }
  39.   public void testEmptyFile() throws Exception {
  40.     Configuration conf = new Configuration();
  41.     FileSystem fs = FileSystem.getLocal(conf);
  42.     writeTest(fs, new RandomDatum[0], FILE);
  43.     ArrayFile.Reader reader = new ArrayFile.Reader(fs, FILE, conf);
  44.     assertNull(reader.get(0, new RandomDatum()));
  45.     reader.close();
  46.   }
  47.   private static RandomDatum[] generate(int count) {
  48.     LOG.debug("generating " + count + " records in debug");
  49.     RandomDatum[] data = new RandomDatum[count];
  50.     RandomDatum.Generator generator = new RandomDatum.Generator();
  51.     for (int i = 0; i < count; i++) {
  52.       generator.next();
  53.       data[i] = generator.getValue();
  54.     }
  55.     return data;
  56.   }
  57.   private static void writeTest(FileSystem fs, RandomDatum[] data, String file)
  58.     throws IOException {
  59.     Configuration conf = new Configuration();
  60.     MapFile.delete(fs, file);
  61.     LOG.debug("creating with " + data.length + " debug");
  62.     ArrayFile.Writer writer = new ArrayFile.Writer(conf, fs, file, RandomDatum.class);
  63.     writer.setIndexInterval(100);
  64.     for (int i = 0; i < data.length; i++)
  65.       writer.append(data[i]);
  66.     writer.close();
  67.   }
  68.   private static void readTest(FileSystem fs, RandomDatum[] data, String file, Configuration conf)
  69.     throws IOException {
  70.     RandomDatum v = new RandomDatum();
  71.     LOG.debug("reading " + data.length + " debug");
  72.     ArrayFile.Reader reader = new ArrayFile.Reader(fs, file, conf);
  73.     for (int i = 0; i < data.length; i++) {       // try forwards
  74.       reader.get(i, v);
  75.       if (!v.equals(data[i])) {
  76.         throw new RuntimeException("wrong value at " + i);
  77.       }
  78.     }
  79.     for (int i = data.length-1; i >= 0; i--) {    // then backwards
  80.       reader.get(i, v);
  81.       if (!v.equals(data[i])) {
  82.         throw new RuntimeException("wrong value at " + i);
  83.       }
  84.     }
  85.     reader.close();
  86.     LOG.debug("done reading " + data.length + " debug");
  87.   }
  88.   /** For debugging and testing. */
  89.   public static void main(String[] args) throws Exception {
  90.     int count = 1024 * 1024;
  91.     boolean create = true;
  92.     boolean check = true;
  93.     String file = FILE;
  94.     String usage = "Usage: TestArrayFile [-count N] [-nocreate] [-nocheck] file";
  95.       
  96.     if (args.length == 0) {
  97.       System.err.println(usage);
  98.       System.exit(-1);
  99.     }
  100.     Configuration conf = new Configuration();
  101.     int i = 0;
  102.     Path fpath = null;
  103.     FileSystem fs = null;
  104.     try {
  105.       for (; i < args.length; i++) {       // parse command line
  106.         if (args[i] == null) {
  107.           continue;
  108.         } else if (args[i].equals("-count")) {
  109.           count = Integer.parseInt(args[++i]);
  110.         } else if (args[i].equals("-nocreate")) {
  111.           create = false;
  112.         } else if (args[i].equals("-nocheck")) {
  113.           check = false;
  114.         } else {                                       
  115.           // file is required parameter
  116.           file = args[i];
  117.           fpath=new Path(file);
  118.         }
  119.       }
  120.         
  121.       fs = fpath.getFileSystem(conf);
  122.         
  123.       LOG.info("count = " + count);
  124.       LOG.info("create = " + create);
  125.       LOG.info("check = " + check);
  126.       LOG.info("file = " + file);
  127.       RandomDatum[] data = generate(count);
  128.       if (create) {
  129.         writeTest(fs, data, file);
  130.       }
  131.       if (check) {
  132.         readTest(fs, data, file, conf);
  133.       }
  134.     } finally {
  135.       fs.close();
  136.     }
  137.   }
  138. }