blob: 300ddd07454ebc68e7c616221d693973bc058e14 [file] [log] [blame]
/*
* Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.admin.amxtest.base;
import com.sun.appserv.management.base.AMX;
import com.sun.appserv.management.base.Util;
import com.sun.appserv.management.base.XTypes;
import com.sun.appserv.management.util.jmx.JMXUtil;
import com.sun.appserv.management.util.misc.CollectionUtil;
import com.sun.appserv.management.util.misc.GSetUtil;
import com.sun.appserv.management.util.misc.MapUtil;
import com.sun.appserv.management.util.misc.StringUtil;
import org.glassfish.admin.amxtest.AMXTestBase;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
*/
public final class GetSetAttributeTest
extends AMXTestBase {
public GetSetAttributeTest() {
}
private static final Set<String> SKIP_IDENTITY_SET_TEST =
Collections.unmodifiableSet(GSetUtil.newStringSet(
"DynamicReconfigurationEnabled"
));
private void
testGetSetAttributes(final AMX amx)
throws Exception {
final ObjectName objectName = Util.getObjectName(amx);
boolean skipIdentitySet = false;
if (amx.getJ2EEType().equals(XTypes.CONFIG_DOTTED_NAMES)) {
skipIdentitySet = true;
trace("GetSetAttributeTest.testGetSetAttributes: skipping identity set for " + objectName +
" because too many Attributes misbehave.");
}
final MBeanServerConnection conn = getMBeanServerConnection();
final MBeanInfo mbeanInfo = Util.getExtra(amx).getMBeanInfo();
final Map<String, MBeanAttributeInfo> attrInfos =
JMXUtil.attributeInfosToMap(mbeanInfo.getAttributes());
final String[] attrNames = GSetUtil.toStringArray(attrInfos.keySet());
// get all the Attributes
final AttributeList values = conn.getAttributes(objectName, attrNames);
final Map<String, Object> valuesMap = JMXUtil.attributeListToValueMap(values);
final Set<String> getFailed = new HashSet<String>();
final Map<String, Object> setFailed = new HashMap<String, Object>();
for (final MBeanAttributeInfo attrInfo : attrInfos.values()) {
final String name = attrInfo.getName();
if (!valuesMap.keySet().contains(name)) {
getFailed.add(name);
continue;
}
if (attrInfo.isReadable()) {
final Object value = valuesMap.get(name);
if (attrInfo.isWritable() && (!skipIdentitySet)) {
if (SKIP_IDENTITY_SET_TEST.contains(name)) {
trace("Skipping identity-set check for known problem attribute " +
StringUtil.quote(name) +
" of MBean " + JMXUtil.toString(objectName));
} else {
// set it to the same value as before
try {
final Attribute attr = new Attribute(name, value);
conn.setAttribute(objectName, attr);
}
catch (Exception e) {
setFailed.put(name, value);
warning("Could not set Attribute " + name + " of MBean " +
StringUtil.quote(objectName) +
" to the same value: " +
StringUtil.quote("" + value));
}
}
}
}
}
if (getFailed.size() != 0) {
warning("(SUMMARY) Could not get Attributes for " +
StringUtil.quote(objectName) + NEWLINE +
CollectionUtil.toString(getFailed, NEWLINE));
for (final String attrName : getFailed) {
try {
final Object value = conn.getAttribute(objectName, attrName);
warning("Retry of Attribute " +
attrName + " succeed with value " + value);
}
catch (Exception e) {
warning("Attribute " + attrName + " failed with " +
e.getClass() + ": " + e.getMessage());
}
}
}
if (setFailed.size() != 0) {
warning("(SUMMARY) Could not identity-set Attributes for " +
StringUtil.quote(objectName) + NEWLINE +
MapUtil.toString(setFailed, NEWLINE));
}
}
public void
testGetSetAttributes()
throws Exception {
final Set<AMX> all = getAllAMX();
for (final AMX amx : all) {
testGetSetAttributes(amx);
}
}
}