package eu.dnetlib.functionality.index.solr; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.io.StringWriter; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnit44Runner; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import eu.dnetlib.functionality.index.solr.utils.InitUtils; import eu.dnetlib.functionality.index.solr.utils.MetadataReference; import eu.dnetlib.functionality.index.solr.utils.MetadataReferenceFactory; import eu.dnetlib.functionality.index.solr.utils.ServiceTools; @RunWith(MockitoJUnit44Runner.class) public class SolrIndexServerTest { private static ClassPathResource applicationContext = new ClassPathResource("eu/dnetlib/functionality/index/solr/SolrIndexServerTest-context.xml"); private static XmlBeanFactory beanFactory = new XmlBeanFactory(applicationContext); @Mock private ServiceTools serviceTools; /** * object under test */ private SolrIndexServer solrIndexServer; @Before public void setUp() throws Exception { assertTrue(getSolrHomeDir().exists()); solrIndexServer = getBean("solrIndexServer", SolrIndexServer.class);// beanFactory.getBean("solrIndexServer"); solrIndexServer.setServiceTools(serviceTools); solrIndexServer.init(); } @Test public void test_create() throws Exception { assertTrue(new File(getSolrHomeDir().getAbsolutePath() + "/conf").exists()); assertTrue(new File(getSolrHomeDir().getAbsolutePath() + "/data").exists()); MetadataReference mdRef = getBean("mdFactory", MetadataReferenceFactory.class).getMetadata("DMF", "index"); String fields = getFields("classpath:eu/dnetlib/functionality/index/solr/metadataFileds.xml"); solrIndexServer.create("000", mdRef, fields); assertTrue(new File(getSolrHomeDir().getAbsolutePath() + "/data/" + mdRef.toString()).exists()); assertNotNull(solrIndexServer.getIndexMap().getIndexByMetadata(mdRef)); } @After public void tearDown() throws IOException { //beanFactory.destroySingletons(); deleteSolrHomeDir(); } private String getFields(String classpathResource) throws IOException { Resource fields = getBean("resourceLoader", DefaultResourceLoader.class).getResource(classpathResource); StringWriter fieldWriter = new StringWriter(); IOUtils.copy(fields.getInputStream(), fieldWriter); return fieldWriter.toString(); } private File getSolrHomeDir() { return new File(getBean("initUtils", InitUtils.class).getSolrHomeDir()); } private void deleteSolrHomeDir() throws IOException { FileUtils.forceDelete(getSolrHomeDir()); } // helper @SuppressWarnings("unchecked") private T getBean(String name, Class clazz) { return (T) beanFactory.getBean(name); } }