You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ju...@apache.org on 2022/03/11 18:48:00 UTC

[lucene] branch branch_9_1 updated: LUCENE-10459: Update smoke tester for 9.1 (#744)

This is an automated email from the ASF dual-hosted git repository.

julietibs pushed a commit to branch branch_9_1
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/branch_9_1 by this push:
     new a3a058d  LUCENE-10459: Update smoke tester for 9.1 (#744)
a3a058d is described below

commit a3a058de6d7e8208cd988d3394b6562ee22928c6
Author: Dawid Weiss <da...@carrotsearch.com>
AuthorDate: Fri Mar 11 19:22:17 2022 +0100

    LUCENE-10459: Update smoke tester for 9.1 (#744)
    
    Add demo dependencies to third party modules. Add an IT that checks whether
    demo classes are loadable.
    
    Co-authored-by: Tomoko Uchida <to...@gmail.com>
    Co-authored-by: Julie Tibshirani <ju...@apache.org>
---
 dev-tools/scripts/smokeTestRelease.py              | 12 ++--
 .../lucene/distribution/TestModularLayer.java      | 67 +++++++++++++++++-----
 lucene/distribution/binary-release.gradle          |  8 ++-
 3 files changed, 64 insertions(+), 23 deletions(-)

diff --git a/dev-tools/scripts/smokeTestRelease.py b/dev-tools/scripts/smokeTestRelease.py
index 6d985bf..4d558df 100755
--- a/dev-tools/scripts/smokeTestRelease.py
+++ b/dev-tools/scripts/smokeTestRelease.py
@@ -574,10 +574,10 @@ def verifyUnpacked(java, artifact, unpackPath, gitRevision, version, testArgs):
   #       raise RuntimeError('lucene: file "%s" is missing from artifact %s' % (fileName, artifact))
   #     in_root_folder.remove(fileName)
 
-  expected_folders = ['analysis', 'backward-codecs', 'benchmark', 'classification', 'codecs', 'core',
-                      'demo', 'expressions', 'facet', 'grouping', 'highlighter', 'join',
+  expected_folders = ['analysis', 'analysis.tests', 'backward-codecs', 'benchmark', 'classification', 'codecs', 'core', 'core.tests',
+                      'distribution.tests', 'demo', 'expressions', 'facet', 'grouping', 'highlighter', 'join',
                       'luke', 'memory', 'misc', 'monitor', 'queries', 'queryparser', 'replicator',
-                      'sandbox', 'spatial-extras', 'spatial3d', 'suggest', 'test-framework', 'licenses']
+                      'sandbox', 'spatial-extras', 'spatial-test-fixtures', 'spatial3d', 'suggest', 'test-framework', 'licenses']
   if isSrc:
     expected_src_root_files = ['build.gradle', 'buildSrc', 'dev-docs', 'dev-tools', 'gradle', 'gradlew',
                                'gradlew.bat', 'help', 'lucene', 'settings.gradle', 'versions.lock', 'versions.props']
@@ -588,7 +588,7 @@ def verifyUnpacked(java, artifact, unpackPath, gitRevision, version, testArgs):
     if len(in_lucene_folder) > 0:
       raise RuntimeError('lucene: unexpected files/dirs in artifact %s lucene/ folder: %s' % (artifact, in_lucene_folder))
   else:
-    is_in_list(in_root_folder, ['bin', 'docs', 'licenses', 'modules', 'modules-thirdparty'])
+    is_in_list(in_root_folder, ['bin', 'docs', 'licenses', 'modules', 'modules-thirdparty', 'modules-test-framework'])
 
   if len(in_root_folder) > 0:
     raise RuntimeError('lucene: unexpected files/dirs in artifact %s: %s' % (artifact, in_root_folder))
@@ -657,8 +657,8 @@ def testDemo(run_java, isSrc, version, jdk):
     indexFilesCmd = 'java -cp "%s" -Dsmoketester=true org.apache.lucene.demo.IndexFiles -index index -docs %s' % (cp, docsDir)
     searchFilesCmd = 'java -cp "%s" org.apache.lucene.demo.SearchFiles -index index -query lucene' % cp
   else:
-    # For binary release, set up classpath as modules.
-    cp = "--module-path modules"
+    # For binary release, set up module path.
+    cp = "--module-path %s" % (sep.join(["modules", "modules-thirdparty"]))
     docsDir = 'docs'
     checkIndexCmd = 'java -ea %s --module org.apache.lucene.core/org.apache.lucene.index.CheckIndex index' % cp
     indexFilesCmd = 'java -Dsmoketester=true %s --module org.apache.lucene.demo/org.apache.lucene.demo.IndexFiles -index index -docs %s' % (cp, docsDir)
diff --git a/lucene/distribution.tests/src/test/org/apache/lucene/distribution/TestModularLayer.java b/lucene/distribution.tests/src/test/org/apache/lucene/distribution/TestModularLayer.java
index 72be33d..461a637 100644
--- a/lucene/distribution.tests/src/test/org/apache/lucene/distribution/TestModularLayer.java
+++ b/lucene/distribution.tests/src/test/org/apache/lucene/distribution/TestModularLayer.java
@@ -18,6 +18,7 @@ package org.apache.lucene.distribution;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.module.Configuration;
 import java.lang.module.ModuleDescriptor;
 import java.lang.module.ModuleFinder;
 import java.lang.module.ModuleReader;
@@ -52,11 +53,14 @@ import org.junit.Test;
  * JUnit, for example).
  */
 public class TestModularLayer extends AbstractLuceneDistributionTest {
-  /** Only core Lucene modules, no third party modules. */
-  private static Set<ModuleReference> allCoreModules;
+  /** All Lucene modules (including the test framework), no third party modules. */
+  private static Set<ModuleReference> allLuceneModules;
 
-  /** {@link ModuleFinder} resolving only the Lucene modules. */
-  private static ModuleFinder coreModulesFinder;
+  /** {@link ModuleFinder} resolving only the core Lucene modules. */
+  private static ModuleFinder allLuceneModulesFinder;
+
+  /** {@link ModuleFinder} resolving Lucene core and third party dependencies. */
+  private static ModuleFinder luceneCoreAndThirdPartyModulesFinder;
 
   /**
    * We accept external properties that point to the assembled set of distribution modules and to
@@ -94,21 +98,24 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
               + thirdPartyModulesPath.toAbsolutePath());
     }
 
-    coreModulesFinder = ModuleFinder.of(modulesPath, testModulesPath);
-    allCoreModules = coreModulesFinder.findAll();
+    allLuceneModulesFinder = ModuleFinder.of(modulesPath, testModulesPath);
+    allLuceneModules = allLuceneModulesFinder.findAll();
+
+    luceneCoreAndThirdPartyModulesFinder = ModuleFinder.of(modulesPath, thirdPartyModulesPath);
   }
 
   @AfterClass
   public static void cleanup() {
-    allCoreModules = null;
-    coreModulesFinder = null;
+    allLuceneModules = null;
+    luceneCoreAndThirdPartyModulesFinder = null;
+    allLuceneModulesFinder = null;
   }
 
   /** Make sure all published module names remain constant, even if we reorganize the build. */
   @Test
   public void testExpectedDistributionModuleNames() {
     Assertions.assertThat(
-            allCoreModules.stream().map(module -> module.descriptor().name()).sorted())
+            allLuceneModules.stream().map(module -> module.descriptor().name()).sorted())
         .containsExactly(
             "org.apache.lucene.analysis.common",
             "org.apache.lucene.analysis.icu",
@@ -144,10 +151,42 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
             "org.apache.lucene.test_framework");
   }
 
+  /** Try to instantiate the demo classes so that we make sure their module layer is complete. */
+  @Test
+  public void testDemoClassesCanBeLoaded() {
+    ModuleLayer bootLayer = ModuleLayer.boot();
+    Assertions.assertThatNoException()
+        .isThrownBy(
+            () -> {
+              String demoModuleId = "org.apache.lucene.demo";
+
+              Configuration configuration =
+                  bootLayer
+                      .configuration()
+                      .resolve(
+                          luceneCoreAndThirdPartyModulesFinder,
+                          ModuleFinder.of(),
+                          List.of(demoModuleId));
+
+              ModuleLayer layer =
+                  bootLayer.defineModulesWithOneLoader(
+                      configuration, ClassLoader.getSystemClassLoader());
+
+              for (String className :
+                  List.of(
+                      "org.apache.lucene.demo.IndexFiles",
+                      "org.apache.lucene.demo.SearchFiles",
+                      "org.apache.lucene.index.CheckIndex")) {
+                Assertions.assertThat(layer.findLoader(demoModuleId).loadClass(className))
+                    .isNotNull();
+              }
+            });
+  }
+
   /** Make sure we don't publish automatic modules. */
   @Test
   public void testAllCoreModulesAreNamedModules() {
-    Assertions.assertThat(allCoreModules)
+    Assertions.assertThat(allLuceneModules)
         .allSatisfy(
             module -> {
               Assertions.assertThat(module.descriptor().isAutomatic())
@@ -161,7 +200,7 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
   public void testAllModulesHaveExpectedVersion() {
     String luceneBuildVersion = System.getProperty(VERSION_PROPERTY);
     Assumptions.assumeThat(luceneBuildVersion).isNotNull();
-    for (var module : allCoreModules) {
+    for (var module : allLuceneModules) {
       Assertions.assertThat(module.descriptor().rawVersion().orElse(null))
           .as("Version of module: " + module.descriptor().name())
           .isEqualTo(luceneBuildVersion);
@@ -171,7 +210,7 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
   /** Ensure SPIs are equal for the module and classpath layer. */
   @Test
   public void testModularAndClasspathProvidersAreConsistent() throws IOException {
-    for (var module : allCoreModules) {
+    for (var module : allLuceneModules) {
       TreeMap<String, TreeSet<String>> modularProviders = getModularServiceProviders(module);
       TreeMap<String, TreeSet<String>> classpathProviders = getClasspathServiceProviders(module);
 
@@ -248,7 +287,7 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
    */
   @Test
   public void testAllExportedPackagesInSync() throws IOException {
-    for (var module : allCoreModules) {
+    for (var module : allLuceneModules) {
       Set<String> jarPackages = getJarPackages(module, entry -> true);
       Set<ModuleDescriptor.Exports> moduleExports = new HashSet<>(module.descriptor().exports());
 
@@ -295,7 +334,7 @@ public class TestModularLayer extends AbstractLuceneDistributionTest {
   /** This test ensures that all analysis modules open their resources files to core. */
   @Test
   public void testAllOpenAnalysisPackagesInSync() throws IOException {
-    for (var module : allCoreModules) {
+    for (var module : allLuceneModules) {
       if (false == module.descriptor().name().startsWith("org.apache.lucene.analysis.")) {
         continue; // at moment we only want to open resources inside analysis packages
       }
diff --git a/lucene/distribution/binary-release.gradle b/lucene/distribution/binary-release.gradle
index 04c868e..5c03ac3 100644
--- a/lucene/distribution/binary-release.gradle
+++ b/lucene/distribution/binary-release.gradle
@@ -53,10 +53,12 @@ configure(project(":lucene:distribution")) {
       transitive = false
     })
 
-    // The third-party JARs consist of all the transitive dependencies from these modules.
-    // Not sure whether we have to include all the thirdparty JARs from across all the modules.
+    // The third-party JARs consist of all the transitive dependencies from a subset of
+    // all Lucene modules. We only include the demos and Luke. Everything else has to be downloaded
+    // manually or via maven POMs.
     for (Project module : [
-        project(":lucene:luke")
+        project(":lucene:luke"),
+        project(":lucene:demo")
     ]) {
       jarsThirdParty(module, {
         transitive = true