Search in sources :

Example 1 with HttpServer

use of org.apache.hadoop.hbase.http.HttpServer in project hbase by apache.

the class TestLogLevel method testDynamicLogLevel.

@Test(timeout = 60000)
@SuppressWarnings("deprecation")
public void testDynamicLogLevel() throws Exception {
    String logName = TestLogLevel.class.getName();
    Log testlog = LogFactory.getLog(logName);
    //only test Log4JLogger
    if (testlog instanceof Log4JLogger) {
        Logger log = ((Log4JLogger) testlog).getLogger();
        log.debug("log.debug1");
        log.info("log.info1");
        log.error("log.error1");
        assertTrue(!Level.ERROR.equals(log.getEffectiveLevel()));
        HttpServer server = null;
        try {
            server = new HttpServer.Builder().setName("..").addEndpoint(new URI("http://localhost:0")).setFindPort(true).build();
            server.start();
            String authority = NetUtils.getHostPortString(server.getConnectorAddress(0));
            //servlet
            URL url = new URL("http://" + authority + "/logLevel?log=" + logName + "&level=" + Level.ERROR);
            out.println("*** Connecting to " + url);
            try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
                for (String line; (line = in.readLine()) != null; out.println(line)) ;
            }
            log.debug("log.debug2");
            log.info("log.info2");
            log.error("log.error2");
            assertTrue(Level.ERROR.equals(log.getEffectiveLevel()));
            //command line
            String[] args = { "-setlevel", authority, logName, Level.DEBUG.toString() };
            LogLevel.main(args);
            log.debug("log.debug3");
            log.info("log.info3");
            log.error("log.error3");
            assertTrue(Level.DEBUG.equals(log.getEffectiveLevel()));
        } finally {
            if (server != null) {
                server.stop();
            }
        }
    } else {
        out.println(testlog.getClass() + " not tested.");
    }
}
Also used : HttpServer(org.apache.hadoop.hbase.http.HttpServer) Test(org.junit.Test)

Example 2 with HttpServer

use of org.apache.hadoop.hbase.http.HttpServer in project hbase by apache.

the class TestLogLevel method createServer.

/**
 * Creates and starts a Jetty server binding at an ephemeral port to run LogLevel servlet.
 * @param protocol "http" or "https"
 * @param isSpnego true if SPNEGO is enabled
 * @return a created HttpServer object
 * @throws Exception if unable to create or start a Jetty server
 */
private HttpServer createServer(String protocol, boolean isSpnego) throws Exception {
    HttpServer.Builder builder = new HttpServer.Builder().setName("..").addEndpoint(new URI(protocol + "://localhost:0")).setFindPort(true).setConf(serverConf);
    if (isSpnego) {
        // Set up server Kerberos credentials.
        // Since the server may fall back to simple authentication,
        // use ACL to make sure the connection is Kerberos/SPNEGO authenticated.
        builder.setSecurityEnabled(true).setUsernameConfKey(PRINCIPAL).setKeytabConfKey(KEYTAB).setACL(new AccessControlList("client"));
    }
    // if using HTTPS, configure keystore/truststore properties.
    if (protocol.equals(LogLevel.PROTOCOL_HTTPS)) {
        builder = builder.keyPassword(sslConf.get("ssl.server.keystore.keypassword")).keyStore(sslConf.get("ssl.server.keystore.location"), sslConf.get("ssl.server.keystore.password"), sslConf.get("ssl.server.keystore.type", "jks")).trustStore(sslConf.get("ssl.server.truststore.location"), sslConf.get("ssl.server.truststore.password"), sslConf.get("ssl.server.truststore.type", "jks"));
    }
    HttpServer server = builder.build();
    server.start();
    return server;
}
Also used : AccessControlList(org.apache.hadoop.security.authorize.AccessControlList) HttpServer(org.apache.hadoop.hbase.http.HttpServer) URI(java.net.URI)

Example 3 with HttpServer

use of org.apache.hadoop.hbase.http.HttpServer in project hbase by apache.

the class TestLogLevel method testDynamicLogLevel.

/**
 * Run both client and server using the given protocol.
 * @param bindProtocol specify either http or https for server
 * @param connectProtocol specify either http or https for client
 * @param isSpnego true if SPNEGO is enabled
 * @throws Exception if client can't accesss server.
 */
private void testDynamicLogLevel(final String bindProtocol, final String connectProtocol, final boolean isSpnego, final String loggerName, final String newLevel) throws Exception {
    if (!LogLevel.isValidProtocol(bindProtocol)) {
        throw new Exception("Invalid server protocol " + bindProtocol);
    }
    if (!LogLevel.isValidProtocol(connectProtocol)) {
        throw new Exception("Invalid client protocol " + connectProtocol);
    }
    org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(loggerName);
    org.apache.logging.log4j.Level oldLevel = log.getLevel();
    assertNotEquals("Get default Log Level which shouldn't be ERROR.", org.apache.logging.log4j.Level.ERROR, oldLevel);
    // configs needed for SPNEGO at server side
    if (isSpnego) {
        serverConf.set(PRINCIPAL, HTTP_PRINCIPAL);
        serverConf.set(KEYTAB, keyTabFile.getAbsolutePath());
        serverConf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, "kerberos");
        serverConf.setBoolean(CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, true);
        UserGroupInformation.setConfiguration(serverConf);
    } else {
        serverConf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, "simple");
        serverConf.setBoolean(CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false);
        UserGroupInformation.setConfiguration(serverConf);
    }
    final HttpServer server = createServer(bindProtocol, isSpnego);
    // get server port
    final String authority = NetUtils.getHostPortString(server.getConnectorAddress(0));
    String keytabFilePath = keyTabFile.getAbsolutePath();
    UserGroupInformation clientUGI = UserGroupInformation.loginUserFromKeytabAndReturnUGI(clientPrincipal, keytabFilePath);
    try {
        clientUGI.doAs((PrivilegedExceptionAction<Void>) () -> {
            // client command line
            getLevel(connectProtocol, authority, loggerName);
            setLevel(connectProtocol, authority, loggerName, newLevel);
            return null;
        });
    } finally {
        clientUGI.logoutUserFromKeytab();
        server.stop();
    }
    // restore log level
    org.apache.logging.log4j.core.config.Configurator.setLevel(log.getName(), oldLevel);
}
Also used : HttpServer(org.apache.hadoop.hbase.http.HttpServer) BindException(java.net.BindException) SocketException(java.net.SocketException) HadoopIllegalArgumentException(org.apache.hadoop.HadoopIllegalArgumentException) IOException(java.io.IOException) SSLException(javax.net.ssl.SSLException) UserGroupInformation(org.apache.hadoop.security.UserGroupInformation)

Aggregations

HttpServer (org.apache.hadoop.hbase.http.HttpServer)3 IOException (java.io.IOException)1 BindException (java.net.BindException)1 SocketException (java.net.SocketException)1 URI (java.net.URI)1 SSLException (javax.net.ssl.SSLException)1 HadoopIllegalArgumentException (org.apache.hadoop.HadoopIllegalArgumentException)1 UserGroupInformation (org.apache.hadoop.security.UserGroupInformation)1 AccessControlList (org.apache.hadoop.security.authorize.AccessControlList)1 Test (org.junit.Test)1