|
|
@ -1,5 +1,5 @@
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Copyright 2012-2020 the original author or authors.
|
|
|
|
* Copyright 2012-2021 the original author or authors.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
@ -21,13 +21,16 @@ import java.util.function.Consumer;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.zaxxer.hikari.HikariConfigMXBean;
|
|
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
|
|
import org.apache.tomcat.jdbc.pool.DataSourceProxy;
|
|
|
|
import org.apache.tomcat.jdbc.pool.DataSourceProxy;
|
|
|
|
|
|
|
|
import org.apache.tomcat.jdbc.pool.PoolConfiguration;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.aop.framework.ProxyFactory;
|
|
|
|
import org.springframework.aop.framework.ProxyFactory;
|
|
|
|
import org.springframework.jdbc.datasource.DelegatingDataSource;
|
|
|
|
import org.springframework.jdbc.datasource.DelegatingDataSource;
|
|
|
|
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
|
|
|
|
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
|
|
|
|
|
|
|
|
import org.springframework.jdbc.datasource.SmartDataSource;
|
|
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
@ -44,52 +47,59 @@ class DataSourceUnwrapperTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithTarget() {
|
|
|
|
void unwrapWithTarget() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, HikariDataSource.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, HikariConfigMXBean.class, HikariDataSource.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithWrongTarget() {
|
|
|
|
void unwrapWithWrongTarget() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, SingleConnectionDataSource.class)).isNull();
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, SmartDataSource.class, SingleConnectionDataSource.class))
|
|
|
|
|
|
|
|
.isNull();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithDelegate() {
|
|
|
|
void unwrapWithDelegate() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource actual = wrapInDelegate(wrapInDelegate(dataSource));
|
|
|
|
DataSource actual = wrapInDelegate(wrapInDelegate(dataSource));
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariDataSource.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariConfigMXBean.class, HikariDataSource.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithProxy() {
|
|
|
|
void unwrapWithProxy() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource actual = wrapInProxy(wrapInProxy(dataSource));
|
|
|
|
DataSource actual = wrapInProxy(wrapInProxy(dataSource));
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariDataSource.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariConfigMXBean.class, HikariDataSource.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithProxyAndDelegate() {
|
|
|
|
void unwrapWithProxyAndDelegate() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource actual = wrapInProxy(wrapInDelegate(dataSource));
|
|
|
|
DataSource actual = wrapInProxy(wrapInDelegate(dataSource));
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariDataSource.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariConfigMXBean.class, HikariDataSource.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapWithSeveralLevelOfWrapping() {
|
|
|
|
void unwrapWithSeveralLevelOfWrapping() {
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource dataSource = new HikariDataSource();
|
|
|
|
DataSource actual = wrapInProxy(wrapInDelegate(wrapInDelegate(wrapInProxy(wrapInDelegate(dataSource)))));
|
|
|
|
DataSource actual = wrapInProxy(wrapInDelegate(wrapInDelegate(wrapInProxy(wrapInDelegate(dataSource)))));
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariDataSource.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, HikariConfigMXBean.class, HikariDataSource.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrapDataSourceProxy() {
|
|
|
|
void unwrapDataSourceProxy() {
|
|
|
|
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
|
|
|
|
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
|
|
|
|
DataSource actual = wrapInDelegate(wrapInProxy(dataSource));
|
|
|
|
DataSource actual = wrapInDelegate(wrapInProxy(dataSource));
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, DataSourceProxy.class)).isSameAs(dataSource);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(actual, PoolConfiguration.class, DataSourceProxy.class))
|
|
|
|
|
|
|
|
.isSameAs(dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void unwrappingIsNotAttemptedWhenTargetIsNotAnInterface() throws SQLException {
|
|
|
|
void unwrappingIsNotAttemptedWhenTargetIsNotAnInterface() {
|
|
|
|
DataSource dataSource = mock(DataSource.class);
|
|
|
|
DataSource dataSource = mock(DataSource.class);
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, HikariDataSource.class)).isNull();
|
|
|
|
assertThat(DataSourceUnwrapper.unwrap(dataSource, HikariDataSource.class)).isNull();
|
|
|
|
verifyNoMoreInteractions(dataSource);
|
|
|
|
verifyNoMoreInteractions(dataSource);
|
|
|
|