Test for javassist code generation.
parent
171ddd5523
commit
f8cc907f24
@ -0,0 +1,64 @@
|
|||||||
|
package com.zaxxer.hikari.pool;
|
||||||
|
|
||||||
|
import com.zaxxer.hikari.mocks.StubConnection;
|
||||||
|
import com.zaxxer.hikari.pool.TestElf.FauxWebClassLoader;
|
||||||
|
import com.zaxxer.hikari.util.JavassistProxyFactory;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class TestJavassistCodegen {
|
||||||
|
@Test
|
||||||
|
public void testCodegen() throws Exception {
|
||||||
|
String tmp = System.getProperty("java.io.tmpdir");
|
||||||
|
JavassistProxyFactory.main(tmp + (tmp.endsWith("/") ? "" : "/"));
|
||||||
|
|
||||||
|
Path base = Paths.get(tmp, "target/classes/com/zaxxer/hikari/pool".split("/"));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("HikariProxyConnection.class")));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("HikariProxyStatement.class")));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("HikariProxyCallableStatement.class")));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("HikariProxyPreparedStatement.class")));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("HikariProxyResultSet.class")));
|
||||||
|
Assert.assertTrue("", Files.isRegularFile(base.resolve("ProxyFactory.class")));
|
||||||
|
|
||||||
|
FauxWebClassLoader fauxClassLoader = new FauxWebClassLoader();
|
||||||
|
Class<?> proxyFactoryClass = fauxClassLoader.loadClass("com.zaxxer.hikari.pool.ProxyFactory");
|
||||||
|
|
||||||
|
Connection connection = new StubConnection();
|
||||||
|
|
||||||
|
Class<?> fastListClass = fauxClassLoader.loadClass("com.zaxxer.hikari.util.FastList");
|
||||||
|
Object fastList = fastListClass.getConstructor(Class.class).newInstance(Statement.class);
|
||||||
|
|
||||||
|
Object proxyConnection = getMethod(proxyFactoryClass, "getProxyConnection")
|
||||||
|
.invoke(null,
|
||||||
|
null /*poolEntry*/,
|
||||||
|
connection,
|
||||||
|
fastList,
|
||||||
|
null /*leakTask*/,
|
||||||
|
0L /*now*/,
|
||||||
|
Boolean.FALSE /*isReadOnly*/,
|
||||||
|
Boolean.FALSE /*isAutoCommit*/);
|
||||||
|
Assert.assertNotNull(proxyConnection);
|
||||||
|
|
||||||
|
Object proxyStatement = getMethod(proxyConnection.getClass(), "createStatement", 0)
|
||||||
|
.invoke(proxyConnection);
|
||||||
|
Assert.assertNotNull(proxyStatement);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Method getMethod(Class<?> clazz, String methodName, Integer... parameterCount)
|
||||||
|
{
|
||||||
|
return Stream.of(clazz.getDeclaredMethods())
|
||||||
|
.filter(method -> method.getName().equals(methodName))
|
||||||
|
.filter(method -> (parameterCount.length == 0 || parameterCount[0] == method.getParameterCount()))
|
||||||
|
.peek(method -> method.setAccessible(true))
|
||||||
|
.findFirst()
|
||||||
|
.orElseThrow(RuntimeException::new);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue