Commit 0d5f09a9fa2dda522cba5503fcdc856bc729d78e

Authored by Igor Kulikov
1 parent 4c746810

Diagnostic output

@@ -15,11 +15,21 @@ @@ -15,11 +15,21 @@
15 */ 15 */
16 package org.thingsboard.server.system; 16 package org.thingsboard.server.system;
17 17
  18 +import net.bytebuddy.asm.AsmVisitorWrapper;
  19 +import net.bytebuddy.asm.MemberSubstitution;
  20 +import net.bytebuddy.matcher.ElementMatchers;
  21 +import org.apache.cassandra.cql3.functions.ThreadAwareSecurityManager;
  22 +import org.hibernate.HibernateException;
  23 +import org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState;
  24 +import org.hibernate.bytecode.internal.bytebuddy.HibernateMethodLookupDispatcher;
18 import org.junit.ClassRule; 25 import org.junit.ClassRule;
19 import org.junit.extensions.cpsuite.ClasspathSuite; 26 import org.junit.extensions.cpsuite.ClasspathSuite;
20 import org.junit.runner.RunWith; 27 import org.junit.runner.RunWith;
21 import org.thingsboard.server.dao.CustomSqlUnit; 28 import org.thingsboard.server.dao.CustomSqlUnit;
22 29
  30 +import java.lang.reflect.Method;
  31 +import java.security.AccessController;
  32 +import java.security.PrivilegedAction;
23 import java.util.Arrays; 33 import java.util.Arrays;
24 34
25 /** 35 /**
@@ -30,11 +40,74 @@ import java.util.Arrays; @@ -30,11 +40,74 @@ import java.util.Arrays;
30 public class SystemSqlTestSuite { 40 public class SystemSqlTestSuite {
31 41
32 static { 42 static {
  43 + //ThreadAwareSecurityManager.install();
33 SecurityManager appsm = System.getSecurityManager(); 44 SecurityManager appsm = System.getSecurityManager();
34 System.out.println("SECURITY MANAGER = " + appsm); 45 System.out.println("SECURITY MANAGER = " + appsm);
35 if (appsm != null) { 46 if (appsm != null) {
36 System.out.println("SECURITY MANAGER CLASS = " + appsm.getClass()); 47 System.out.println("SECURITY MANAGER CLASS = " + appsm.getClass());
37 } 48 }
  49 +
  50 + AsmVisitorWrapper.ForDeclaredMethods getDeclaredMethodMemberSubstitution;
  51 + AsmVisitorWrapper.ForDeclaredMethods getMethodMemberSubstitution;
  52 +
  53 + //if ( System.getSecurityManager() != null ) {
  54 + getDeclaredMethodMemberSubstitution = getDeclaredMethodMemberSubstitution();
  55 + getMethodMemberSubstitution = getMethodMemberSubstitution();
  56 + //}
  57 + //else {
  58 + // getDeclaredMethodMemberSubstitution = null;
  59 + // getMethodMemberSubstitution = null;
  60 + //}
  61 +
  62 + System.out.println("getDeclaredMethodMemberSubstitution = " + getDeclaredMethodMemberSubstitution);
  63 + System.out.println("getMethodMemberSubstitution = " + getMethodMemberSubstitution);
  64 + }
  65 +
  66 + private static class GetDeclaredMethodAction implements PrivilegedAction<Method> {
  67 + private final Class<?> clazz;
  68 + private final String methodName;
  69 + private final Class<?>[] parameterTypes;
  70 +
  71 + private GetDeclaredMethodAction(Class<?> clazz, String methodName, Class<?>... parameterTypes) {
  72 + this.clazz = clazz;
  73 + this.methodName = methodName;
  74 + this.parameterTypes = parameterTypes;
  75 + }
  76 +
  77 + @Override
  78 + public Method run() {
  79 + try {
  80 + Method method = clazz.getDeclaredMethod( methodName, parameterTypes );
  81 +
  82 + return method;
  83 + }
  84 + catch (NoSuchMethodException e) {
  85 + throw new HibernateException( "Unable to prepare getDeclaredMethod()/getMethod() substitution", e );
  86 + }
  87 + }
  88 + }
  89 +
  90 +
  91 + private static AsmVisitorWrapper.ForDeclaredMethods getDeclaredMethodMemberSubstitution() {
  92 + // this should only be called if the security manager is enabled, thus the privileged calls
  93 + return MemberSubstitution.relaxed()
  94 + .method( ElementMatchers.is( AccessController.doPrivileged( new SystemSqlTestSuite.GetDeclaredMethodAction( Class.class,
  95 + "getDeclaredMethod", String.class, Class[].class ) ) ) )
  96 + .replaceWith(
  97 + AccessController.doPrivileged( new SystemSqlTestSuite.GetDeclaredMethodAction( HibernateMethodLookupDispatcher.class,
  98 + "getDeclaredMethod", Class.class, String.class, Class[].class ) ) )
  99 + .on( ElementMatchers.isTypeInitializer() );
  100 + }
  101 +
  102 + private static AsmVisitorWrapper.ForDeclaredMethods getMethodMemberSubstitution() {
  103 + // this should only be called if the security manager is enabled, thus the privileged calls
  104 + return MemberSubstitution.relaxed()
  105 + .method( ElementMatchers.is( AccessController.doPrivileged( new SystemSqlTestSuite.GetDeclaredMethodAction( Class.class,
  106 + "getMethod", String.class, Class[].class ) ) ) )
  107 + .replaceWith(
  108 + AccessController.doPrivileged( new SystemSqlTestSuite.GetDeclaredMethodAction( HibernateMethodLookupDispatcher.class,
  109 + "getMethod", Class.class, String.class, Class[].class ) ) )
  110 + .on( ElementMatchers.isTypeInitializer() );
38 } 111 }
39 112
40 @ClassRule 113 @ClassRule