Package org.apache.hadoop.hdfs.protocol

Source Code of org.apache.hadoop.hdfs.protocol.TestClientProxyResponses

/**
* 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.hdfs.protocol;

import com.facebook.swift.codec.ThriftCodec;
import com.facebook.swift.codec.ThriftCodecManager;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.ContentSummary;
import org.apache.hadoop.fs.OpenFileInfo;
import org.apache.hadoop.hdfs.protocol.ClientProxyResponses.*;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.transport.TMemoryBuffer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Random;

import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.*;

public class TestClientProxyResponses {
  final Random rnd = new Random(1337L);
  TMemoryBuffer transport;
  TCompactProtocol protocol;

  @Before
  public void setUp() {
    transport = new TMemoryBuffer(1024 * 1024);
    protocol = new TCompactProtocol(transport);
  }

  @After
  public void tearDown() {
    transport.close();
  }

  @Test
  public void testBlockLocationsResponse() throws Exception {
    verifyStruct(new BlockLocationsResponse(rndLocatedBlocksArr(rnd, 1)[0]));
  }

  @Test
  public void testOpenResponse() throws Exception {
    verifyStruct(new OpenResponse(rndLocatedBlocksWithMetaInfo(rnd)));
  }

  @Test
  public void testAppendResponse() throws Exception {
    verifyStruct(new AppendResponse(new LocatedBlockWithOldGS(rndBlock(rnd), rndDatanodeInfoArr(rnd,
        13), rnd.nextInt(1000), rnd.nextInt(5), rnd.nextInt(), rnd.nextInt(), rnd.nextInt())));
  }

  @Test
  public void testAddBlockResponse() throws Exception {
    verifyStruct(new AddBlockResponse(rndLocatedBlockWithMetaInfo(rnd)));
  }

  @Test
  public void testPartialListingResponse() throws Exception {
    verifyStruct(new PartialListingResponse(new DirectoryListing(rndHdfsFileStatusArr(rnd, 100),
        rnd.nextInt(100))));
    verifyStruct(new PartialListingResponse(null));
  }

  @Test
  public void testLocatedPartialListingResponse() throws Exception {
    verifyStruct(new LocatedPartialListingResponse(new LocatedDirectoryListing(rndHdfsFileStatusArr(
        rnd, 100), rndLocatedBlocksArr(rnd, 100), rnd.nextInt(100))));
    verifyStruct(new LocatedPartialListingResponse(null));
  }

  @Test
  public void testCorruptFileBlocksResponse() throws Exception {
    verifyStruct(new CorruptFileBlocksResponse(new CorruptFileBlocks(new String[]{rndString(rnd),
        rndString(rnd), rndString(rnd)}, rndString(rnd))));
  }

  @Test
  public void testFileInfoResponse() throws Exception {
    verifyStruct(new FileInfoResponse(rndHdfsFileStatusArr(rnd, 1)[0]));
  }

  @Test
  public void testContentSummaryResponse() throws Exception {
    verifyStruct(new ContentSummaryResponse(new ContentSummary(rnd.nextLong(), rnd.nextInt(),
        rnd.nextInt(), rnd.nextInt(), rnd.nextInt(), rnd.nextInt())));
  }

  @Test
  public void testBlockInfoResponse() throws Exception {
    verifyStruct(new BlockInfoResponse(new LocatedBlockWithFileName(rndBlock(rnd),
        rndDatanodeInfoArr(rnd, 13), rndString(rnd))));
  }

  @Test
  public void testStatsResponse() throws Exception {
    verifyStruct(new StatsResponse(rnd.nextInt(), rnd.nextInt(), rnd.nextInt(), rnd.nextInt(),
        rnd.nextInt(), rnd.nextInt(), rnd.nextInt()));
  }

  @Test
  public void testHardLinkedFilesResponse() throws Exception {
    verifyStruct(new HardLinkedFilesResponse(Arrays.asList(rndString(rnd), rndString(rnd),
        rndString(rnd))));
  }

  @Test
  public void testIterativeGetOpenFilesResponse() throws Exception {
    verifyStruct(new IterativeGetOpenFilesResponse(Arrays.asList(new OpenFileInfo(rndString(rnd),
        rnd.nextInt()), new OpenFileInfo(rndString(rnd), rnd.nextInt()), new OpenFileInfo(rndString(
        rnd), rnd.nextInt()))));
  }

  @Test
  public void testPingResponse() throws Exception {
    verifyStruct(new PingResponse(rnd.nextInt()));
  }

  /**
   * DatanodeID and DatanodeInfo were very problematic due to not well defined behaviour of
   * swift-codec, the next two tests isolate regression
   */
  @Test
  public void testDatanodeID() throws Exception {
    verifyStruct(rndDatanodeID(rnd));
  }

  @Test
  public void testDatanodeInfo() throws Exception {
    verifyStruct(rndDatanodeInfoArr(rnd, 1)[0]);
  }

  /** Another complicated inheritance hierarchy is rooted at Block */
  @Test
  public void testLocatedBlock() throws Exception {
    verifyStruct(rndLocatedBlockArr(rnd, 1)[0]);
  }

  @Test
  public void testVersionedLocatedBlock() throws Exception {
    verifyStruct(new VersionedLocatedBlock(new Block(rnd.nextInt(), rnd.nextInt(), rnd.nextInt()),
        rndDatanodeInfoArr(rnd, 2), rnd.nextInt(), rnd.nextInt()));
  }

  @Test
  public void testLocatedBlockWithMetaInfo() throws Exception {
    verifyStruct(new LocatedBlockWithMetaInfo(new Block(rnd.nextInt(), rnd.nextInt(),
        rnd.nextInt()), rndDatanodeInfoArr(rnd, 2), rnd.nextInt(), rnd.nextInt(), rnd.nextInt(),
        rnd.nextInt()));
  }

  @Test
  public void testLocatedBlockWithOldGS() throws Exception {
    verifyStruct(new LocatedBlockWithOldGS(new Block(rnd.nextInt(), rnd.nextInt(), rnd.nextInt()),
        rndDatanodeInfoArr(rnd, 2), rnd.nextInt(), rnd.nextInt(), rnd.nextInt(), rnd.nextInt(),
        rnd.nextInt()));
  }

  /** Helper verifier */
  private <T extends Writable> void verifyStruct(T object) throws Exception {
    @SuppressWarnings("unchecked") Class<T> clazz = (Class<T>) object.getClass();
    ThriftCodec<T> codec = new ThriftCodecManager().getCodec(clazz);
    codec.write(object, protocol);
    T thriftCopy = codec.read(protocol);
    assertEqualsVerbose(object, thriftCopy);
    T writableCopy = WritableUtils.clone(object, new Configuration());
    assertEqualsVerbose(object, writableCopy);
  }
}
TOP

Related Classes of org.apache.hadoop.hdfs.protocol.TestClientProxyResponses

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.