diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrConnection.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrConnection.java new file mode 100644 index 0000000..c1bd3d6 --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrConnection.java @@ -0,0 +1,99 @@ +/* + * 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.logging.log4j.core.appender.db.nosql.solr; + +import java.io.IOException; + +import org.apache.logging.log4j.core.appender.AppenderLoggingException; +import org.apache.logging.log4j.core.appender.db.nosql.NoSQLConnection; +import org.apache.logging.log4j.core.appender.db.nosql.NoSQLObject; +import org.apache.solr.client.solrj.SolrServer; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.response.UpdateResponse; +import org.apache.solr.common.SolrInputDocument; + +/** + * The Apache Solr implementation of {@link NoSQLConnection}. + */ +public final class SolrConnection implements + NoSQLConnection { + // solr server instance to log to + private final SolrServer solrServer; + // amount of time before commit is done + private int commitWithinMs; + + /** + * default constructor. + * + * @param solrServer + * solr server instance to log to + * @param commitWithinMs + * amount of time before commit is done + */ + public SolrConnection(final SolrServer solrServer, int commitWithinMs) { + this.solrServer = solrServer; + this.commitWithinMs = commitWithinMs; + } + + @Override + public SolrObject createObject() { + return new SolrObject(); + } + + @Override + public SolrObject[] createList(final int length) { + return new SolrObject[length]; + } + + @Override + public void insertObject(final NoSQLObject object) { + try { + UpdateResponse response; + // if commitWithinMs was specified ... use it + if (commitWithinMs < 0) { + response = this.solrServer.add(object.unwrap()); + } else { + response = this.solrServer.add(object.unwrap(), commitWithinMs); + } + + // check if solr response shows error + if (response.getStatus() != 0) { + throw new AppenderLoggingException( + "Failed to write log event to Solr. Request Status is: " + + response.getStatus()); + } + } catch (SolrServerException e) { + throw new AppenderLoggingException( + "Failed to write log event to Solr due to error: " + + e.getMessage(), e); + } catch (IOException e) { + throw new AppenderLoggingException( + "Failed to write log event to Solr due to error: " + + e.getMessage(), e); + } + } + + @Override + public synchronized void close() { + // there is nothing to do + } + + @Override + public synchronized boolean isClosed() { + return false; + } +} diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrObject.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrObject.java new file mode 100644 index 0000000..e6ad0af --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrObject.java @@ -0,0 +1,77 @@ +/* + * 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.logging.log4j.core.appender.db.nosql.solr; + +import java.util.ArrayList; +import java.util.Arrays; +import org.apache.logging.log4j.core.appender.db.nosql.NoSQLObject; +import org.apache.solr.common.SolrInputDocument; + +/** + * The Apache Solr implementation of {@link NoSQLObject}. its a wrapper class + * for the SolrInputDocument. + */ +public final class SolrObject implements NoSQLObject { + // solr document + private final SolrInputDocument solrDoc; + + /** + * default constructor. + */ + public SolrObject() { + this.solrDoc = new SolrInputDocument(); + } + + @Override + public void set(final String field, final Object value) { + // add a single valued field + this.solrDoc.addField(field, value); + } + + @Override + public void set(final String field, + final NoSQLObject value) { + // add a single nested document + this.solrDoc.addChildDocument(value.unwrap()); + + // TODO what is with field name? + } + + @Override + public void set(final String field, final Object[] values) { + // add a multi valued field + this.solrDoc.addField(field, Arrays.asList(values)); + } + + @Override + public void set(final String field, + final NoSQLObject[] values) { + // add a a list of nested documents + final ArrayList list = new ArrayList(); + for (final NoSQLObject value : values) { + list.add(value.unwrap()); + } + this.solrDoc.addChildDocuments(list); + + // TODO what is with field name? + } + + @Override + public SolrInputDocument unwrap() { + return this.solrDoc; + } +} diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrProvider.java new file mode 100644 index 0000000..4db187d --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/nosql/solr/SolrProvider.java @@ -0,0 +1,229 @@ +/* + * 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.logging.log4j.core.appender.db.nosql.solr; + +import java.net.MalformedURLException; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.appender.db.nosql.NoSQLProvider; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginAttribute; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.status.StatusLogger; +import org.apache.solr.client.solrj.SolrServer; +import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; +import org.apache.solr.client.solrj.impl.CloudSolrServer; +import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.impl.LBHttpSolrServer; +import org.apache.solr.core.CoreContainer; + +/** + * The Apache Solr implementation of {@link NoSQLProvider}. + */ +@Plugin(name = "Solr", category = "Core", printObject = true) +public final class SolrProvider implements NoSQLProvider { + // status logger + private static final Logger LOGGER = StatusLogger.getLogger(); + + // solr server instance to log to + private final SolrServer solrServer; + + // amount of time before commit is done + private int commitWithinMs; + + // description of the solr provider + private final String description; + + // default coreName + private static String DEFAULT_CORENAME = "collection1"; + + /** + * constructor of the SolrProvider. + * + * @param solrServer + * solr server instance to log to + * @param commitWithinMs + * amount of time before commit is done + * @param description + * description of the solr provider + */ + private SolrProvider(final SolrServer solrServer, int commitWithinMs, + final String description) { + this.solrServer = solrServer; + this.description = "solr{ " + description + " }"; + this.commitWithinMs = commitWithinMs; + } + + @Override + public SolrConnection getConnection() { + return new SolrConnection(this.solrServer, this.commitWithinMs); + } + + @Override + public String toString() { + return this.description; + } + + /** + * Factory method for creating an Apache Solr provider within the plugin + * manager. + * + * @param coreName + * name of the core/collection. used by all solr server + * implementation ({@link HttpSolrServer}, + * {@link LBHttpSolrServer}, {@link CloudSolrServer}, + * {@link EmbeddedSolrServer}). NOT optional for + * {@link EmbeddedSolrServer} + * @param commitWithinMs + * amount of time before a commit is executed. used by all solr + * server implementation ({@link HttpSolrServer}, + * {@link LBHttpSolrServer}, {@link CloudSolrServer}, + * {@link EmbeddedSolrServer}). + * @param url + * solr URL used by {@link HttpSolrServer} + * @param solrServerUrls + * comma (",") separated list of solr urls. used by + * {@link LBHttpSolrServer} + * @param zkHost + * list of zooKeeper instances to connect to. used by + * {@link CloudSolrServer} + * @param solrHome + * path to the solr home directory. used by + * {@link EmbeddedSolrServer} + * @return new Apache Solr provider. + */ + @PluginFactory + public static SolrProvider createNoSQLProvider( + @PluginAttribute("coreName") final String coreName, + @PluginAttribute("commitWithinMs") final String commitWithinMs, + @PluginAttribute("url") final String url, + @PluginAttribute("solrServerUrls") final String solrServerUrls, + @PluginAttribute("zkHost") final String zkHost, + @PluginAttribute("solrHome") final String solrHome) { + + // init commitWithin + int commitWithin; + if (commitWithinMs == null) { + // default -1 -> not used by insertObject() + commitWithin = -1; + } else { + commitWithin = Integer.parseInt(commitWithinMs); + } + + // create the correct solr server + SolrProvider solrProvider = null; + + if (url != null && url.length() > 0) { + // create SolrProvider with HttpSolrServer + solrProvider = getHttpSolrServer(url, coreName, commitWithin); + } else if (solrServerUrls != null && solrServerUrls.length() > 0) { + // create SolrProvider with LBHttpSolrServer + solrProvider = getLBHttpSolrServer(solrServerUrls, coreName, + commitWithin); + } else if (zkHost != null && zkHost.length() > 0) { + // create SolrProvider with CloudSolrServer + solrProvider = getCloudSolrServer(zkHost, coreName, commitWithin); + } else if ((solrHome != null && solrHome.length() > 0) + && (coreName != null && coreName.length() > 0)) { + // create SolrProvider with EmbeddedSolrServer + solrProvider = getEmbeddedSolrServer(solrHome, coreName, + commitWithin); + } else { + // no valid configuration found + LOGGER.error("No valid SolrProvider configuration found!"); + } + + return solrProvider; + } + + // helper + /** + * create SolrProvider with HttpSolrServer. + */ + private static SolrProvider getHttpSolrServer(String url, String coreName, + int commitWithinMs) { + String solrUrl = url; + + // handle coreName + if (coreName != null && coreName.length() > 0) { + solrUrl = url + "/" + coreName; + } + + return new SolrProvider(new HttpSolrServer(solrUrl), commitWithinMs, + "HttpSolrServer(\"" + solrUrl + "\")"); + } + + /** + * create SolrProvider with LBHttpSolrServer. + */ + private static SolrProvider getLBHttpSolrServer(String solrServerUrls, + String coreName, int commitWithinMs) { + String[] solrURLs = solrServerUrls.split(","); + String description = solrServerUrls; + + // handle coreName + if (coreName != null && coreName.length() > 0) { + description = ""; + for (int i = 0; i < solrURLs.length; i++) { + solrURLs[i] = solrURLs[i] + "/" + coreName; + description += "," + solrURLs[i]; + } + description = description.replaceFirst(",", ""); + } + + try { + return new SolrProvider(new LBHttpSolrServer(solrURLs), + commitWithinMs, "LBHttpSolrServer(\"" + description + "\")"); + } catch (MalformedURLException murlEx) { + // LBHttpSolrServer does not throw this exception + return null; + } + } + + /** + * create SolrProvider with CloudSolrServer. + */ + private static SolrProvider getCloudSolrServer(String zkHost, + String coreName, int commitWithinMs) { + SolrServer solrServer = new CloudSolrServer(zkHost); + String description = "CloudSolrServer(\"" + zkHost + "\")"; + + // handle coreName + if (coreName == null || coreName.length() == 0) { + coreName = DEFAULT_CORENAME; + } + ((CloudSolrServer) solrServer).setDefaultCollection(coreName); + description += ".setDefaultCollection(\"" + coreName + "\")"; + + return new SolrProvider(solrServer, commitWithinMs, description); + } + + /** + * create SolrProvider with EmbeddedSolrServer. + */ + private static SolrProvider getEmbeddedSolrServer(String solrHome, + String coreName, int commitWithinMs) { + CoreContainer coreContainer = new CoreContainer(solrHome); + coreContainer.load(); + String description = "EmbeddedSolrServer(\"" + solrHome + "\", \"" + + coreName + "\")"; + + return new SolrProvider( + new EmbeddedSolrServer(coreContainer, coreName), + commitWithinMs, description); + } +} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrConnection.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrConnection.java new file mode 100644 index 0000000..f847324 --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrConnection.java @@ -0,0 +1,20 @@ +package org.apache.logging.log4j.core.appender.db.nosql.solr; + +import org.junit.After; +import org.junit.Before; + +/** + * JUnit test for SolrConnection. + */ +public class TestSolrConnection { + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + // TODO what to test ??? +} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrObject.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrObject.java new file mode 100644 index 0000000..ae746cb --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrObject.java @@ -0,0 +1,145 @@ +package org.apache.logging.log4j.core.appender.db.nosql.solr; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * JUnit test for SolrObject. + */ +public class TestSolrObject { + private SolrObject solrObject; + + @Before + public void setUp() { + this.solrObject = new SolrObject(); + } + + @After + public void tearDown() { + } + + @Test + public void testConstructor() { + SolrObject solrObject = new SolrObject(); + assertNotNull(solrObject.unwrap()); + } + + @Test + public void testSetSingleValuedField() { + // pre test + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + + // set + this.solrObject.set("a", "solr field"); + this.solrObject.set("b", "another solr field"); + + // test set + assertNotNull(this.solrObject.unwrap().getFieldValue("a")); + assertEquals("solr field", this.solrObject.unwrap().getFieldValue("a")); + assertEquals(1, this.solrObject.unwrap().getFieldValues("a").size()); + assertNotNull(this.solrObject.unwrap().getFieldValue("b")); + assertEquals("another solr field", this.solrObject.unwrap() + .getFieldValue("b")); + assertEquals(1, this.solrObject.unwrap().getFieldValues("b").size()); + } + + @Test + public void testSetMultiValuedField() { + // pre test + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + + // set + String[] array1 = { "solr", "field" }; + this.solrObject.set("a", array1); + String[] array2 = { "another", "solr", "field" }; + this.solrObject.set("b", array2); + + // test set + assertNotNull(this.solrObject.unwrap().getFieldValue("a")); + assertArrayEquals(array1, this.solrObject.unwrap().getFieldValues("a") + .toArray()); + assertEquals(2, this.solrObject.unwrap().getFieldValues("a").size()); + assertNotNull(this.solrObject.unwrap().getFieldValues("b")); + assertArrayEquals(array2, this.solrObject.unwrap().getFieldValues("b") + .toArray()); + assertEquals(3, this.solrObject.unwrap().getFieldValues("b").size()); + } + + @Test + public void testSetSingleNestedDoc() { + // pre test + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + + // set + this.solrObject.set("a", new SolrObject()); + this.solrObject.set("b", new SolrObject()); + + // test set + assertNotNull(this.solrObject.unwrap().getChildDocuments()); + assertEquals(2, this.solrObject.unwrap().getChildDocuments().size()); + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + } + + @Test + public void testSetMultipleNestedDoc() { + // pre test + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + + // set + SolrObject[] array1 = { new SolrObject(), new SolrObject() }; + this.solrObject.set("a", array1); + SolrObject[] array2 = { new SolrObject(), new SolrObject(), + new SolrObject() }; + this.solrObject.set("b", array2); + + // test set + assertNotNull(this.solrObject.unwrap().getChildDocuments()); + assertEquals(5, this.solrObject.unwrap().getChildDocuments().size()); + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + } + + @Test + public void testSetComplex() { + // pre test + assertNull(this.solrObject.unwrap().getFieldValue("a")); + assertNull(this.solrObject.unwrap().getFieldValue("b")); + assertNull(this.solrObject.unwrap().getFieldValue("c")); + assertNull(this.solrObject.unwrap().getFieldValue("d")); + + // set + this.solrObject.set("a", "solr field"); + String[] array1 = { "another", "solr", "field" }; + this.solrObject.set("b", array1); + this.solrObject.set("c", new SolrObject()); + SolrObject[] array2 = { new SolrObject(), new SolrObject(), + new SolrObject() }; + this.solrObject.set("d", array2); + + // test set + assertNotNull(this.solrObject.unwrap().getFieldValue("a")); + assertEquals("solr field", this.solrObject.unwrap().getFieldValue("a")); + assertEquals(1, this.solrObject.unwrap().getFieldValues("a").size()); + + assertNotNull(this.solrObject.unwrap().getFieldValues("b")); + assertArrayEquals(array1, this.solrObject.unwrap().getFieldValues("b") + .toArray()); + assertEquals(3, this.solrObject.unwrap().getFieldValues("b").size()); + + assertNotNull(this.solrObject.unwrap().getChildDocuments()); + assertEquals(4, this.solrObject.unwrap().getChildDocuments().size()); + assertNull(this.solrObject.unwrap().getFieldValue("c")); + assertNull(this.solrObject.unwrap().getFieldValue("d")); + } +} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrProvider.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrProvider.java new file mode 100644 index 0000000..ce00ea4 --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/nosql/solr/TestSolrProvider.java @@ -0,0 +1,179 @@ +package org.apache.logging.log4j.core.appender.db.nosql.solr; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * JUnit tests for SolrProvider. test createNoSQLProvider by reviewing the + * description + */ +public class TestSolrProvider { + // provider to test + private SolrProvider solrProvider; + + @Before + public void setUp() { + this.solrProvider = null; + } + + @After + public void tearDown() { + } + + @Test + public void testHttpSolrServer() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, + "http://localhost:8983/solr", null, null, null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals("solr{ HttpSolrServer(\"http://localhost:8983/solr\") }", + this.solrProvider.toString()); + } + + @Test + public void testHttpSolrServerWithCore() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider("myCore", null, + "http://localhost:8983/solr", null, null, null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals( + "solr{ HttpSolrServer(\"http://localhost:8983/solr/myCore\") }", + this.solrProvider.toString()); + } + + @Test + public void testLBHttpSolrServer() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + "http://localhost:8983/solr,http://localhost:8984/solr", null, + null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals( + "solr{ LBHttpSolrServer(\"http://localhost:8983/solr,http://localhost:8984/solr\") }", + this.solrProvider.toString()); + } + + @Test + public void testLBHttpSolrServerWithCore() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider("myCore", null, + null, "http://localhost:8983/solr,http://localhost:8984/solr", + null, null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals( + "solr{ LBHttpSolrServer(\"http://localhost:8983/solr/myCore,http://localhost:8984/solr/myCore\") }", + this.solrProvider.toString()); + } + + @Test + public void testCloudSolrServer() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + null, "localhost:2181", null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals( + "solr{ CloudSolrServer(\"localhost:2181\").setDefaultCollection(\"collection1\") }", + this.solrProvider.toString()); + } + + @Test + public void testCloudSolrServerWithCore() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider("myCore", null, + null, null, "localhost:2181", null); + + // test provider + assertNotNull(this.solrProvider); + assertEquals( + "solr{ CloudSolrServer(\"localhost:2181\").setDefaultCollection(\"myCore\") }", + this.solrProvider.toString()); + } + + @Test + public void testEmbeddedSolrServer() { + // pre test + assertNull(this.solrProvider); + + // create provider + String solrHome = TestSolrProvider.class + .getResource( + "/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home") + .getPath(); + this.solrProvider = SolrProvider.createNoSQLProvider("myCore", null, + null, null, null, solrHome); + + // test provider + assertNotNull(this.solrProvider); + assertEquals("solr{ EmbeddedSolrServer(\"" + solrHome + + "\", \"myCore\") }", this.solrProvider.toString()); + } + + @Test + public void testNoValidConfiguration() { + // pre test + assertNull(this.solrProvider); + + // create provider + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + null, null, null); + assertNull(this.solrProvider); + + // empty coreName + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, "", + null, null, null); + assertNull(this.solrProvider); + + // empty url + this.solrProvider = SolrProvider.createNoSQLProvider("", null, null, + null, null, null); + assertNull(this.solrProvider); + + // empty list of Solr server + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + "", null, null); + assertNull(this.solrProvider); + + // empty zkHost + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + null, "", null); + assertNull(this.solrProvider); + + // empty solrHome + this.solrProvider = SolrProvider.createNoSQLProvider(null, null, null, + null, null, ""); + assertNull(this.solrProvider); + } +} diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.html b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.html new file mode 100644 index 0000000..8f2b32a --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.html @@ -0,0 +1,24 @@ + + + diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-bottom.html b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-bottom.html new file mode 100644 index 0000000..5f5eddd --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-bottom.html @@ -0,0 +1,25 @@ + + + + diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-top.html b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-top.html new file mode 100644 index 0000000..6c980eb --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/admin-extra.menu-top.html @@ -0,0 +1,25 @@ + + + + diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/schema.xml b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/schema.xml new file mode 100644 index 0000000..97c25cf --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/schema.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/solrconfig.xml b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/solrconfig.xml new file mode 100644 index 0000000..ad040c4 --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/conf/solrconfig.xml @@ -0,0 +1,209 @@ + + + + + + + 4.7 + + + ${solr.data.dir:} + + + + + + + + + + + + + + + + + + + + + ${solr.ulog.dir:} + + + + ${solr.autoCommit.maxTime:15000} + false + + + + ${solr.autoSoftCommit.maxTime:-1} + + + + + + 1024 + + + + + + true + 20 + 200 + + + + + + + + + + static firstSearcher warming in solrconfig.xml + + + + false + 2 + + + + + + + + + + + explicit + 10 + text + + + + + + + explicit + json + true + text + + + + + + true + json + true + + + + + + + + + + + + + solrpingquery + + + all + + + + + + + explicit + true + + + + + + + + + *:* + + + diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/core.properties b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/core.properties new file mode 100644 index 0000000..a70b08d --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/collection1/core.properties @@ -0,0 +1 @@ +name=collection1 diff --git a/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/solr.xml b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/solr.xml new file mode 100644 index 0000000..e8bdfb4 --- /dev/null +++ b/log4j-core/src/test/resources/org/apache/logging/log4j/core/appender/db/nosql/solr/solr_home/solr.xml @@ -0,0 +1,45 @@ + + + + + + + + + ${host:} + ${jetty.port:8983} + ${hostContext:solr} + ${zkClientTimeout:30000} + ${genericCoreNodeNames:true} + + + + ${socketTimeout:0} + ${connTimeout:0} + + +