undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
|
|
@ -0,0 +1,260 @@
|
|||
/*
|
||||
* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6610094 7024172
|
||||
* @summary Basic unit test of ManagementFactory.getPlatformMXBean(s)
|
||||
* methods and PlatformManagedObject.getObjectName()
|
||||
* @author Mandy Chung
|
||||
*
|
||||
* @run main GetPlatformMXBeans
|
||||
*/
|
||||
|
||||
import java.lang.management.*;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import javax.management.*;
|
||||
|
||||
import static java.lang.management.ManagementFactory.*;
|
||||
|
||||
public class GetPlatformMXBeans {
|
||||
private static MBeanServer platformMBeanServer =
|
||||
getPlatformMBeanServer();
|
||||
public static void main(String[] argv) throws Exception {
|
||||
// singleton platform MXBean
|
||||
checkPlatformMXBean(getClassLoadingMXBean(),
|
||||
ClassLoadingMXBean.class,
|
||||
CLASS_LOADING_MXBEAN_NAME);
|
||||
checkPlatformMXBean(getCompilationMXBean(),
|
||||
CompilationMXBean.class,
|
||||
COMPILATION_MXBEAN_NAME);
|
||||
checkPlatformMXBean(getMemoryMXBean(),
|
||||
MemoryMXBean.class,
|
||||
MEMORY_MXBEAN_NAME);
|
||||
checkPlatformMXBean(getOperatingSystemMXBean(),
|
||||
OperatingSystemMXBean.class,
|
||||
OPERATING_SYSTEM_MXBEAN_NAME);
|
||||
checkPlatformMXBean(getRuntimeMXBean(),
|
||||
RuntimeMXBean.class,
|
||||
RUNTIME_MXBEAN_NAME);
|
||||
checkPlatformMXBean(getThreadMXBean(),
|
||||
ThreadMXBean.class,
|
||||
THREAD_MXBEAN_NAME);
|
||||
|
||||
// the following MXBean can have more than one instances
|
||||
checkGarbageCollectorMXBeans(getGarbageCollectorMXBeans());
|
||||
checkMemoryManagerMXBeans(getMemoryManagerMXBeans());
|
||||
checkMemoryPoolMXBeans(getMemoryPoolMXBeans());
|
||||
|
||||
// check invalid platform MXBean
|
||||
checkInvalidPlatformMXBean();
|
||||
}
|
||||
|
||||
private static <T extends PlatformManagedObject>
|
||||
void checkPlatformMXBean(T obj, Class<T> mxbeanInterface,
|
||||
String mxbeanName)
|
||||
throws Exception
|
||||
{
|
||||
// getPlatformMXBean may return null if the mxbean is not implemented
|
||||
PlatformManagedObject mxbean = getPlatformMXBean(mxbeanInterface);
|
||||
if (obj != mxbean) {
|
||||
throw new RuntimeException("Singleton MXBean returned not matched");
|
||||
}
|
||||
|
||||
int numElements = obj == null ? 0 : 1;
|
||||
List<? extends PlatformManagedObject> mxbeans =
|
||||
getPlatformMXBeans(mxbeanInterface);
|
||||
if (mxbeans.size() != numElements) {
|
||||
throw new RuntimeException("Unmatched number of platform MXBeans "
|
||||
+ mxbeans.size() + ". Expected = " + numElements);
|
||||
}
|
||||
|
||||
if (obj != null) {
|
||||
if (obj != mxbeans.get(0)) {
|
||||
throw new RuntimeException("The list returned by getPlatformMXBeans"
|
||||
+ " not matched");
|
||||
}
|
||||
ObjectName on = new ObjectName(mxbeanName);
|
||||
if (!on.equals(mxbean.getObjectName())) {
|
||||
throw new RuntimeException("Unmatched ObjectName " +
|
||||
mxbean.getObjectName() + " Expected = " + on);
|
||||
}
|
||||
checkRemotePlatformMXBean(obj, platformMBeanServer,
|
||||
mxbeanInterface, mxbeanName);
|
||||
}
|
||||
}
|
||||
|
||||
// verify platform MXBeans in the platform MBeanServer
|
||||
private static <T extends PlatformManagedObject>
|
||||
void checkRemotePlatformMXBean(T obj,
|
||||
MBeanServerConnection mbs,
|
||||
Class<T> mxbeanInterface,
|
||||
String mxbeanName)
|
||||
throws Exception
|
||||
{
|
||||
PlatformManagedObject mxbean = getPlatformMXBean(mbs, mxbeanInterface);
|
||||
if ((obj == null && mxbean != null) || (obj != null && mxbean == null)) {
|
||||
throw new RuntimeException("Singleton MXBean returned not matched");
|
||||
}
|
||||
|
||||
int numElements = obj == null ? 0 : 1;
|
||||
List<? extends PlatformManagedObject> mxbeans =
|
||||
getPlatformMXBeans(mbs, mxbeanInterface);
|
||||
if (mxbeans.size() != numElements) {
|
||||
throw new RuntimeException("Unmatched number of platform MXBeans "
|
||||
+ mxbeans.size() + ". Expected = " + numElements);
|
||||
}
|
||||
|
||||
ObjectName on = new ObjectName(mxbeanName);
|
||||
if (!on.equals(mxbean.getObjectName())) {
|
||||
throw new RuntimeException("Unmatched ObjectName " +
|
||||
mxbean.getObjectName() + " Expected = " + on);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkMemoryManagerMXBeans(List<MemoryManagerMXBean> objs)
|
||||
throws Exception
|
||||
{
|
||||
checkPlatformMXBeans(objs, MemoryManagerMXBean.class);
|
||||
for (MemoryManagerMXBean mxbean : objs) {
|
||||
String domainAndType;
|
||||
if (mxbean instanceof GarbageCollectorMXBean) {
|
||||
domainAndType = GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE;
|
||||
} else {
|
||||
domainAndType = MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE;
|
||||
}
|
||||
ObjectName on = new ObjectName(domainAndType +
|
||||
",name=" + mxbean.getName());
|
||||
if (!on.equals(mxbean.getObjectName())) {
|
||||
throw new RuntimeException("Unmatched ObjectName " +
|
||||
mxbean.getObjectName() + " Expected = " + on);
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void checkMemoryPoolMXBeans(List<MemoryPoolMXBean> objs)
|
||||
throws Exception
|
||||
{
|
||||
checkPlatformMXBeans(objs, MemoryPoolMXBean.class);
|
||||
for (MemoryPoolMXBean mxbean : objs) {
|
||||
ObjectName on = new ObjectName(MEMORY_POOL_MXBEAN_DOMAIN_TYPE +
|
||||
",name=" + mxbean.getName());
|
||||
if (!on.equals(mxbean.getObjectName())) {
|
||||
throw new RuntimeException("Unmatched ObjectName " +
|
||||
mxbean.getObjectName() + " Expected = " + on);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkGarbageCollectorMXBeans(List<GarbageCollectorMXBean> objs)
|
||||
throws Exception
|
||||
{
|
||||
checkPlatformMXBeans(objs, GarbageCollectorMXBean.class);
|
||||
for (GarbageCollectorMXBean mxbean : objs) {
|
||||
ObjectName on = new ObjectName(GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE +
|
||||
",name=" + mxbean.getName());
|
||||
if (!on.equals(mxbean.getObjectName())) {
|
||||
throw new RuntimeException("Unmatched ObjectName " +
|
||||
mxbean.getObjectName() + " Expected = " + on);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static <T extends PlatformManagedObject>
|
||||
void checkPlatformMXBeans(List<T> objs, Class<T> mxbeanInterface)
|
||||
throws Exception
|
||||
{
|
||||
try {
|
||||
getPlatformMXBean(mxbeanInterface);
|
||||
// mxbeanInterface is not a singleton
|
||||
throw new RuntimeException(mxbeanInterface + ": not a singleton MXBean");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expect IAE
|
||||
}
|
||||
|
||||
// verify local list of platform MXBeans
|
||||
List<? extends PlatformManagedObject> mxbeans =
|
||||
getPlatformMXBeans(mxbeanInterface);
|
||||
if (objs.size() != mxbeans.size()) {
|
||||
throw new RuntimeException("Unmatched number of platform MXBeans "
|
||||
+ mxbeans.size() + ". Expected = " + objs.size());
|
||||
}
|
||||
List<T> list = new ArrayList<T>(objs);
|
||||
for (PlatformManagedObject pmo : mxbeans) {
|
||||
if (list.contains(pmo)) {
|
||||
list.remove(pmo);
|
||||
} else {
|
||||
throw new RuntimeException(pmo +
|
||||
" not in the platform MXBean list");
|
||||
}
|
||||
}
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
throw new RuntimeException("The list returned by getPlatformMXBeans"
|
||||
+ " not matched");
|
||||
}
|
||||
|
||||
// verify platform MXBeans in the platform MBeanServer
|
||||
mxbeans = getPlatformMXBeans(platformMBeanServer, mxbeanInterface);
|
||||
if (objs.size() != mxbeans.size()) {
|
||||
throw new RuntimeException("Unmatched number of platform MXBeans "
|
||||
+ mxbeans.size() + ". Expected = " + objs.size());
|
||||
}
|
||||
}
|
||||
|
||||
interface FakeMXBean extends PlatformManagedObject {};
|
||||
|
||||
private static void checkInvalidPlatformMXBean() throws IOException {
|
||||
try {
|
||||
getPlatformMXBean(FakeMXBean.class);
|
||||
// mxbeanInterface is not a singleton
|
||||
throw new RuntimeException("Expect IllegalArgumentException but not thrown");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expect IAE
|
||||
}
|
||||
|
||||
try {
|
||||
getPlatformMXBeans(FakeMXBean.class);
|
||||
// mxbeanInterface is not a singleton
|
||||
throw new RuntimeException("Expect IllegalArgumentException but not thrown");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expect IAE
|
||||
}
|
||||
|
||||
try {
|
||||
getPlatformMXBean(platformMBeanServer, FakeMXBean.class);
|
||||
// mxbeanInterface is not a singleton
|
||||
throw new RuntimeException("Expect IllegalArgumentException but not thrown");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expect IAE
|
||||
}
|
||||
|
||||
try {
|
||||
getPlatformMXBeans(platformMBeanServer, FakeMXBean.class);
|
||||
// mxbeanInterface is not a singleton
|
||||
throw new RuntimeException("Expect IllegalArgumentException but not thrown");
|
||||
} catch (IllegalArgumentException e) {
|
||||
// expect IAE
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue