package com.vladmihalcea.flexypool.metric.codahale; import com.vladmihalcea.flexypool.adaptor.PoolAdapter; import com.vladmihalcea.flexypool.adaptor.PoolAdapterFactory; import com.vladmihalcea.flexypool.common.ConfigurationProperties; import com.vladmihalcea.flexypool.config.Configuration; import com.vladmihalcea.flexypool.metric.MetricsFactory; import com.vladmihalcea.flexypool.util.ClassLoaderUtils; import org.junit.Test; import org.mockito.Mockito; import javax.sql.DataSource; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; /** * CodahaleMetricsFactoryServiceTest - CodahaleMetricsFactoryService Test * * @author Vlad Mihalcea */ public class CodahaleMetricsFactoryServiceTest { @Test public void testLoadSuccess() { MetricsFactory metricsFactory = new CodahaleMetricsFactoryService().load(); assertNotNull(metricsFactory); assertSame(CodahaleMetrics.FACTORY, metricsFactory); } @Test public void testLoadFailure() { ClassLoader currentClassLoader = ClassLoaderUtils.getClassLoader(); try { Thread.currentThread().setContextClassLoader(new ClassLoader() { @Override protected Class loadClass(String class_name, boolean resolve) throws ClassNotFoundException { if(class_name.equals("com.codahale.metrics.Metric")) { return null; } return super.loadClass(class_name, resolve); } }); MetricsFactory metricsFactory = new CodahaleMetricsFactoryService().load(); assertNull(metricsFactory); } finally { Thread.currentThread().setContextClassLoader(currentClassLoader); } } @Test public void testExistingCodahaleMetricsFactory() { DataSource dataSource = Mockito.mock(DataSource.class); PoolAdapterFactory<DataSource> poolAdapterFactory = Mockito.mock(PoolAdapterFactory.class); PoolAdapter poolAdapter = Mockito.mock(PoolAdapter.class); when(poolAdapterFactory.newInstance(any(ConfigurationProperties.class))).thenReturn(poolAdapter); ReservoirFactory reservoirFactory = Mockito.mock(ReservoirFactory.class); Configuration<DataSource> configuration = new Configuration.Builder<DataSource>( "unique", dataSource, poolAdapterFactory) .setMetricsFactory(new CodahaleMetrics.ReservoirMetricsFactory(reservoirFactory)) .build(); assertEquals(CodahaleHistogram.class, configuration.getMetrics().histogram("test").getClass()); } }