blob: 057b97f0a7b1d37ee6bee42359a068b09d394b11 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.solr.handler;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.designer.DefaultSampleDocumentsLoader;
import org.apache.solr.handler.designer.SampleDocuments;
import org.apache.solr.handler.designer.SampleDocumentsLoader;
import org.apache.solr.util.ExternalPaths;
import org.junit.Before;
import org.junit.Test;
import static org.apache.solr.handler.designer.DefaultSampleDocumentsLoader.CSV_MULTI_VALUE_DELIM_PARAM;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class TestSampleDocumentsLoader {
SampleDocumentsLoader loader;
File exampleDir;
@Before
public void setup() throws IOException {
loader = new DefaultSampleDocumentsLoader();
loader.init(new NamedList<>());
exampleDir = new File(ExternalPaths.SOURCE_HOME, "example");
assertTrue("Required test data directory " + exampleDir.getCanonicalPath() + " not found!", exampleDir.isDirectory());
}
@Test
public void testJson() throws Exception {
loadTestDocs(null, new File(exampleDir, "films/films.json"), 500, 500);
}
@Test
public void testCsv() throws Exception {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set(CSV_MULTI_VALUE_DELIM_PARAM, "\\|");
List<SolrInputDocument> docs = loadTestDocs(params, new File(exampleDir, "films/films.csv"), -1, 1100);
boolean foundIt = false;
for (SolrInputDocument next : docs) {
if (".45".equals(next.getFieldValue("name"))) {
SolrInputField genreField = next.getField("genre");
assertNotNull(genreField);
assertEquals(8, genreField.getValueCount());
foundIt = true;
break;
}
}
if (!foundIt) {
fail("Didn't find the expected film with name '.45' in the parsed docs!");
}
}
@Test
public void testSolrXml() throws Exception {
loadTestDocs(null, new File(exampleDir, "films/films.xml"), 1000, 1000);
}
protected List<SolrInputDocument> loadTestDocs(SolrParams params, File inputDocs, int maxDocsToLoad, int expectedDocs) throws IOException {
assertTrue(inputDocs.getCanonicalPath() + " not found", inputDocs.isFile());
ContentStream stream = getContentStream(inputDocs);
SampleDocuments sampleDocs = loader.parseDocsFromStream(params, stream, maxDocsToLoad);
assertNotNull(sampleDocs);
assertEquals(sampleDocs.parsed.size(), expectedDocs);
return sampleDocs.parsed;
}
public static String guessContentTypeFromFilename(String name) {
int dotAt = name.lastIndexOf('.');
if (dotAt != -1) {
final String ext = name.substring(dotAt + 1);
switch (ext) {
case "csv":
return "text/csv";
case "txt":
return "text/plain";
case "json":
return "application/json";
case "xml":
return "text/xml";
}
}
return "application/octet-stream";
}
protected ContentStream getContentStream(File file) {
return getContentStream(file, guessContentTypeFromFilename(file.getName()));
}
protected ContentStream getContentStream(File file, String contentType) {
ContentStreamBase.FileStream stream = new ContentStreamBase.FileStream(file);
stream.setContentType(contentType);
return stream;
}
}