package pl.edu.icm.saos.search.config.service;
import static pl.edu.icm.saos.search.FilesAssert.assertEmptyDirectory;
import static pl.edu.icm.saos.search.FilesAssert.assertFile;
import static pl.edu.icm.saos.search.FilesAssert.assertIsDirectory;
import static pl.edu.icm.saos.search.FilesAssert.assertPropertyFile;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import pl.edu.icm.saos.search.config.model.IndexConfiguration;
import com.google.common.io.Files;
/**
* @author madryk
*/
public class SolrIndexConfigurationCopierTest {
private SolrIndexConfigurationCopier indexConfigurationCopier = new SolrIndexConfigurationCopier();
@Test
public void copyIndexConfiguration() throws IOException {
File tmpDir = Files.createTempDir();
NamedByteArrayResource firstResource = new NamedByteArrayResource("some resource content".getBytes(), "filename.txt");
NamedByteArrayResource secondResource = new NamedByteArrayResource("some other resource content".getBytes(), "secondFilename.txt");
IndexConfiguration indexConfiguration = createIndexConfiguration("indexName", "indexDirectory", firstResource, secondResource);
indexConfigurationCopier.copyIndexConfiguration(indexConfiguration, tmpDir.getAbsolutePath());
assertIndexConfStructure(tmpDir, "indexDirectory");
assertIndexConfFile(tmpDir, "indexDirectory", "filename.txt", "some resource content");
assertIndexConfFile(tmpDir, "indexDirectory", "secondFilename.txt", "some other resource content");
FileUtils.deleteDirectory(tmpDir);
}
@Test
public void copyIndexConfiguration_WITH_PROPERTY_FILE() throws IOException {
File tmpDir = Files.createTempDir();
IndexConfiguration indexConfiguration = createIndexConfiguration("indexName", "indexDirectory");
indexConfiguration.setCreateIndexPropertyFile(true);
indexConfigurationCopier.copyIndexConfiguration(indexConfiguration, tmpDir.getAbsolutePath());
assertIndexConfStructure(tmpDir, "indexDirectory");
assertIndexPropertiesFile(tmpDir, "indexDirectory", "indexName");
FileUtils.deleteDirectory(tmpDir);
}
@Test
public void cleanupIndexConfiguration() throws IOException {
File tmpDir = Files.createTempDir();
NamedByteArrayResource firstResource = new NamedByteArrayResource("some resource content".getBytes(), "filename.txt");
IndexConfiguration indexConfiguration = createIndexConfiguration("indexName", "indexDirectory", firstResource);
indexConfiguration.setPersistent(false);
indexConfigurationCopier.copyIndexConfiguration(indexConfiguration, tmpDir.getAbsolutePath());
indexConfigurationCopier.cleanupIndexConfiguration(indexConfiguration, tmpDir.getAbsolutePath());
assertEmptyDirectory(tmpDir);
FileUtils.deleteDirectory(tmpDir);
}
//------------------------ PRIVATE: ASSERTS --------------------------
private void assertIndexConfStructure(File baseDir, String indexDirectory) throws IOException {
File indexDir = new File(baseDir, indexDirectory);
assertIsDirectory(indexDir);
File indexConfDir = new File(indexDir, "conf");
assertIsDirectory(indexConfDir);
}
private void assertIndexConfFile(File baseDir, String indexDirectory, String filename, String content) throws IOException {
File indexDir = new File(baseDir, indexDirectory);
File indexConfDir = new File(indexDir, "conf");
File confFile = new File(indexConfDir, filename);
assertFile(confFile, content);
}
private void assertIndexPropertiesFile(File baseDir, String indexDirectory, String indexName) throws IOException {
File indexDir = new File(baseDir, indexDirectory);
File propertyFile = new File(indexDir, "core.properties");
Properties expectedProperties = new Properties();
expectedProperties.put("name", indexName);
assertPropertyFile(propertyFile, expectedProperties);
}
//------------------------ PRIVATE: DATA CREATION --------------------------
protected IndexConfiguration createIndexConfiguration(String indexName, String indexDir, Resource ... configResources) {
IndexConfiguration indexConfiguration = new IndexConfiguration();
indexConfiguration.setName(indexName);
indexConfiguration.setInstanceDir(indexDir);
indexConfiguration.setConfigurationFiles(Arrays.asList(configResources));
return indexConfiguration;
}
//------------------------ HELPER --------------------------
private class NamedByteArrayResource extends ByteArrayResource {
private String name;
public NamedByteArrayResource(byte[] byteArray, String name) {
super(byteArray);
this.name = name;
}
public NamedByteArrayResource(byte[] byteArray, String name, String description) {
super(byteArray, description);
this.name = name;
}
@Override
public String getFilename() {
return name;
}
}
}