package org.wikibrain.core.dao; import org.junit.Before; import org.junit.Test; import org.wikibrain.core.dao.sql.MetaInfoSqlDao; import org.wikibrain.core.dao.sql.TestDaoUtil; import org.wikibrain.core.dao.sql.WpDataSource; import org.wikibrain.core.lang.Language; import org.wikibrain.core.lang.LanguageSet; import java.io.IOException; import static org.junit.Assert.*; /** * @author Shilad Sen */ public class TestMetaInfoDao { private MetaInfoSqlDao dao; private Language EN = Language.getByLangCode("en"); private Language IT = Language.getByLangCode("it"); private WpDataSource ds; @Before public void setupDao() throws ClassNotFoundException, IOException, DaoException { ds = TestDaoUtil.getWpDataSource(); dao = new MetaInfoSqlDao(ds); assertFalse(dao.tableExists()); dao.beginLoad(); assertTrue(dao.tableExists()); } @Test public void testSimple() throws DaoException { long l1 = System.currentTimeMillis(); for (int i = 1; i <= 1000000; i++) { assertEquals(i, dao.incrementRecords(String.class, EN)); if (i % 10 == 0) { dao.incrementErrors(String.class, EN); } } long l2 = System.currentTimeMillis(); System.err.println("elapsed is " + (l2 - l1)); assertEquals(1000000, dao.getInfo(String.class, EN).getNumRecords()); assertEquals(100000, dao.getInfo(String.class, EN).getNumErrors()); dao.sync(String.class, EN); dao = new MetaInfoSqlDao(ds); assertEquals(1000000, dao.getInfo(String.class, EN).getNumRecords()); assertEquals(100000, dao.getInfo(String.class, EN).getNumErrors()); assertEquals(0, dao.getInfo(Boolean.class, EN).getNumRecords()); assertEquals(0, dao.getInfo(Boolean.class, EN).getNumErrors()); assertEquals(0, dao.getInfo(String.class, IT).getNumRecords()); assertEquals(0, dao.getInfo(String.class, IT).getNumErrors()); } @Test public void testNull() throws DaoException { dao.incrementRecords(String.class, null); dao.incrementRecords(Boolean.class, null); dao.incrementRecords(String.class, null); assertEquals(2, dao.getInfo(String.class, null).getNumRecords()); assertEquals(1, dao.getInfo(Boolean.class, null).getNumRecords()); dao.sync(String.class); dao = new MetaInfoSqlDao(ds); assertEquals(2, dao.getInfo(String.class, null).getNumRecords()); assertEquals(0, dao.getInfo(String.class, EN).getNumRecords()); assertEquals(0, dao.getInfo(String.class, EN).getNumErrors()); } @Test public void testNoLang() throws DaoException { dao.incrementRecords(String.class, null); dao.incrementRecords(String.class); dao.incrementRecords(String.class, EN); dao.incrementRecords(String.class, IT); dao.incrementRecords(Boolean.class, EN); dao.incrementRecords(String.class, null); assertEquals(5, dao.getInfo(String.class).getNumRecords()); assertEquals(1, dao.getInfo(Boolean.class).getNumRecords()); assertEquals(0, dao.getInfo(String.class).getNumErrors()); dao.sync(String.class); dao = new MetaInfoSqlDao(ds); assertEquals(5, dao.getInfo(String.class).getNumRecords()); assertEquals(1, dao.getInfo(Boolean.class).getNumRecords()); assertEquals(0, dao.getInfo(String.class).getNumErrors()); LanguageSet langs = dao.getLoadedLanguages(String.class); assertEquals(langs.size(), 2); assertTrue(langs.containsLanguage(EN)); assertTrue(langs.containsLanguage(IT)); langs = dao.getLoadedLanguages(Boolean.class); assertEquals(langs.size(), 1); assertTrue(langs.containsLanguage(EN)); } }