package org.dayatang.configuration.impl;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class ConfigurationDbImplTest extends AbstractConfigurationTest {
private static DataSource dataSource;
@BeforeClass
public static void classSetUp() throws Exception {
dataSource = createDataSource();
}
private static DataSource createDataSource() throws IOException {
Properties properties = new Properties();
properties.load(ConfigurationDbImplTest.class.getResourceAsStream("/jdbc.properties"));
ComboPooledDataSource result = new ComboPooledDataSource();
try {
result.setDriverClass(properties.getProperty("jdbc.driverClassName"));
} catch (PropertyVetoException e) {
throw new RuntimeException("Cannot access JDBC Driver: org.h2.Driver", e);
}
result.setJdbcUrl(properties.getProperty("jdbc.url"));
result.setUser(properties.getProperty("jdbc.username"));
result.setPassword(properties.getProperty("jdbc.password"));
result.setMinPoolSize(10);
result.setMaxPoolSize(300);
result.setInitialPoolSize(10);
result.setAcquireIncrement(5);
result.setMaxStatements(0);
result.setIdleConnectionTestPeriod(60);
result.setAcquireRetryAttempts(30);
result.setBreakAfterAcquireFailure(false);
result.setTestConnectionOnCheckout(false);
return result;
}
@Before
public void setUp() throws Exception {
readConfigFromFile();
instance = new ConfigurationDbImpl(dataSource);
}
private static void readConfigFromFile() throws IOException {
Properties props = new Properties();
props.load(new InputStreamReader(ConfigurationDbImplTest.class.getResourceAsStream("/conf.properties"), "UTF-8") );
ConfigurationDbImpl dbImpl = new ConfigurationDbImpl(dataSource);
for (Object key : props.keySet()) {
dbImpl.setString((String) key, props.getProperty((String) key));
}
//dbImpl.setString("name", "张三");
dbImpl.save();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testUsePrefix() {
((ConfigurationDbImpl)instance).usePrefix("org.dayatang");
assertTrue(instance.getBoolean("finished"));
}
@Test
public void testSave() {
instance.setString("xyz", "yyyy-MM-dd");
((ConfigurationDbImpl)instance).save();
ConfigurationDbImpl instance2 = new ConfigurationDbImpl(dataSource);
assertEquals("yyyy-MM-dd", instance2.getString("xyz"));
}
}