blob: 4d66c5dc7788227e72f98a2a0e7851723ea65df5 [file] [log] [blame]
/*
* Copyright 2017 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.utils;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
/**
* @author Florian Zschocke
*
*/
public class LuceneIndexStoreTest
{
private final int LUCENE_VERSION = LuceneIndexStore.LUCENE_CODEC_VERSION;
@Rule
public TemporaryFolder baseFolder = new TemporaryFolder();
private String getIndexDir(int version)
{
return version + "_" + LUCENE_VERSION;
}
@Test
public void testCreate()
{
int version = 0;
File luceneFolder = new File(baseFolder.getRoot(), "tickets/lucene");
assertFalse("Precondition failure: directory exists already", luceneFolder.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
li.create();
File luceneDir = new File(luceneFolder, getIndexDir(version));
assertTrue(luceneDir.exists());
}
@Test
public void testCreateIndexDir()
{
int version = 111222;
File luceneFolder = null;
try {
luceneFolder = baseFolder.newFolder("tickets", "lucene");
}
catch (IOException e) {
fail("Failed in setup of folder: " + e);
}
assertTrue("Precondition failure: directory does not exist", luceneFolder.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
li.create();
File luceneDir = new File(luceneFolder, getIndexDir(version));
assertTrue(luceneDir.exists());
assertTrue(luceneDir.isDirectory());
// Make sure nothing else was created.
assertEquals(0, luceneDir.list().length);
assertEquals(1, luceneDir.getParentFile().list().length);
assertEquals(1, luceneDir.getParentFile().getParentFile().list().length);
}
@Test
public void testCreateIfNecessary()
{
int version = 1;
File luceneFolder = new File(baseFolder.getRoot(), "tickets/lucene");
File luceneDir = null;
try {
luceneDir = baseFolder.newFolder("tickets", "lucene", getIndexDir(version));
}
catch (IOException e) {
fail("Failed in setup of folder: " + e);
}
assertTrue("Precondition failure: directory does not exist", luceneDir.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
li.create();
assertTrue(luceneDir.exists());
assertTrue(luceneDir.isDirectory());
// Make sure nothing else was created.
assertEquals(0, luceneDir.list().length);
assertEquals(1, luceneDir.getParentFile().list().length);
assertEquals(1, luceneDir.getParentFile().getParentFile().list().length);
}
@Test
public void testDelete()
{
int version = 111222333;
File luceneFolder = new File(baseFolder.getRoot(), "repo1/lucene");
File luceneDir = null;
try {
luceneDir = baseFolder.newFolder("repo1", "lucene", getIndexDir(version));
}
catch (IOException e) {
fail("Failed in setup of folder: " + e);
}
assertTrue("Precondition failure: index directory does not exist", luceneDir.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
assertTrue(li.delete());
assertFalse(luceneDir.exists());
assertTrue(luceneFolder.exists());
}
@Test
public void testDeleteNotExist()
{
int version = 0;
File luceneFolder = null;
try {
luceneFolder = baseFolder.newFolder("repo1", "lucene");
}
catch (IOException e) {
fail("Failed in setup of folder: " + e);
}
File luceneDir = new File(luceneFolder, getIndexDir(version));
assertFalse("Precondition failure: index directory exists already", luceneDir.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
assertTrue(li.delete());
assertFalse(luceneDir.exists());
assertTrue(luceneFolder.exists());
}
@Test
public void testDeleteWithFiles()
{
int version = 111222333;
File luceneFolder = new File(baseFolder.getRoot(), "tickets/lucene");
File luceneDir = null;
File otherDir = new File(baseFolder.getRoot(), "tickets/lucene/" + version + "_10");
File dbFile = null;
try {
luceneDir = baseFolder.newFolder("tickets", "lucene", getIndexDir(version));
File file = new File(luceneDir, "_file1");
file.createNewFile();
file = new File(luceneDir, "_file2.db");
file.createNewFile();
file = new File(luceneDir, "conf.conf");
file.createNewFile();
otherDir.mkdirs();
dbFile = new File(otherDir, "_file2.db");
dbFile.createNewFile();
file = new File(otherDir, "conf.conf");
file.createNewFile();
}
catch (IOException e) {
fail("Failed in setup of folder: " + e);
}
assertTrue("Precondition failure: index directory does not exist", luceneDir.exists());
assertTrue("Precondition failure: other index directory does not exist", otherDir.exists());
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
li.delete();
assertFalse(luceneDir.exists());
assertTrue(luceneFolder.exists());
assertTrue(otherDir.exists());
assertTrue(dbFile.exists());
}
@Test
public void testGetPath() throws IOException
{
int version = 2;
File luceneFolder = baseFolder.newFolder("tickets", "lucene");
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
Path dir = li.getPath();
File luceneDir = new File(luceneFolder, getIndexDir(version));
assertEquals(luceneDir.toPath(), dir);
}
@Test
public void testHasIndex() throws IOException
{
int version = 0;
File luceneFolder = new File(baseFolder.getRoot(), "ticktock/lucene");
LuceneIndexStore li = new LuceneIndexStore(luceneFolder, version);
assertFalse(li.hasIndex());
baseFolder.newFolder("ticktock");
li = new LuceneIndexStore(luceneFolder, version);
assertFalse(li.hasIndex());
baseFolder.newFolder("ticktock", "lucene");
li = new LuceneIndexStore(luceneFolder, version);
assertFalse(li.hasIndex());
File luceneDir = baseFolder.newFolder("ticktock", "lucene", getIndexDir(version));
li = new LuceneIndexStore(luceneFolder, version);
assertFalse(li.hasIndex());
new File(luceneDir, "write.lock").createNewFile();
li = new LuceneIndexStore(luceneFolder, version);
assertFalse(li.hasIndex());
new File(luceneDir, "segments_1").createNewFile();
li = new LuceneIndexStore(luceneFolder, version);
assertTrue(li.hasIndex());
}
}