From b882f2f2d9ffa6cf9a957d8ec01d65c6ebe8cb21 Mon Sep 17 00:00:00 2001 From: pingsutw Date: Tue, 20 Aug 2019 20:54:21 +0800 Subject: [PATCH 1/2] HDDS-165. Add unit test for OzoneHddsDatanodeService --- hadoop-ozone/objectstore-service/pom.xml | 25 ++++ .../ozone/web/OzoneHddsDatanodeService.java | 25 ++-- .../web/TestOzoneHddsDatanodeService.java | 117 ++++++++++++++++++ 3 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java diff --git a/hadoop-ozone/objectstore-service/pom.xml b/hadoop-ozone/objectstore-service/pom.xml index 47d7e3782a8a9..feb816055ea9d 100644 --- a/hadoop-ozone/objectstore-service/pom.xml +++ b/hadoop-ozone/objectstore-service/pom.xml @@ -46,6 +46,31 @@ https://maven.apache.org/xsd/maven-4.0.0.xsd"> provided + + org.apache.hadoop + hadoop-common + test + test-jar + + + + com.sun.xml.bind + jaxb-impl + test + + + + com.sun.xml.bind + jaxb-core + test + + + + javax.xml.bind + jaxb-api + test + + org.apache.hadoop hadoop-hdfs diff --git a/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java b/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java index 621b659711e40..6907732d3680e 100644 --- a/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java +++ b/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java @@ -19,17 +19,18 @@ import java.io.IOException; +import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdfs.server.datanode.ObjectStoreHandler; import org.apache.hadoop.ozone.HddsDatanodeService; import org.apache.hadoop.ozone.web.netty.ObjectStoreRestHttpServer; - -import org.apache.commons.io.IOUtils; import org.apache.hadoop.util.ServicePlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.annotations.VisibleForTesting; + /** * DataNode service plugin implementation to start ObjectStore rest server. */ @@ -49,12 +50,12 @@ public void start(Object service) { HddsDatanodeService hddsDatanodeService = (HddsDatanodeService) service; conf = hddsDatanodeService.getConf(); handler = new ObjectStoreHandler(conf); - objectStoreRestHttpServer = new ObjectStoreRestHttpServer( - conf, null, handler); + objectStoreRestHttpServer = + new ObjectStoreRestHttpServer(conf, null, handler); objectStoreRestHttpServer.start(); - DatanodeDetails.Port restPort = DatanodeDetails.newPort( - DatanodeDetails.Port.Name.REST, - objectStoreRestHttpServer.getHttpAddress().getPort()); + DatanodeDetails.Port restPort = + DatanodeDetails.newPort(DatanodeDetails.Port.Name.REST, + objectStoreRestHttpServer.getHttpAddress().getPort()); hddsDatanodeService.getDatanodeDetails().setPort(restPort); } catch (IOException e) { @@ -68,7 +69,6 @@ public void start(Object service) { } } - @Override public void stop() { try { @@ -86,4 +86,13 @@ public void close() { IOUtils.closeQuietly(handler); } + @VisibleForTesting + public ObjectStoreHandler getHandler() { + return handler; + } + + @VisibleForTesting + public ObjectStoreRestHttpServer getObjectStoreRestHttpServer() { + return objectStoreRestHttpServer; + } } diff --git a/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java b/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java new file mode 100644 index 0000000000000..2452ff6c80267 --- /dev/null +++ b/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java @@ -0,0 +1,117 @@ +/** + * 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.ozone.web; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import org.apache.hadoop.fs.FileUtil; +import org.apache.hadoop.hdds.HddsConfigKeys; +import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.hdds.protocol.DatanodeDetails; +import org.apache.hadoop.hdds.scm.ScmConfigKeys; +import org.apache.hadoop.hdfs.DFSConfigKeys; +import org.apache.hadoop.ozone.HddsDatanodeService; +import org.apache.hadoop.ozone.OzoneConfigKeys; +import org.apache.hadoop.test.GenericTestUtils; +import org.apache.hadoop.util.ServicePlugin; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +/** + * Test class for {@link OzoneHddsDatanodeService}. + */ +public class TestOzoneHddsDatanodeService { + private File testDir; + private OzoneConfiguration conf; + + @Before + public void setUp() { + testDir = GenericTestUtils.getRandomizedTestDir(); + String volumeDir = testDir + "/disk1"; + + conf = new OzoneConfiguration(); + conf.set(ScmConfigKeys.OZONE_SCM_NAMES, "localhost"); + conf.setBoolean(OzoneConfigKeys.OZONE_ENABLED, true); + conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, testDir.getPath()); + conf.set(DFSConfigKeys.DFS_DATANODE_DATA_DIR_KEY, volumeDir); + } + + @After + public void tearDown() { + FileUtil.fullyDelete(testDir); + } + + @Test + public void testStartup() throws IOException { + OzoneHddsDatanodeService ozoneHddsService = new OzoneHddsDatanodeService(); + String[] args = new String[] {}; + HddsDatanodeService hddsServiceSpy = + Mockito.spy(HddsDatanodeService.createHddsDatanodeService(args)); + hddsServiceSpy.setConfiguration(conf); + + DatanodeDetails.Builder builder = DatanodeDetails.newBuilder(); + builder.setUuid(UUID.randomUUID().toString()); + DatanodeDetails datanodeDetails = builder.build(); + Mockito.doReturn(datanodeDetails).when(hddsServiceSpy).getDatanodeDetails(); + + ozoneHddsService.start(hddsServiceSpy); + + assertNotNull(ozoneHddsService.getHandler()); + assertNotNull(ozoneHddsService.getObjectStoreRestHttpServer()); + + ozoneHddsService.close(); + } + + @Test + public void testStartupFail() throws IOException { + OzoneHddsDatanodeService ozoneHddsService = new OzoneHddsDatanodeService(); + ServicePlugin mockService = new MockService(); + ozoneHddsService.start(mockService); + + assertNull(ozoneHddsService.getHandler()); + assertNull(ozoneHddsService.getObjectStoreRestHttpServer()); + + ozoneHddsService.close(); + } + + static class MockService implements ServicePlugin { + + @Override + public void close() throws IOException { + // Do nothing + } + + @Override + public void start(Object arg0) { + // Do nothing + } + + @Override + public void stop() { + // Do nothing + } + } +} From b2352a4a3d53193a42b44f6d55842e206926533f Mon Sep 17 00:00:00 2001 From: pingsutw Date: Tue, 20 Aug 2019 22:30:47 +0800 Subject: [PATCH 2/2] HDDS-165 Add unit test for OzoneHddsDatanodeService --- .../web/TestOzoneHddsDatanodeService.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java b/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java index 2452ff6c80267..8099835ddc091 100644 --- a/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java +++ b/hadoop-ozone/objectstore-service/src/test/java/org/apache/hadoop/ozone/web/TestOzoneHddsDatanodeService.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; import java.io.File; import java.io.IOException; @@ -34,12 +35,13 @@ import org.apache.hadoop.ozone.HddsDatanodeService; import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.test.GenericTestUtils; -import org.apache.hadoop.util.ServicePlugin; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import com.google.protobuf.Service; + /** * Test class for {@link OzoneHddsDatanodeService}. */ @@ -88,7 +90,7 @@ public void testStartup() throws IOException { @Test public void testStartupFail() throws IOException { OzoneHddsDatanodeService ozoneHddsService = new OzoneHddsDatanodeService(); - ServicePlugin mockService = new MockService(); + Service mockService = mock(Service.class); ozoneHddsService.start(mockService); assertNull(ozoneHddsService.getHandler()); @@ -96,22 +98,4 @@ public void testStartupFail() throws IOException { ozoneHddsService.close(); } - - static class MockService implements ServicePlugin { - - @Override - public void close() throws IOException { - // Do nothing - } - - @Override - public void start(Object arg0) { - // Do nothing - } - - @Override - public void stop() { - // Do nothing - } - } }