17
17
import org .elasticsearch .env .Environment ;
18
18
import org .elasticsearch .env .TestEnvironment ;
19
19
import org .elasticsearch .index .IndexModule ;
20
+ import org .elasticsearch .plugin .analysis .api .CharFilterFactory ;
21
+ import org .elasticsearch .plugins .scanners .PluginInfo ;
20
22
import org .elasticsearch .plugins .spi .BarPlugin ;
21
23
import org .elasticsearch .plugins .spi .BarTestService ;
22
24
import org .elasticsearch .plugins .spi .TestService ;
@@ -823,6 +825,23 @@ public Reader create(Reader reader) {
823
825
assertThat (pluginInfos .get (0 ).descriptor ().getName (), equalTo ("stable-plugin" ));
824
826
assertThat (pluginInfos .get (0 ).descriptor ().isStable (), is (true ));
825
827
828
+ // check ubermodule classloader usage
829
+ Collection <PluginInfo > stablePluginInfos = pluginService .getStablePluginRegistry ()
830
+ .getPluginInfosForExtensible ("org.elasticsearch.plugin.analysis.api.CharFilterFactory" );
831
+ assertThat (stablePluginInfos , hasSize (1 ));
832
+ ClassLoader stablePluginClassLoader = stablePluginInfos .stream ().findFirst ().orElseThrow ().loader ();
833
+ assertThat (stablePluginClassLoader , instanceOf (UberModuleClassLoader .class ));
834
+
835
+ if (CharFilterFactory .class .getModule ().isNamed () == false ) {
836
+ // test frameworks run with stable api classes on classpath, so we
837
+ // have no choice but to let our class read the unnamed module that
838
+ // owns the stable api classes
839
+ ((UberModuleClassLoader ) stablePluginClassLoader ).addReadsSystemClassLoaderUnnamedModule ();
840
+ }
841
+
842
+ Class <?> stableClass = stablePluginClassLoader .loadClass ("p.A" );
843
+ assertThat (stableClass .getModule ().getName (), equalTo ("synthetic.stable.plugin" ));
844
+
826
845
// TODO should we add something to pluginInfos.get(0).pluginApiInfo() ?
827
846
} finally {
828
847
closePluginLoaders (pluginService );
@@ -838,6 +857,20 @@ public void testCanCreateAClassLoader() {
838
857
assertEquals (this .getClass ().getClassLoader (), loader .getParent ());
839
858
}
840
859
860
+ public void testToModuleName () {
861
+ assertThat (PluginsService .toModuleName ("module.name" ), equalTo ("module.name" ));
862
+ assertThat (PluginsService .toModuleName ("module-name" ), equalTo ("module.name" ));
863
+ assertThat (PluginsService .toModuleName ("module-name1" ), equalTo ("module.name1" ));
864
+ assertThat (PluginsService .toModuleName ("1module-name" ), equalTo ("module.name" ));
865
+ assertThat (PluginsService .toModuleName ("module-name!" ), equalTo ("module.name" ));
866
+ assertThat (PluginsService .toModuleName ("module!@#name!" ), equalTo ("module.name" ));
867
+ assertThat (PluginsService .toModuleName ("!module-name!" ), equalTo ("module.name" ));
868
+ assertThat (PluginsService .toModuleName ("module_name" ), equalTo ("module_name" ));
869
+ assertThat (PluginsService .toModuleName ("-module-name-" ), equalTo ("module.name" ));
870
+ assertThat (PluginsService .toModuleName ("_module_name" ), equalTo ("_module_name" ));
871
+ assertThat (PluginsService .toModuleName ("_" ), equalTo ("_" ));
872
+ }
873
+
841
874
static final class Loader extends ClassLoader {
842
875
Loader (ClassLoader parent ) {
843
876
super (parent );
0 commit comments