/** * 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.server.datanode.extdataset; import org.apache.hadoop.hdfs.server.datanode.Replica; import org.apache.hadoop.hdfs.server.datanode.ReplicaInPipelineInterface; import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi; import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi; import org.junit.Test; /** * Tests the ability to create external FsDatasetSpi implementations. * * The purpose of this suite of tests is to ensure that it is possible to * construct subclasses of FsDatasetSpi outside the Hadoop tree * (specifically, outside of the org.apache.hadoop.hdfs.server.datanode * package). This consists of creating subclasses of the two key classes * (FsDatasetSpi and FsVolumeSpi) *and* instances or subclasses of any * classes/interfaces their methods need to produce. If methods are added * to or changed in any superclasses, or if constructors of other classes * are changed, this package will fail to compile. In fixing this * compilation error, any new class dependencies should receive the same * treatment. * * It is worth noting what these tests do *not* accomplish. Just as * important as being able to produce instances of the appropriate classes * is being able to access all necessary methods on those classes as well * as on any additional classes accepted as inputs to FsDatasetSpi's * methods. It wouldn't be correct to mandate all methods be public, as * that would defeat encapsulation. Moreover, there is no natural * mechanism that would prevent a manually-constructed list of methods * from becoming stale. Rather than creating tests with no clear means of * maintaining them, this problem is left unsolved for now. * * Lastly, though merely compiling this package should signal success, * explicit testInstantiate* unit tests are included below so as to have a * tangible means of referring to each case. */ public class TestExternalDataset { /** * Tests instantiating an FsDatasetSpi subclass. */ @Test public void testInstantiateDatasetImpl() throws Throwable { FsDatasetSpi<?> inst = new ExternalDatasetImpl(); } /** * Tests instantiating a Replica subclass. */ @Test public void testIntantiateExternalReplica() throws Throwable { Replica inst = new ExternalReplica(); } /** * Tests instantiating a ReplicaInPipelineInterface subclass. */ @Test public void testInstantiateReplicaInPipeline() throws Throwable { ReplicaInPipelineInterface inst = new ExternalReplicaInPipeline(); } /** * Tests instantiating an FsVolumeSpi subclass. */ @Test public void testInstantiateVolumeImpl() throws Throwable { FsVolumeSpi inst = new ExternalVolumeImpl(); } }