Fourth time's a charm, one more mock class to add to test jar

This commit is contained in:
Ryan Ernst 2015-08-13 19:36:53 -07:00
parent d7da6e673f
commit 589eecf55d
23 changed files with 58 additions and 113 deletions

View File

@ -315,6 +315,7 @@
<include>org/elasticsearch/search/MockSearchService.class</include>
<include>org/elasticsearch/search/MockSearchService$*.class</include>
<include>org/elasticsearch/cache/recycler/MockPageCacheRecycler.class</include>
<include>org/elasticsearch/cache/recycler/MockPageCacheRecycler$*.class</include>
<include>org/elasticsearch/common/util/MockBigArrays.class</include>
<include>org/elasticsearch/common/util/MockBigArrays$*.class</include>
<include>org/elasticsearch/node/NodeMocksPlugin.class</include>

View File

@ -192,7 +192,7 @@ public class Bootstrap {
@SuppressForbidden(reason = "Exception#printStackTrace()")
private static void setupLogging(Settings settings, Environment environment) {
try {
settings.getClassLoader().loadClass("org.apache.log4j.Logger");
Class.forName("org.apache.log4j.Logger");
LogConfigurator.configure(settings);
} catch (ClassNotFoundException e) {
// no log4j

View File

@ -23,6 +23,7 @@ import com.carrotsearch.hppc.cursors.ObjectCursor;
import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.Version;
import org.elasticsearch.cluster.Diff;
import org.elasticsearch.cluster.Diffable;
@ -251,7 +252,12 @@ public class IndexMetaData implements Diffable<IndexMetaData>, FromXContentBuild
if (hashFunction == null) {
routingHashFunction = MURMUR3_HASH_FUNCTION;
} else {
final Class<? extends HashFunction> hashFunctionClass = Classes.loadClass(getClass().getClassLoader(), hashFunction);
final Class<? extends HashFunction> hashFunctionClass;
try {
hashFunctionClass = (Class<? extends HashFunction>) getClass().getClassLoader().loadClass(hashFunction);
} catch (ClassNotFoundException|NoClassDefFoundError e) {
throw new ElasticsearchException("failed to load custom hash function [" + hashFunction + "]", e);
}
try {
routingHashFunction = hashFunctionClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {

View File

@ -20,6 +20,7 @@ package org.elasticsearch.cluster.metadata;
import com.carrotsearch.hppc.cursors.ObjectCursor;
import org.apache.lucene.analysis.Analyzer;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.Version;
import org.elasticsearch.cluster.routing.DjbHashFunction;
import org.elasticsearch.cluster.routing.HashFunction;
@ -78,7 +79,11 @@ public class MetaDataIndexUpgradeService extends AbstractComponent {
pre20HashFunction = DjbHashFunction.class;
break;
default:
pre20HashFunction = Classes.loadClass(getClass().getClassLoader(), pre20HashFunctionName);
try {
pre20HashFunction = (Class<? extends HashFunction>) getClass().getClassLoader().loadClass(pre20HashFunctionName);
} catch (ClassNotFoundException|NoClassDefFoundError e) {
throw new ElasticsearchException("failed to load custom hash function [" + pre20HashFunctionName + "]", e);
}
}
} else {
pre20HashFunction = DjbHashFunction.class;

View File

@ -19,17 +19,7 @@
package org.elasticsearch.common;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.bootstrap.Elasticsearch;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.settings.NoClassSettingsException;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Locale;
import static org.elasticsearch.common.Strings.toCamelCase;
/**
*
@ -41,34 +31,6 @@ public class Classes {
*/
private static final char PACKAGE_SEPARATOR = '.';
/**
* Return the default ClassLoader to use: typically the thread context
* ClassLoader, if available; the ClassLoader that loaded the ClassUtils
* class will be used as fallback.
* <p/>
* <p>Call this method if you intend to use the thread context ClassLoader
* in a scenario where you absolutely need a non-null ClassLoader reference:
* for example, for class path resource loading (but not necessarily for
* <code>Class.forName</code>, which accepts a <code>null</code> ClassLoader
* reference as well).
*
* @return the default ClassLoader (never <code>null</code>)
* @see java.lang.Thread#getContextClassLoader()
*/
public static ClassLoader getDefaultClassLoader() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (Throwable ex) {
// Cannot access thread context ClassLoader - falling back to system class loader...
}
if (cl == null) {
// No thread context class loader -> use class loader of this class.
cl = Classes.class.getClassLoader();
}
return cl;
}
/**
* Determine the name of the package of the given class:
* e.g. "java.lang" for the <code>java.lang.String</code> class.
@ -93,13 +55,5 @@ public class Classes {
return !clazz.isInterface() && !Modifier.isAbstract(modifiers);
}
public static <T> Class<? extends T> loadClass(ClassLoader classLoader, String className) {
try {
return (Class<? extends T>) classLoader.loadClass(className);
} catch (ClassNotFoundException|NoClassDefFoundError e) {
throw new ElasticsearchException("failed to load class [" + className + "]", e);
}
}
private Classes() {}
}

View File

@ -31,7 +31,7 @@ public class ShapesAvailability {
static {
boolean xSPATIAL4J_AVAILABLE;
try {
Classes.getDefaultClassLoader().loadClass("com.spatial4j.core.shape.impl.PointImpl");
Class.forName("com.spatial4j.core.shape.impl.PointImpl");
xSPATIAL4J_AVAILABLE = true;
} catch (Throwable t) {
xSPATIAL4J_AVAILABLE = false;
@ -40,7 +40,7 @@ public class ShapesAvailability {
boolean xJTS_AVAILABLE;
try {
Classes.getDefaultClassLoader().loadClass("com.vividsolutions.jts.geom.GeometryFactory");
Class.forName("com.vividsolutions.jts.geom.GeometryFactory");
xJTS_AVAILABLE = true;
} catch (Throwable t) {
xJTS_AVAILABLE = false;

View File

@ -30,10 +30,6 @@ import java.lang.reflect.Constructor;
*/
public class Modules {
public static Module createModule(String moduleClass, Settings settings) throws ClassNotFoundException {
return createModule((Class<? extends Module>) settings.getClassLoader().loadClass(moduleClass), settings);
}
public static Module createModule(Class<? extends Module> moduleClass, @Nullable Settings settings) {
Constructor<? extends Module> constructor;
try {

View File

@ -81,7 +81,7 @@ public final class Settings implements ToXContent {
private final ImmutableMap<String, String> forcedUnderscoreSettings;
private transient ClassLoader classLoader;
Settings(Map<String, String> settings, ClassLoader classLoader) {
Settings(Map<String, String> settings) {
// we use a sorted map for consistent serialization when using getAsMap()
// TODO: use Collections.unmodifiableMap with a TreeMap
this.settings = ImmutableSortedMap.copyOf(settings);
@ -96,7 +96,6 @@ public final class Settings implements ToXContent {
}
}
this.forcedUnderscoreSettings = forcedUnderscoreSettings == null ? ImmutableMap.<String, String>of() : ImmutableMap.copyOf(forcedUnderscoreSettings);
this.classLoader = classLoader;
}
/**
@ -648,7 +647,7 @@ public final class Settings implements ToXContent {
}
Map<String, Settings> retVal = new LinkedHashMap<>();
for (Map.Entry<String, Map<String, String>> entry : map.entrySet()) {
retVal.put(entry.getKey(), new Settings(Collections.unmodifiableMap(entry.getValue()), classLoader));
retVal.put(entry.getKey(), new Settings(Collections.unmodifiableMap(entry.getValue())));
}
return Collections.unmodifiableMap(retVal);
}
@ -1118,23 +1117,6 @@ public final class Settings implements ToXContent {
return this;
}
/**
* Loads settings from classpath that represents them using the
* {@link SettingsLoaderFactory#loaderFromSource(String)}.
*/
public Builder loadFromClasspath(String resourceName) throws SettingsException {
ClassLoader classLoader = this.classLoader;
if (classLoader == null) {
classLoader = Classes.getDefaultClassLoader();
}
InputStream is = classLoader.getResourceAsStream(resourceName);
if (is == null) {
throw new SettingsException("Failed to load settings from [" + resourceName + "]");
}
return loadFromStream(resourceName, is);
}
/**
* Sets the class loader associated with the settings built.
*/
@ -1270,7 +1252,7 @@ public final class Settings implements ToXContent {
* set on this builder.
*/
public Settings build() {
return new Settings(Collections.unmodifiableMap(map), classLoader);
return new Settings(Collections.unmodifiableMap(map));
}
}

View File

@ -319,13 +319,14 @@ public class Environment {
}
}
// try and load it from the classpath directly
URL resource = settings.getClassLoader().getResource(path);
// TODO: remove this, users can look up their own config on classpath
URL resource = getClass().getResource(path);
if (resource != null) {
return resource;
}
// try and load it from the classpath with config/ prefix
if (!path.startsWith("config/")) {
resource = settings.getClassLoader().getResource("config/" + path);
resource = getClass().getResource("config/" + path);
if (resource != null) {
return resource;
}

View File

@ -300,7 +300,6 @@ public class IndicesService extends AbstractLifecycleComponent<IndicesService> i
Settings indexSettings = settingsBuilder()
.put(this.settings)
.put(settings)
.classLoader(settings.getClassLoader())
.build();
ModulesBuilder modules = new ModulesBuilder();

View File

@ -79,21 +79,21 @@ public class ScriptModule extends AbstractModule {
multibinder.addBinding().to(NativeScriptEngineService.class);
try {
settings.getClassLoader().loadClass("groovy.lang.GroovyClassLoader");
Class.forName("groovy.lang.GroovyClassLoader");
multibinder.addBinding().to(GroovyScriptEngineService.class).asEagerSingleton();
} catch (Throwable t) {
Loggers.getLogger(ScriptService.class, settings).debug("failed to load groovy", t);
}
try {
settings.getClassLoader().loadClass("com.github.mustachejava.Mustache");
Class.forName("com.github.mustachejava.Mustache");
multibinder.addBinding().to(MustacheScriptEngineService.class).asEagerSingleton();
} catch (Throwable t) {
Loggers.getLogger(ScriptService.class, settings).debug("failed to load mustache", t);
}
try {
settings.getClassLoader().loadClass("org.apache.lucene.expressions.Expression");
Class.forName("org.apache.lucene.expressions.Expression");
multibinder.addBinding().to(ExpressionScriptEngineService.class).asEagerSingleton();
} catch (Throwable t) {
Loggers.getLogger(ScriptService.class, settings).debug("failed to load lucene expressions", t);

View File

@ -70,7 +70,7 @@ public class GroovyScriptEngineService extends AbstractComponent implements Scri
config.addCompilationCustomizers(imports);
// Add BigDecimal -> Double transformer
config.addCompilationCustomizers(new GroovyBigDecimalTransformer(CompilePhase.CONVERSION));
this.loader = new GroovyClassLoader(settings.getClassLoader(), config);
this.loader = new GroovyClassLoader(getClass().getClassLoader(), config);
}
@Override

View File

@ -34,8 +34,9 @@ public class JsonSettingsLoaderTests extends ESTestCase {
@Test
public void testSimpleJsonSettings() throws Exception {
String json = "org/elasticsearch/common/settings/loader/test-settings.json";
Settings settings = settingsBuilder()
.loadFromClasspath("org/elasticsearch/common/settings/loader/test-settings.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.build();
assertThat(settings.get("test1.value1"), equalTo("value1"));

View File

@ -34,8 +34,9 @@ public class YamlSettingsLoaderTests extends ESTestCase {
@Test
public void testSimpleYamlSettings() throws Exception {
String yaml = "org/elasticsearch/common/settings/loader/test-settings.yml";
Settings settings = settingsBuilder()
.loadFromClasspath("org/elasticsearch/common/settings/loader/test-settings.yml")
.loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.build();
assertThat(settings.get("test1.value1"), equalTo("value1"));
@ -52,28 +53,17 @@ public class YamlSettingsLoaderTests extends ESTestCase {
@Test(expected = SettingsException.class)
public void testIndentation() {
String yaml = "org/elasticsearch/common/settings/loader/indentation-settings.yml";
settingsBuilder()
.loadFromClasspath("org/elasticsearch/common/settings/loader/indentation-settings.yml")
.build();
.loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.build();
}
@Test(expected = SettingsException.class)
public void testIndentationWithExplicitDocumentStart() {
String yaml = "org/elasticsearch/common/settings/loader/indentation-with-explicit-document-start-settings.yml";
settingsBuilder()
.loadFromClasspath("org/elasticsearch/common/settings/loader/indentation-with-explicit-document-start-settings.yml")
.loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.build();
}
@Test
public void testYamlSettingsNoFile() throws Exception {
String invalidResourceName = "org/elasticsearch/common/settings/loader/no-test-settings.yml";
try {
Settings defaultSettings = settingsBuilder().loadFromClasspath(invalidResourceName).build();
fail("For a not exiting file an exception should be thrown.");
} catch (Exception e) {
assertTrue(e instanceof SettingsException);
assertThat(e.getMessage(), equalTo("Failed to load settings from [" + invalidResourceName + "]"));
}
}
}

View File

@ -79,7 +79,7 @@ public class AnalysisModuleTests extends ESTestCase {
}
private Settings loadFromClasspath(String path) {
return settingsBuilder().loadFromClasspath(path)
return settingsBuilder().loadFromStream(path, getClass().getResourceAsStream(path))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", createTempDir().toString())
.build();
@ -107,8 +107,9 @@ public class AnalysisModuleTests extends ESTestCase {
@Test
public void testVersionedAnalyzers() throws Exception {
String yaml = "org/elasticsearch/index/analysis/test1.yml";
Settings settings2 = settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/test1.yml")
.loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.put("path.home", createTempDir().toString())
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_0_90_0)
.build();

View File

@ -39,7 +39,7 @@ public class AnalysisTestsHelper {
public static AnalysisService createAnalysisServiceFromClassPath(Path baseDir, String resource) {
Settings settings = Settings.settingsBuilder()
.loadFromClasspath(resource)
.loadFromStream(resource, AnalysisTestsHelper.class.getResourceAsStream(resource))
.put("path.home", baseDir.toString())
.build();

View File

@ -115,16 +115,18 @@ public class CompoundAnalysisTests extends ESTestCase {
}
private Settings getJsonSettings() {
String json = "org/elasticsearch/index/analysis/test1.json";
return settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/test1.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", createTempDir().toString())
.build();
}
private Settings getYamlSettings() {
String yaml = "org/elasticsearch/index/analysis/test1.yml";
return settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/test1.yml")
.loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", createTempDir().toString())
.build();

View File

@ -41,10 +41,11 @@ public class PatternCaptureTokenFilterTests extends ESTokenStreamTestCase {
@Test
public void testPatternCaptureTokenFilter() throws Exception {
String json = "org/elasticsearch/index/analysis/pattern_capture.json";
Index index = new Index("test");
Settings settings = settingsBuilder()
.put("path.home", createTempDir())
.loadFromClasspath("org/elasticsearch/index/analysis/pattern_capture.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.build();
Injector parentInjector = new ModulesBuilder().add(new SettingsModule(settings), new EnvironmentModule(new Environment(settings)), new IndicesAnalysisModule()).createInjector();

View File

@ -41,9 +41,10 @@ public class StopAnalyzerTests extends ESTokenStreamTestCase {
@Test
public void testDefaultsCompoundAnalysis() throws Exception {
String json = "org/elasticsearch/index/analysis/stop.json";
Index index = new Index("test");
Settings settings = settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/stop.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put("path.home", createTempDir().toString())
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.build();

View File

@ -134,8 +134,9 @@ public class CommonGramsTokenFilterFactoryTests extends ESTokenStreamTestCase {
@Test
public void testCommonGramsAnalysis() throws IOException {
String json = "org/elasticsearch/index/analysis/commongrams/commongrams.json";
Settings settings = Settings.settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/commongrams/commongrams.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put("path.home", createTempDir().toString())
.build();
{
@ -218,8 +219,9 @@ public class CommonGramsTokenFilterFactoryTests extends ESTokenStreamTestCase {
@Test
public void testQueryModeCommonGramsAnalysis() throws IOException {
String json = "org/elasticsearch/index/analysis/commongrams/commongrams_query_mode.json";
Settings settings = Settings.settingsBuilder()
.loadFromClasspath("org/elasticsearch/index/analysis/commongrams/commongrams_query_mode.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put("path.home", createTempDir().toString())
.build();
{

View File

@ -59,8 +59,9 @@ public class SynonymsAnalysisTest extends ESTestCase {
@Test
public void testSynonymsAnalysis() throws IOException {
String json = "org/elasticsearch/index/analysis/synonyms/synonyms.json";
Settings settings = settingsBuilder().
loadFromClasspath("org/elasticsearch/index/analysis/synonyms/synonyms.json")
loadFromStream(json, getClass().getResourceAsStream(json))
.put("path.home", createTempDir().toString())
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT).build();

View File

@ -191,9 +191,10 @@ public class KuromojiAnalysisTests extends ESTestCase {
public AnalysisService createAnalysisService() {
String json = "org/elasticsearch/index/analysis/kuromoji_analysis.json";
Settings settings = Settings.settingsBuilder()
.put("path.home", createTempDir())
.loadFromClasspath("org/elasticsearch/index/analysis/kuromoji_analysis.json")
.loadFromStream(json, getClass().getResourceAsStream(json))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.build();

View File

@ -45,7 +45,8 @@ public class SimplePhoneticAnalysisTests extends ESTestCase {
@Test
public void testPhoneticTokenFilterFactory() {
Settings settings = settingsBuilder().loadFromClasspath("org/elasticsearch/index/analysis/phonetic-1.yml")
String yaml = "org/elasticsearch/index/analysis/phonetic-1.yml"
Settings settings = settingsBuilder().loadFromStream(yaml, getClass().getResourceAsStream(yaml))
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put("path.home", createTempDir())
.build();