stasis/je-7.5.11/test/com/sleepycat/je/jmx/JEDiagnosticsTest.java
2019-06-26 14:22:56 -04:00

260 lines
8.1 KiB
Java
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*-
* Copyright (C) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.jmx;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.lang.reflect.Method;
import java.util.logging.Handler;
import java.util.logging.Level;
import javax.management.Attribute;
import javax.management.DynamicMBean;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import org.junit.Test;
import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.dbi.EnvironmentImpl;
import com.sleepycat.je.util.TestUtils;
import com.sleepycat.util.test.SharedTestUtils;
import com.sleepycat.util.test.TestBase;
/**
* @excludeDualMode
*
* Instantiate and exercise the JEDiagnostics.
*/
public class JEDiagnosticsTest extends TestBase {
private static final boolean DEBUG = false;
private File envHome;
public JEDiagnosticsTest() {
envHome = SharedTestUtils.getTestDir();
}
/**
* Test JEDiagnostics' attribute getters.
*/
@Test
public void testGetters()
throws Throwable {
Environment env = null;
try {
if (!this.getClass().getName().contains("rep")) {
env = openEnv();
DynamicMBean mbean = createMBean(env);
MBeanTestUtils.validateGetters(mbean, 2, DEBUG);
env.close();
}
env = openEnv();
String environmentDir = env.getHome().getPath();
DynamicMBean mbean = createMBean(env);
MBeanTestUtils.validateGetters(mbean, 2, DEBUG);
env.close();
MBeanTestUtils.checkForNoOpenHandles(environmentDir);
} catch (Throwable t) {
t.printStackTrace();
if (env != null) {
env.close();
}
throw t;
}
}
/* Create a DynamicMBean using a standalone or replicated Environment. */
protected DynamicMBean createMBean(Environment env) {
return new JEDiagnostics(env);
}
/**
* Test JEDiagnostics' attribute setters.
*/
@Test
public void testSetters()
throws Throwable {
Environment env = null;
try {
env = openEnv();
String environmentDir = env.getHome().getPath();
DynamicMBean mbean = createMBean(env);
EnvironmentImpl envImpl = DbInternal.getNonNullEnvImpl(env);
Class envImplClass = envImpl.getClass();
/* Test setting ConsoleHandler's level. */
Method getConsoleHandler =
envImplClass.getMethod("getConsoleHandler", (Class[]) null);
checkAttribute(env,
mbean,
getConsoleHandler,
"consoleHandlerLevel",
"OFF");
/* Test setting FileHandler's level. */
Method getFileHandler =
envImplClass.getMethod("getFileHandler", (Class[]) null);
checkAttribute(env,
mbean,
getFileHandler,
"fileHandlerLevel",
"OFF");
env.close();
MBeanTestUtils.checkForNoOpenHandles(environmentDir);
} catch (Throwable t) {
t.printStackTrace();
if (env != null) {
env.close();
}
throw t;
}
}
/**
* Test JEDiagnostics' operations invocation.
*/
@Test
public void testOperations()
throws Throwable {
Environment env = null;
try {
env = openEnv();
String environmentDir = env.getHome().getPath();
DynamicMBean mbean = createMBean(env);
/*
* RepJEDiagnostics has three operations while JEDiagnostics is
* lack of getRepStats operation.
*/
validateOperations(mbean, env, 1);
env.close();
MBeanTestUtils.checkForNoOpenHandles(environmentDir);
} catch (Throwable t) {
t.printStackTrace();
if (env != null) {
env.close();
}
throw t;
}
}
/* Verify the correction of JEDiagnostics' operations. */
private void validateOperations(DynamicMBean mbean,
Environment env,
int numExpectedOperations)
throws Throwable {
MBeanTestUtils.checkOpNum(mbean, numExpectedOperations, DEBUG);
MBeanInfo info = mbean.getMBeanInfo();
MBeanOperationInfo[] ops = info.getOperations();
EnvironmentImpl envImpl = DbInternal.getNonNullEnvImpl(env);
for (int i = 0; i < ops.length; i++) {
String opName = ops[i].getName();
if (opName.equals("resetLoggerLevel")) {
/*
* If this method is invoked by RepJEDiagnostics, the logger
* name should contain RepImpl, not EnvironmentImpl.
*/
Object[] params = new Object[] {"EnvironmentImpl", "OFF"};
if (this.getClass().getName().contains("rep")) {
params = new Object[] {"RepImpl", "OFF"};
}
Object result = mbean.invoke
(opName, params,
new String[] {"java.lang.String", "java.lang.String"});
assertEquals(envImpl.getLogger().getLevel(), Level.OFF);
assertTrue(result == null);
} else {
/*
* Check the correction of the getRepStats operation that only
* in RepJEDiagnostics.
*/
if (this.getClass().getName().contains("rep")) {
Object result = mbean.invoke(opName, null, null);
assertTrue(result instanceof String);
MBeanTestUtils.checkObjectType
("Operation", opName, ops[i].getReturnType(), result);
}
}
}
}
/* Test this MBean's serialization. */
@Test
public void testSerializable()
throws Throwable {
Environment env = openEnv();
DynamicMBean mbean = createMBean(env);
MBeanTestUtils.doTestSerializable(mbean);
env.close();
}
/* Check this MBean's attributes. */
private void checkAttribute(Environment env,
DynamicMBean mbean,
Method getMethod,
String attributeName,
Object newValue)
throws Exception {
EnvironmentImpl envImpl = DbInternal.getNonNullEnvImpl(env);
Object result = getMethod.invoke(envImpl, (Object[]) null);
assertTrue(!result.toString().equals(newValue.toString()));
mbean.setAttribute(new Attribute(attributeName, newValue));
envImpl = DbInternal.getNonNullEnvImpl(env);
Handler handler = (Handler) getMethod.invoke(envImpl, (Object[]) null);
assertEquals(newValue.toString(), handler.getLevel().toString());
Object mbeanNewValue = mbean.getAttribute(attributeName);
assertEquals(newValue.toString(), mbeanNewValue.toString());
}
/*
* Helper to open an environment.
*/
protected Environment openEnv()
throws Exception {
EnvironmentConfig envConfig = TestUtils.initEnvConfig();
envConfig.setAllowCreate(true);
return new Environment(envHome, envConfig);
}
}