org.apache.hadoop.hdfs.protocol.TestClientProxyRequests.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.hdfs.protocol.TestClientProxyRequests.java

Source

/**
 * 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.permission.FsPermission;
import org.apache.hadoop.hdfs.protocol.ClientProxyRequests.*;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils;
import org.apache.hadoop.security.UnixUserGroupInformation;
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.assertEqualsVerbose;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndBlock;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndByteArr;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndDatanodeID;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndDatanodeInfoArr;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndFsPermission;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndLocatedBlockArr;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndPInt;
import static org.apache.hadoop.hdfs.protocol.RandomObjectsGenerators.rndString;

public class TestClientProxyRequests {
    final Random rnd = new Random(1337L);
    final UnixUserGroupInformation ugi = new UnixUserGroupInformation("testuser",
            Arrays.asList("testgroup1", "testgroup2", "testgroup3"));
    final RequestMetaInfo metaInfo = new RequestMetaInfo(37, "resource1", 1337, 31337, ugi);
    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 testResourceMetaInfo() throws Exception {
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), rndString(rnd), rndPInt(rnd), rndPInt(rnd), ugi));
        verifyStruct(new RequestMetaInfo(RequestMetaInfo.NO_CLUSTER_ID, rndString(rnd), rnd.nextInt(100),
                rndPInt(rnd), ugi));
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), null, rndPInt(rnd), rndPInt(rnd), ugi));
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), rndString(rnd), RequestMetaInfo.NO_NAMESPACE_ID,
                rndPInt(rnd), ugi));
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), rndString(rnd), rndPInt(rnd),
                RequestMetaInfo.NO_APPLICATION_ID, ugi));
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), rndString(rnd), rndPInt(rnd), rndPInt(rnd), null));

        verifyStruct(new RequestMetaInfo(rndPInt(rnd), null, RequestMetaInfo.NO_NAMESPACE_ID, rnd.nextInt(), ugi));
        verifyStruct(new RequestMetaInfo(RequestMetaInfo.NO_CLUSTER_ID, null, rnd.nextInt(), rnd.nextInt(), null));
        verifyStruct(new RequestMetaInfo(rndPInt(rnd), rndString(rnd), RequestMetaInfo.NO_NAMESPACE_ID,
                RequestMetaInfo.NO_APPLICATION_ID, null));
        verifyStruct(new RequestMetaInfo(RequestMetaInfo.NO_CLUSTER_ID, rndString(rnd), rnd.nextInt(),
                RequestMetaInfo.NO_APPLICATION_ID, null));

        verifyStruct(new RequestMetaInfo(RequestMetaInfo.NO_CLUSTER_ID, null, RequestMetaInfo.NO_NAMESPACE_ID,
                RequestMetaInfo.NO_APPLICATION_ID, null));
    }

    @Test
    public void testGetBlockLocationRequest() throws Exception {
        verifyStruct(new GetBlockLocationsRequest(metaInfo, rndString(rnd), rndPInt(rnd), rnd.nextLong()));
    }

    @Test
    public void testOpenRequest() throws Exception {
        verifyStruct(new OpenRequest(metaInfo, rndString(rnd), rndPInt(rnd), rnd.nextLong()));
    }

    @Test
    public void testCreateRequest() throws Exception {
        verifyStruct(new CreateRequest(metaInfo, rndString(rnd), rndString(rnd), rndFsPermission(rnd),
                rnd.nextBoolean(), rnd.nextBoolean(), (short) rnd.nextInt(5), rnd.nextLong()));
    }

    @Test
    public void testAppendRequest() throws Exception {
        verifyStruct(new AppendRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testRecoverLease() throws Exception {
        verifyStruct(new RecoverLeaseRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testCloseRecoverLease() throws Exception {
        verifyStruct(new CloseRecoverLeaseRequest(metaInfo, rndString(rnd), rndString(rnd), rnd.nextBoolean()));
    }

    @Test
    public void testSetReplicationRequest() throws Exception {
        verifyStruct(new SetReplicationRequest(metaInfo, rndString(rnd), (short) rnd.nextInt(5)));
    }

    @Test
    public void testSetPermissionRequest() throws Exception {
        verifyStruct(new SetPermissionRequest(metaInfo, rndString(rnd), new FsPermission((short) rnd.nextInt())));
    }

    @Test
    public void testSetOwnerRequest() throws Exception {
        verifyStruct(new SetOwnerRequest(metaInfo, rndString(rnd), rndString(rnd), "group" + rnd.nextInt()));
    }

    @Test
    public void testAbandonBlockRequest() throws Exception {
        verifyStruct(new AbandonBlockRequest(metaInfo, rndString(rnd), rndString(rnd), rndBlock(rnd)));
    }

    @Test
    public void testAbandonFileRequest() throws Exception {
        verifyStruct(new AbandonFileRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testAddBlockRequest() throws Exception {
        verifyStruct(new AddBlockRequest(metaInfo, rndString(rnd), rndString(rnd),
                Arrays.asList(rndDatanodeInfoArr(rnd, 10)), Arrays.asList(rndDatanodeInfoArr(rnd, 10)),
                rnd.nextInt(), rndBlock(rnd)));
    }

    @Test
    public void testCompleteRequest() throws Exception {
        verifyStruct(new CompleteRequest(metaInfo, rndString(rnd), rndString(rnd), rnd.nextInt(), rndBlock(rnd)));
    }

    @Test
    public void testReportBadBlockRequest() throws Exception {
        verifyStruct(new ReportBadBlocksRequest(metaInfo, Arrays.asList(rndLocatedBlockArr(rnd, 100))));
    }

    @Test
    public void testHardLinkRequest() throws Exception {
        verifyStruct(new HardLinkRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testGetHardLinkedFilesRequest() throws Exception {
        verifyStruct(new GetHardLinkedFilesRequest(metaInfo, rndString(rnd)));
    }

    @Test
    public void testRenameRequest() throws Exception {
        verifyStruct(new RenameRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testConcatRequest() throws Exception {
        verifyStruct(new ConcatRequest(metaInfo, "trg1", Arrays.asList("src1", "src2", "src3"), rnd.nextBoolean()));
    }

    @Test
    public void testDeleteRequest() throws Exception {
        verifyStruct(new DeleteRequest(metaInfo, rndString(rnd), rnd.nextBoolean()));
    }

    @Test
    public void testMkdirsRequest() throws Exception {
        verifyStruct(new MkdirsRequest(metaInfo, rndString(rnd), rndFsPermission(rnd)));
    }

    @Test
    public void testIterativeGetOpenFilesRequest() throws Exception {
        verifyStruct(new IterativeGetOpenFilesRequest(metaInfo, rndString(rnd), rnd.nextInt(), rndString(rnd)));
    }

    @Test
    public void testGetPartialFileStatusRequest() throws Exception {
        verifyStruct(new GetPartialListingRequest(metaInfo, rndString(rnd), rndByteArr(rnd, rnd.nextInt(37))));
    }

    @Test
    public void testGetLocatedPartialFileStatusRequest() throws Exception {
        verifyStruct(
                new GetLocatedPartialListingRequest(metaInfo, rndString(rnd), rndByteArr(rnd, rnd.nextInt(37))));
    }

    @Test
    public void testRenewLeaseRequest() throws Exception {
        verifyStruct(new RenewLeaseRequest(metaInfo, rndString(rnd)));
    }

    @Test
    public void testGetStatsRequest() throws Exception {
        verifyStruct(new GetStatsRequest(metaInfo));
    }

    @Test
    public void testGetPreferredBlockSizeRequest() throws Exception {
        verifyStruct(new GetPreferredBlockSizeRequest(metaInfo, rndString(rnd)));
    }

    @Test
    public void testListCorruptFileBlocksRequest() throws Exception {
        verifyStruct(new ListCorruptFileBlocksRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testGetFileInfoRequest() throws Exception {
        verifyStruct(new GetFileInfoRequest(metaInfo, rndString(rnd)));
    }

    @Test
    public void testContentSummaryRequest() throws Exception {
        verifyStruct(new GetContentSummaryRequest(metaInfo, rndString(rnd)));
    }

    @Test
    public void testFSyncRequest() throws Exception {
        verifyStruct(new FSyncRequest(metaInfo, rndString(rnd), rndString(rnd)));
    }

    @Test
    public void testSetTimesRequest() throws Exception {
        verifyStruct(new SetTimesRequest(metaInfo, rndString(rnd), rnd.nextLong(), rnd.nextLong()));
    }

    @Test
    public void testUpdatePipelineRequest() throws Exception {
        verifyStruct(new UpdatePipelineRequest(metaInfo, rndString(rnd), rndBlock(rnd), rndBlock(rnd),
                Arrays.asList(rndDatanodeID(rnd), rndDatanodeID(rnd))));
    }

    @Test
    public void testGetDataTransferProtocolVersionRequest() throws Exception {
        verifyStruct(new GetDataTransferProtocolVersionRequest(metaInfo));
    }

    @Test
    public void testGetBlockInfoRequest() throws Exception {
        verifyStruct(new GetBlockInfoRequest(metaInfo, rnd.nextInt()));
    }

    @Test
    public void testRaidFileRequest() throws Exception {
        verifyStruct(new RaidFileRequest(metaInfo, rndString(rnd), rndString(rnd), (short) rnd.nextInt()));
    }

    @Test
    public void testPingRequest() throws Exception {
        verifyStruct(new PingRequest(metaInfo));
    }

    /** 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);
    }
}