

package ru.taximaxim.dbreplicator2;

import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import ru.taximaxim.dbreplicator2.abstracts.AbstractReplicationTest;
import ru.taximaxim.dbreplicator2.model.RunnerService;
import ru.taximaxim.dbreplicator2.tp.WorkerThread;
import ru.taximaxim.dbreplicator2.utils.Core;

/**
 * Тест очистки rep2_workpool_data в случае если есть записи об операциях над
 * несуществующими записями.
 *
 * Тест расчитан на настройки стратегии репликации  batchSize=1 и fetchSize=1
 *
 * @author volodin_aa
 *
 */
public class CronSchedulerTest extends AbstractReplicationTest {
    // Задержка между циклами репликации
    private static final int REPLICATION_DELAY = 2000;
    protected static final Logger LOG = Logger.getLogger(CronSchedulerTest.class);

    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        setUp("importCronScheduler.sql", "init_db/importRep2.sql", "init_db/importSource.sql", "init_db/importDest.sql");
        initRunners();
    }

    /**
     * @throws java.lang.Exception
     */
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        close();
    }

    /**
     * Инициализация раннеров
     */
    public static void initRunners() {
        RunnerService runnerService = new RunnerService(sessionFactory);

        worker = new WorkerThread(runnerService.getRunner(1));
    }

    @Test
    public void testTaskScheduler() throws Exception {
        //Проверка внешних ключей
        LOG.info("Проверка внешних ключей");
        Helper.executeSqlFromFile(source, "sql_query/sql_insert.sql");

        // Запуск всех тасков
        Core.getCronPool().start();
        Thread.sleep(REPLICATION_DELAY);

        Helper.InfoSelect(source, "rep2_errors_log");

        verifyTable("t_table2");
        verifyTable("t_table3");
    }
}
