/**
* Copyright (c) 2016, All Contributors (see CONTRIBUTORS file)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.eventsourcing.migrations;
import com.eventsourcing.LocalLockProvider;
import com.eventsourcing.PackageCommandSetProvider;
import com.eventsourcing.PackageEventSetProvider;
import com.eventsourcing.Repository;
import com.eventsourcing.hlc.NTPServerTimeProvider;
import com.eventsourcing.inmem.MemoryIndexEngine;
import com.eventsourcing.inmem.MemoryJournal;
import com.eventsourcing.repository.StandardRepository;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
public abstract class RepositoryTest {
private final Package[] packages;
protected Repository repository;
protected LocalLockProvider lockProvider;
protected NTPServerTimeProvider timeProvider;
public RepositoryTest(Package ...packages) {
this.packages = packages;
}
@BeforeMethod
public void setUp() throws Exception {
timeProvider = new NTPServerTimeProvider(new String[]{"localhost"});
repository = new StandardRepository();
repository.setPhysicalTimeProvider(timeProvider);
repository.setJournal(new MemoryJournal());
repository.setIndexEngine(new MemoryIndexEngine());
lockProvider = new LocalLockProvider();
repository.setLockProvider(lockProvider);
repository.startAsync().awaitRunning();
// Add commands/events after the startup, to simulate production better
repository.addCommandSetProvider(new PackageCommandSetProvider(packages));
repository.addEventSetProvider(new PackageEventSetProvider(packages));
}
@AfterMethod
public void tearDown() throws Exception {
repository.stopAsync().awaitTerminated();
}
}