Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -354,14 +354,14 @@ public void updateConnectorAddress() {
int connIdx = 0;
if (policy.isHttpEnabled()) {
httpAddress = httpServer.getConnectorAddress(connIdx++);
String realAddress = NetUtils.getHostPortString(httpAddress);
String realAddress = NetUtils.getHostPortString(NetUtils.getConnectAddress(httpAddress));
conf.set(getHttpAddressKey(), realAddress);
LOG.info("HTTP server of {} listening at http://{}", name, realAddress);
}

if (policy.isHttpsEnabled()) {
httpsAddress = httpServer.getConnectorAddress(connIdx);
String realAddress = NetUtils.getHostPortString(httpsAddress);
String realAddress = NetUtils.getHostPortString(NetUtils.getConnectAddress(httpsAddress));
conf.set(getHttpsAddressKey(), realAddress);
LOG.info("HTTPS server of {} listening at https://{}", name, realAddress);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,46 @@

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.IOException;
import java.net.InetAddress;
import java.nio.file.Path;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.hadoop.hdds.conf.MutableConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.ozone.test.GenericTestUtils.PortAllocator;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;

/**
* Test Common ozone/hdds web methods.
*/
public class TestBaseHttpServer {
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestBaseHttpServer {

private static final String ADDRESS_HTTP_KEY = "address.http";
private static final String ADDRESS_HTTPS_KEY = "address.https";
private static final String BIND_HOST_HTTP_KEY = "bind-host.http";
private static final String BIND_HOST_HTTPS_KEY = "bind-host.https";
private static final String BIND_HOST_DEFAULT = "0.0.0.0";
private static final int BIND_PORT_HTTP_DEFAULT = PortAllocator.getFreePort();
private static final int BIND_PORT_HTTPS_DEFAULT = PortAllocator.getFreePort();
private static final String ENABLED_KEY = "enabled";

private String hostname;

@TempDir
private Path tempDir;

@BeforeAll
void setup() throws Exception {
hostname = InetAddress.getLocalHost().getHostName();
}

@Test
public void getBindAddress() throws Exception {
OzoneConfiguration conf = new OzoneConfiguration();
Expand Down Expand Up @@ -106,4 +139,99 @@ protected String getHttpAuthConfigPrefix() {
"default", 65).toString());
}

@ParameterizedTest
@EnumSource
void updatesAddressInConfig(HttpConfig.Policy policy) throws Exception {
MutableConfigurationSource conf = newConfig(policy);

BaseHttpServer subject = new TestingHttpServer(conf);

try {
subject.start();

if (policy.isHttpEnabled()) {
assertEquals(hostname + ":" + subject.getHttpAddress().getPort(), conf.get(ADDRESS_HTTP_KEY));
}
if (policy.isHttpsEnabled()) {
assertEquals(hostname + ":" + subject.getHttpsAddress().getPort(), conf.get(ADDRESS_HTTPS_KEY));
}
} finally {
subject.stop();
}
}

private MutableConfigurationSource newConfig(HttpConfig.Policy policy) {
MutableConfigurationSource conf = new OzoneConfiguration();
conf.set(OzoneConfigKeys.OZONE_HTTP_BASEDIR, tempDir.toString());
conf.setEnum(OzoneConfigKeys.OZONE_HTTP_POLICY_KEY, policy);
return conf;
}

private static class TestingHttpServer extends BaseHttpServer {

TestingHttpServer(MutableConfigurationSource conf) throws IOException {
super(conf, "testing");
}

@Override
protected String getHttpAddressKey() {
return ADDRESS_HTTP_KEY;
}

@Override
protected String getHttpsAddressKey() {
return ADDRESS_HTTPS_KEY;
}

@Override
protected String getHttpBindHostKey() {
return BIND_HOST_HTTP_KEY;
}

@Override
protected String getHttpsBindHostKey() {
return BIND_HOST_HTTPS_KEY;
}

@Override
protected String getBindHostDefault() {
return BIND_HOST_DEFAULT;
}

@Override
protected int getHttpBindPortDefault() {
return BIND_PORT_HTTP_DEFAULT;
}

@Override
protected int getHttpsBindPortDefault() {
return BIND_PORT_HTTPS_DEFAULT;
}

@Override
protected String getKeytabFile() {
throw new NotImplementedException();
}

@Override
protected String getSpnegoPrincipal() {
throw new NotImplementedException();
}

@Override
protected String getEnabledKey() {
return ENABLED_KEY;
}

@Override
protected String getHttpAuthType() {
throw new NotImplementedException();
}

@Override
protected String getHttpAuthConfigPrefix() {
throw new NotImplementedException();
}
}

}
15 changes: 15 additions & 0 deletions hadoop-hdds/framework/src/test/resources/webapps/testing/.gitkeep
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# 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.