blob: 82a6951413f95f8fc57720a7c22dc3e069cf8fca [file] [log] [blame]
/**
* 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();
}
}