package org.ovirt.engine.core.dao.dwh;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Provider;
import org.junit.Test;
import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource;
import org.ovirt.engine.core.dal.dbbroker.SimpleJdbcCallsHandler;
import org.ovirt.engine.core.dao.BaseDaoTestCase;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
public class OsInfoDaoImplTest extends BaseDaoTestCase {
private static final String OS_NAME = "test os name";
private static final int OS_ID = 666;
@Inject
private OsInfoDaoImpl underTest;
@Inject
private JdbcTemplate jdbcTemplate;
@Inject
private SimpleJdbcCallsHandler simpleJdbcCallsHandler;
@Inject
private Provider<CustomMapSqlParameterSource> sqlParameterSourceProvider;
@Test
public void testPopulateDwhOsInfoEmptyTable() {
emptyTable();
final Map<Integer, String> expected = Collections.singletonMap(OS_ID, OS_NAME);
underTest.populateDwhOsInfo(expected);
assertResult();
}
@Test
public void testPopulateDwhOsInfoWithOldValues() {
insertOldValues();
final Map<Integer, String> expected = Collections.singletonMap(OS_ID, OS_NAME);
underTest.populateDwhOsInfo(expected);
assertResult();
}
private void assertResult() {
final Map<Integer, String> actual = loadTableData();
assertThat(actual.keySet(), hasSize(1));
assertThat(actual, hasEntry(OS_ID, OS_NAME));
}
private void emptyTable() {
jdbcTemplate.execute("select clear_osinfo()");
}
private Map<Integer, String> loadTableData() {
final Map<Integer, String> result = new HashMap<>();
jdbcTemplate.query("SELECT * FROM dwh_osinfo",
rs -> {
final int osId = rs.getInt("os_id");
result.put(osId, rs.getString("os_name"));
});
return result;
}
private void insertOldValues() {
simpleJdbcCallsHandler.executeModification("insert_osinfo", prepareOldValues());
}
private MapSqlParameterSource prepareOldValues() {
final MapSqlParameterSource mapSqlParameterSource = sqlParameterSourceProvider.get();
mapSqlParameterSource.addValue("os_id", ~OS_ID);
mapSqlParameterSource.addValue("os_name", "old " + OS_NAME);
return mapSqlParameterSource;
}
}