mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-24 21:29:00 +00:00
162 lines
6.4 KiB
Java
162 lines
6.4 KiB
Java
![]() |
package nu.marginalia;
|
||
|
|
||
|
import com.google.inject.AbstractModule;
|
||
|
import com.google.inject.Inject;
|
||
|
import com.google.inject.Provides;
|
||
|
import com.google.inject.Singleton;
|
||
|
import com.google.inject.name.Names;
|
||
|
import gnu.trove.list.array.TIntArrayList;
|
||
|
import nu.marginalia.db.DomainTypes;
|
||
|
import nu.marginalia.index.domainrankings.DomainRankings;
|
||
|
import nu.marginalia.index.journal.writer.IndexJournalWriter;
|
||
|
import nu.marginalia.index.journal.writer.IndexJournalWriterPagingImpl;
|
||
|
import nu.marginalia.index.searchset.SearchSetAny;
|
||
|
import nu.marginalia.index.searchset.SearchSetsService;
|
||
|
import nu.marginalia.linkdb.docs.DocumentDbReader;
|
||
|
import nu.marginalia.linkdb.docs.DocumentDbWriter;
|
||
|
import nu.marginalia.linkgraph.io.DomainLinksWriter;
|
||
|
import nu.marginalia.process.control.FakeProcessHeartbeat;
|
||
|
import nu.marginalia.process.control.ProcessHeartbeat;
|
||
|
import nu.marginalia.service.ServiceId;
|
||
|
import nu.marginalia.service.control.FakeServiceHeartbeat;
|
||
|
import nu.marginalia.service.control.ServiceEventLog;
|
||
|
import nu.marginalia.service.control.ServiceHeartbeat;
|
||
|
import nu.marginalia.service.module.ServiceConfiguration;
|
||
|
import nu.marginalia.storage.FileStorageService;
|
||
|
import nu.marginalia.storage.model.FileStorageBase;
|
||
|
import nu.marginalia.storage.model.FileStorageBaseType;
|
||
|
import org.mockito.Mockito;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
import java.nio.file.Files;
|
||
|
import java.nio.file.Path;
|
||
|
import java.sql.SQLException;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.Random;
|
||
|
import java.util.UUID;
|
||
|
|
||
|
import static nu.marginalia.linkdb.LinkdbFileNames.DOCDB_FILE_NAME;
|
||
|
import static nu.marginalia.linkdb.LinkdbFileNames.DOMAIN_LINKS_FILE_NAME;
|
||
|
import static org.mockito.ArgumentMatchers.any;
|
||
|
import static org.mockito.Mockito.when;
|
||
|
|
||
|
public class IntegrationTestModule extends AbstractModule {
|
||
|
Path workDir;
|
||
|
Path slowDir;
|
||
|
Path fastDir;
|
||
|
Path indexDir;
|
||
|
|
||
|
Random random = new Random();
|
||
|
|
||
|
public IntegrationTestModule() throws IOException {
|
||
|
workDir = Files.createTempDirectory("IntegrationTest");
|
||
|
slowDir = workDir.resolve("slow");
|
||
|
fastDir = workDir.resolve("fast");
|
||
|
indexDir = workDir.resolve("index");
|
||
|
|
||
|
Files.createDirectory(slowDir);
|
||
|
Files.createDirectory(fastDir);
|
||
|
}
|
||
|
|
||
|
public void cleanUp() {
|
||
|
TestUtil.clearTempDir(workDir);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void configure() {
|
||
|
|
||
|
try {
|
||
|
var fileStorageServiceMock = Mockito.mock(FileStorageService.class);
|
||
|
Mockito.when(fileStorageServiceMock.getStorageBase(FileStorageBaseType.WORK))
|
||
|
.thenReturn(new FileStorageBase(null, null, 0,null, slowDir.toString()));
|
||
|
Mockito.when(fileStorageServiceMock.getStorageBase(FileStorageBaseType.CURRENT))
|
||
|
.thenReturn(new FileStorageBase(null, null, 0,null, fastDir.toString()));
|
||
|
Mockito.when(fileStorageServiceMock.getStorageBase(FileStorageBaseType.STORAGE))
|
||
|
.thenReturn(new FileStorageBase(null, null, 0, null, fastDir.toString()));
|
||
|
|
||
|
bind(DocumentDbReader.class).toInstance(new DocumentDbReader(
|
||
|
IndexLocations.getLinkdbLivePath(fileStorageServiceMock)
|
||
|
.resolve(DOCDB_FILE_NAME)
|
||
|
));
|
||
|
|
||
|
bind(FileStorageService.class).toInstance(fileStorageServiceMock);
|
||
|
bind(ServiceHeartbeat.class).toInstance(new FakeServiceHeartbeat());
|
||
|
bind(ProcessHeartbeat.class).toInstance(new FakeProcessHeartbeat());
|
||
|
|
||
|
SearchSetsService setsServiceMock = Mockito.mock(SearchSetsService.class);
|
||
|
when(setsServiceMock.getSearchSetByName("NONE")).thenReturn(new SearchSetAny());
|
||
|
when(setsServiceMock.getDomainRankings()).thenReturn(new DomainRankings());
|
||
|
bind(SearchSetsService.class).toInstance(setsServiceMock);
|
||
|
|
||
|
DomainTypes domainTypes = Mockito.mock(DomainTypes.class);
|
||
|
when(domainTypes.getAllDomainsByType(any())).thenReturn(new ArrayList<>());
|
||
|
when(domainTypes.getKnownDomainsByType(any())).thenReturn(new TIntArrayList());
|
||
|
when(domainTypes.downloadList(any())).thenReturn(new ArrayList<>());
|
||
|
bind(DomainTypes.class).toInstance(domainTypes);
|
||
|
|
||
|
bind(ServiceEventLog.class).toInstance(Mockito.mock(ServiceEventLog.class));
|
||
|
|
||
|
bind(IndexJournalWriter.class).toInstance(new IndexJournalWriterPagingImpl(
|
||
|
IndexLocations.getIndexConstructionArea(fileStorageServiceMock)
|
||
|
));
|
||
|
|
||
|
bind(ServiceConfiguration.class).toInstance(new ServiceConfiguration(
|
||
|
ServiceId.Index,
|
||
|
0,
|
||
|
"127.0.0.1",
|
||
|
"127.0.0.1",
|
||
|
randomPort(),
|
||
|
UUID.randomUUID()
|
||
|
));
|
||
|
|
||
|
bind(ProcessConfiguration.class).toInstance(new ProcessConfiguration(
|
||
|
"TEST",
|
||
|
0,
|
||
|
UUID.randomUUID()));
|
||
|
|
||
|
bind(Double.class).annotatedWith(Names.named("min-document-quality")).toInstance(-15.);
|
||
|
bind(Integer.class).annotatedWith(Names.named("min-document-length")).toInstance(32);
|
||
|
bind(Integer.class).annotatedWith(Names.named("max-title-length")).toInstance(128);
|
||
|
bind(Integer.class).annotatedWith(Names.named("max-summary-length")).toInstance(255);
|
||
|
|
||
|
bind(Path.class).annotatedWith(Names.named("local-index-path")).toInstance(indexDir);
|
||
|
|
||
|
bind(LanguageModels.class).toInstance(WmsaHome.getLanguageModels());
|
||
|
|
||
|
} catch (IOException | SQLException e) {
|
||
|
throw new RuntimeException(e);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
@Inject
|
||
|
@Provides
|
||
|
@Singleton
|
||
|
private DocumentDbWriter createLinkdbWriter(FileStorageService service) throws SQLException, IOException {
|
||
|
// Migrate
|
||
|
Path dbPath = IndexLocations.getLinkdbWritePath(service).resolve(DOCDB_FILE_NAME);
|
||
|
|
||
|
if (Files.exists(dbPath)) {
|
||
|
Files.delete(dbPath);
|
||
|
}
|
||
|
return new DocumentDbWriter(dbPath);
|
||
|
}
|
||
|
|
||
|
@Inject @Provides @Singleton
|
||
|
private DomainLinksWriter createDomainLinkdbWriter(FileStorageService service) throws SQLException, IOException {
|
||
|
|
||
|
Path dbPath = IndexLocations.getLinkdbWritePath(service).resolve(DOMAIN_LINKS_FILE_NAME);
|
||
|
|
||
|
if (Files.exists(dbPath)) {
|
||
|
Files.delete(dbPath);
|
||
|
}
|
||
|
|
||
|
return new DomainLinksWriter(dbPath);
|
||
|
}
|
||
|
private int randomPort() {
|
||
|
return random.nextInt(10000, 30000);
|
||
|
}
|
||
|
}
|