/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.api.rule;
import com.dangdang.ddframe.rdb.sharding.fixture.TestDataSource;
import com.google.common.collect.Sets;
import org.junit.Before;
import org.junit.Test;
import javax.sql.DataSource;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
public final class DataSourceRuleTest {
private final Map<String, DataSource> dataSourceMap = new HashMap<>(3);
private DataSourceRule dataSourceRule;
@Before
public void setUp() {
dataSourceMap.put("ds0", new TestDataSource("ds0"));
dataSourceMap.put("ds1", new TestDataSource("ds1"));
dataSourceMap.put("ds2", new TestDataSource("ds2"));
dataSourceRule = new DataSourceRule(dataSourceMap);
}
@Test(expected = IllegalStateException.class)
public void assertNewDataSourceFailureWhenDataSourceMapIsEmpty() {
new DataSourceRule(Collections.<String, DataSource>emptyMap());
}
@Test
public void assertGetDataSource() {
assertDataSource("ds0");
assertDataSource("ds1");
assertDataSource("ds2");
}
private void assertDataSource(final String dataSourceName) {
assertThat(dataSourceRule.getDataSource(dataSourceName), is((DataSource) new TestDataSource(dataSourceName)));
}
@Test
public void assertGetDefaultDataSourceWhenNotSet() {
assertFalse(dataSourceRule.getDefaultDataSource().isPresent());
}
@Test
public void assertGetDefaultDataSourceWithSingleDataSource() {
Map<String, DataSource> dataSourceMap = new HashMap<>(1);
dataSourceMap.put("ds0", new TestDataSource("ds0"));
dataSourceRule = new DataSourceRule(dataSourceMap);
assertThat(dataSourceRule.getDefaultDataSource().get(), is(dataSourceRule.getDataSource("ds0")));
}
@Test
public void assertGetDefaultDataSource() {
dataSourceRule = new DataSourceRule(dataSourceMap, "ds0");
assertThat(dataSourceRule.getDefaultDataSource().get(), is(dataSourceRule.getDataSource("ds0")));
}
@Test
public void assertGetDataSourceNames() {
assertThat(dataSourceRule.getDataSourceNames(), is((Collection<String>) Sets.newHashSet("ds0", "ds1", "ds2")));
}
@Test
public void assertGetDataSources() {
assertThat(dataSourceRule.getDataSources(), is(dataSourceMap.values()));
}
}