Package com.github.jknack.mwa.jpa

Source Code of com.github.jknack.mwa.jpa.DataSourcesTest

package com.github.jknack.mwa.jpa;

import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;

import java.io.File;
import java.sql.Driver;
import java.util.concurrent.TimeUnit;

import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;

import com.jolbox.bonecp.BoneCPDataSource;

/**
* Unit test for {@link DataSources}.
*
* @author edgar.espina
* @since 0.1
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({DataSources.class, EmbeddedDatabaseBuilder.class })
public class DataSourcesTest {

  @Test
  public void mem() throws Exception {
    Environment env = createMock(Environment.class);
    expect(env.getRequiredProperty("db")).andReturn("mem");

    EmbeddedDatabase datasource = createMock(EmbeddedDatabase.class);

    EmbeddedDatabaseBuilder embeddedDatabaseBuilder =
        PowerMock.createMockAndExpectNew(EmbeddedDatabaseBuilder.class);
    expect(embeddedDatabaseBuilder.setType(EmbeddedDatabaseType.H2)).andReturn(
        embeddedDatabaseBuilder);
    expect(embeddedDatabaseBuilder.build()).andReturn(datasource);

    PowerMock.replay(EmbeddedDatabaseBuilder.class);
    replay(env, embeddedDatabaseBuilder);

    DataSource result = DataSources.build(env);
    assertEquals(datasource, result);

    verify(env, embeddedDatabaseBuilder);
    PowerMock.verify(EmbeddedDatabaseBuilder.class);
  }

  @SuppressWarnings("unchecked")
  @Test
  public void fs() throws Exception {
    Environment env = createMock(Environment.class);
    expect(env.getRequiredProperty("db")).andReturn("fs");
    expect(env.getProperty("application.name", "testdb")).andReturn("fsdb");

    SimpleDriverDataSource dataSource =
        PowerMock.createMockAndExpectNew(SimpleDriverDataSource.class);
    dataSource.setDriverClass((Class<? extends Driver>) Class
        .forName("org.h2.Driver"));
    expectLastCall();
    String databaseUrl =
        String.format("jdbc:h2:%s" + File.separator + "fsdb",
            System.getProperty("java.io.tmpdir"));
    dataSource.setUrl(databaseUrl);
    expectLastCall();
    dataSource.setUsername("sa");
    expectLastCall();
    dataSource.setPassword("");
    expectLastCall();

    PowerMock.replay(SimpleDriverDataSource.class);
    replay(env, dataSource);

    DataSource result = DataSources.build(env);
    assertEquals(dataSource, result);

    verify(env, dataSource);
    PowerMock.verify(SimpleDriverDataSource.class);
  }

  @Test
  public void highPerformanceDS() throws Exception {
    String database = "jdbc:real:db";
    String dbDriver = "com.my.Driver";
    String dbUser = "user";
    String dbPass = "pass";

    Environment env = createMock(Environment.class);
    expect(env.getRequiredProperty("db")).andReturn(database);
    expect(env.getProperty(DataSources.DB_DRIVER, "com.mysql.jdbc.Driver"))
        .andReturn(dbDriver);
    expect(env.getRequiredProperty(DataSources.DB_USER))
        .andReturn(dbUser);
    expect(env.getRequiredProperty(DataSources.DB_PASSWORD))
        .andReturn(dbPass);
    expect(
        env.getProperty(DataSources.DB_IDDLE_CONNECTION_TEST_PERIOD,
            Integer.class, 14400))
        .andReturn(14400);
    expect(env.getProperty(DataSources.DB_IDDLE_MAX_AGE, Integer.class, 3600))
        .andReturn(3600);
    expect(
        env.getProperty(DataSources.DB_MAX_CONNECTIONS_PER_PARTITION,
            Integer.class, 30))
        .andReturn(30);
    expect(
        env.getProperty(DataSources.DB_MIN_CONNECTIONS_PER_PARTITION,
            Integer.class, 10))
        .andReturn(10);
    expect(
        env.getProperty(DataSources.DB_PARTITION_COUNT,
            Integer.class, 3))
        .andReturn(3);
    expect(
        env.getProperty(DataSources.DB_ACQUIRE_INCREMENT,
            Integer.class, 5))
        .andReturn(5);
    expect(
        env.getProperty(DataSources.DB_STATEMENTS_CACHE_SIZE,
            Integer.class, 20))
        .andReturn(20);

    BoneCPDataSource dataSource =
        PowerMock.createMockAndExpectNew(BoneCPDataSource.class);
    dataSource.setJdbcUrl(database);
    expectLastCall();
    dataSource.setDriverClass(dbDriver);
    expectLastCall();
    dataSource.setUsername(dbUser);
    expectLastCall();
    dataSource.setPassword(dbPass);
    expectLastCall();
    dataSource.setIdleConnectionTestPeriod(14400, TimeUnit.SECONDS);
    expectLastCall();
    dataSource.setIdleMaxAge(3600, TimeUnit.SECONDS);
    expectLastCall();
    dataSource.setMaxConnectionsPerPartition(30);
    expectLastCall();
    dataSource.setMinConnectionsPerPartition(10);
    expectLastCall();
    dataSource.setPartitionCount(3);
    expectLastCall();
    dataSource.setAcquireIncrement(5);
    expectLastCall();
    dataSource.setStatementsCacheSize(20);
    expectLastCall();

    PowerMock.replay(BoneCPDataSource.class);
    replay(env, dataSource);

    DataSource result = DataSources.build(env);
    assertEquals(dataSource, result);

    verify(env, dataSource);
    PowerMock.verify(BoneCPDataSource.class);
  }
}
TOP

Related Classes of com.github.jknack.mwa.jpa.DataSourcesTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.