You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ja...@apache.org on 2023/09/21 17:47:07 UTC
[solr] branch branch_9x updated: SOLR-16979: Randomize port number of Solr in BATS tests (#1946)
This is an automated email from the ASF dual-hosted git repository.
janhoy pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new fb32cc28835 SOLR-16979: Randomize port number of Solr in BATS tests (#1946)
fb32cc28835 is described below
commit fb32cc28835e42c128c53f8edc547dd681ad70ea
Author: Jan Høydahl <ja...@users.noreply.github.com>
AuthorDate: Thu Sep 21 19:47:01 2023 +0200
SOLR-16979: Randomize port number of Solr in BATS tests (#1946)
(cherry picked from commit 7eda6a1d32f42e4052351a83670c636b983b561c)
---
solr/CHANGES.txt | 2 +
.../java/org/apache/solr/cli/RunExampleTool.java | 11 ++++-
solr/packaging/build.gradle | 17 ++++++-
solr/packaging/test/README.md | 5 +-
solr/packaging/test/bats_helper.bash | 10 ++--
solr/packaging/test/test_example_noprompt.bats | 3 +-
solr/packaging/test/test_export.bats | 16 +++----
solr/packaging/test/test_extraction.bats | 18 ++++----
solr/packaging/test/test_modules.bats | 4 +-
solr/packaging/test/test_packages.bats | 2 +-
solr/packaging/test/test_placement_plugin.bats | 4 +-
solr/packaging/test/test_post.bats | 36 +++++++--------
solr/packaging/test/test_postlogs.bats | 8 ++--
solr/packaging/test/test_security_manager.bats | 4 +-
solr/packaging/test/test_ssl.bats | 54 +++++++++++-----------
solr/packaging/test/test_start_solr.bats | 18 ++++----
solr/packaging/test/test_status.bats | 2 +-
solr/packaging/test/test_zk.bats | 18 ++++----
..._example_noprompt.bats => test_zz_cleanup.bats} | 19 ++++----
19 files changed, 143 insertions(+), 108 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 8138ad6fc00..1b73db489df 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -160,6 +160,8 @@ Other Changes
* SOLR-16623: new SolrJettyTestRule for tests needing HTTP or Jetty. (David Smiley, Joshua Ouma)
+* SOLR-16979: BATS integration tests now start solr instances on a randomly selected port (janhoy)
+
* SOLR-16978: Be case insensitive when parsing booleans from text (Tomás Fernández Löbbe)
================== 9.3.0 ==================
diff --git a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
index 47dfaf30d6f..4cc5cd25647 100644
--- a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java
@@ -248,7 +248,9 @@ public class RunExampleTool extends ToolBase {
boolean isCloudMode = cli.hasOption('c');
String zkHost = cli.getOptionValue('z');
- int port = Integer.parseInt(cli.getOptionValue('p', "8983"));
+ int port =
+ Integer.parseInt(
+ cli.getOptionValue('p', System.getenv().getOrDefault("SOLR_PORT", "8983")));
Map<String, Object> nodeStatus =
startSolr(new File(exDir, "solr"), isCloudMode, cli, port, zkHost, 30);
@@ -425,6 +427,13 @@ public class RunExampleTool extends ToolBase {
boolean prompt = !cli.hasOption("noprompt");
int numNodes = 2;
int[] cloudPorts = new int[] {8983, 7574, 8984, 7575};
+ int defaultPort =
+ Integer.parseInt(
+ cli.getOptionValue('p', System.getenv().getOrDefault("SOLR_PORT", "8983")));
+ if (defaultPort != 8983) {
+ // Override the old default port numbers if user has started the example overriding SOLR_PORT
+ cloudPorts = new int[] {defaultPort, defaultPort + 1, defaultPort + 2, defaultPort + 3};
+ }
File cloudDir = new File(exampleDir, "cloud");
if (!cloudDir.isDirectory()) cloudDir.mkdir();
diff --git a/solr/packaging/build.gradle b/solr/packaging/build.gradle
index aa366eaafd6..b028155985c 100644
--- a/solr/packaging/build.gradle
+++ b/solr/packaging/build.gradle
@@ -238,6 +238,15 @@ task integrationTests(type: BatsTask) {
def integrationTestOutput = "$buildDir/test-output"
def solrHome = "$integrationTestOutput/solr-home"
def solrTestFailuresDir = "$integrationTestOutput/failure-snapshots"
+ var solrPort = Integer.parseInt((String) project.findProperty('bats.port') ?: System.getProperty("bats.port", "-1"))
+ while (solrPort > 64000 || solrPort < 0) { // We need room for +1000 for ZK
+ try (ServerSocket s = new ServerSocket(0)) {
+ solrPort = s.getLocalPort()
+ } catch (Exception e) {
+ println("WARN: Could not assign random port for Bats tests. Using default port 8983.")
+ solrPort = 8983
+ }
+ }
inputs.dir(distDir)
outputs.dir(integrationTestOutput)
@@ -250,11 +259,16 @@ task integrationTests(type: BatsTask) {
// TODO - if quiet then don't tee
standardOutput = new TeeOutputStream(System.out, new FileOutputStream("$integrationTestOutput/test-output.txt"))
-
+ println("Running BATS tests with Solr base port ${solrPort}")
}
environment SOLR_TIP: distDir.toString()
environment SOLR_HOME: solrHome
+ environment SOLR_PID_DIR: solrHome
+ environment SOLR_PORT: solrPort
+ environment SOLR2_PORT: solrPort + 1
+ environment SOLR3_PORT: solrPort + 2
+ environment ZK_PORT: solrPort + 1000
environment SOLR_LOGS_DIR: "$solrHome/logs"
environment TEST_OUTPUT_DIR: integrationTestOutput
environment TEST_FAILURE_DIR: solrTestFailuresDir
@@ -283,6 +297,7 @@ class BatsTask extends Exec {
// Additional debugging output: -x, --verbose-run
setArgs(['-T', '--print-output-on-failure'] + (testFiles.empty ? testDir : testFiles))
+
super.exec()
}
}
diff --git a/solr/packaging/test/README.md b/solr/packaging/test/README.md
index 93599e3b3fe..bd73d494589 100644
--- a/solr/packaging/test/README.md
+++ b/solr/packaging/test/README.md
@@ -31,8 +31,9 @@ Individual test files can be selected by specifying the `--tests [test_file.bats
The `--tests` option may be repeated to select multiple test files to run.
Wildcarding or specifying individual test methods is currently not supported.
-Tests do not currently randomize ports or directories, so they cannot be run
- in parallel. They may also fail if you already have an external cluster up.
+Tests run Solr on a randomly assigned port number, so these tests should be able to run even if you have Solr
+running on the host already. To force tests to start Solr on a specific port, set the `bats.port` gradle
+property or system property, e.g. `./gradlew integrationTests -Pbats.port=8983`.
## Writing Tests
diff --git a/solr/packaging/test/bats_helper.bash b/solr/packaging/test/bats_helper.bash
index d3bd00b3c0f..56c743c8fb2 100644
--- a/solr/packaging/test/bats_helper.bash
+++ b/solr/packaging/test/bats_helper.bash
@@ -58,8 +58,12 @@ save_home_on_failure() {
fi
}
+shutdown_all() {
+ solr stop -all >/dev/null 2>&1
+}
+
delete_all_collections() {
- local collection_list="$(solr zk ls /collections -z localhost:9983)"
+ local collection_list="$(solr zk ls /collections -z localhost:${ZK_PORT})"
for collection in $collection_list; do
if [[ -n $collection ]]; then
solr delete -c $collection >/dev/null 2>&1
@@ -69,7 +73,7 @@ delete_all_collections() {
config_exists() {
local config_name=$1
- local config_list=$(solr zk ls /configs -z localhost:9983)
+ local config_list=$(solr zk ls /configs -z localhost:${ZK_PORT})
for config in $config_list; do
if [[ $(echo $config | tr -d " ") == $config_name ]]; then
@@ -82,7 +86,7 @@ config_exists() {
collection_exists() {
local coll_name=$1
- local coll_list=$(solr zk ls /collections -z localhost:9983)
+ local coll_list=$(solr zk ls /collections -z localhost:${ZK_PORT})
for coll in $coll_list; do
if [[ $(echo $coll | tr -d " ") == $coll_name ]]; then
diff --git a/solr/packaging/test/test_example_noprompt.bats b/solr/packaging/test/test_example_noprompt.bats
index 959cdd9d5bc..e683cb4f0a6 100644
--- a/solr/packaging/test/test_example_noprompt.bats
+++ b/solr/packaging/test/test_example_noprompt.bats
@@ -30,5 +30,6 @@ teardown() {
@test "SOLR-16755 test works with noprompt" {
solr start -e cloud -noprompt
- solr assert --started http://localhost:8983/solr --timeout 10000
+ solr assert --started http://localhost:${SOLR_PORT}/solr --timeout 10000
+ solr assert --started http://localhost:${SOLR2_PORT}/solr --timeout 10000
}
diff --git a/solr/packaging/test/test_export.bats b/solr/packaging/test/test_export.bats
index 699eba33911..206b2c96c01 100644
--- a/solr/packaging/test/test_export.bats
+++ b/solr/packaging/test/test_export.bats
@@ -30,32 +30,32 @@ teardown() {
@test "Check export command" {
run solr start -c -e techproducts
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output"
refute_output --partial 'Unrecognized option'
assert_output --partial 'Export complete'
assert [ -e ${BATS_TEST_TMPDIR}/output.json ]
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test"
assert [ -e techproducts.json ]
rm techproducts.json
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -format javabin
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -format javabin
assert [ -e techproducts.javabin ]
rm techproducts.javabin
# old pattern of putting a suffix on the out that controlled the format no longer supported ;-).
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output.javabin"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}/output.javabin"
assert [ -e ${BATS_TEST_TMPDIR}/output.javabin.json ]
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -out "${BATS_TEST_TMPDIR}"
assert [ -e ${BATS_TEST_TMPDIR}/techproducts.json ]
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -format jsonl -out "${BATS_TEST_TMPDIR}/output"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -format jsonl -out "${BATS_TEST_TMPDIR}/output"
assert [ -e ${BATS_TEST_TMPDIR}/output.jsonl ]
- run solr export -url "http://localhost:8983/solr/techproducts" -query "*:* -id:test" -limit 10 -compress -format jsonl -out "${BATS_TEST_TMPDIR}/output"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/techproducts" -query "*:* -id:test" -limit 10 -compress -format jsonl -out "${BATS_TEST_TMPDIR}/output"
assert [ -e ${BATS_TEST_TMPDIR}/output.jsonl.gz ]
assert_output --partial 'Total Docs exported: 10'
@@ -64,7 +64,7 @@ teardown() {
@test "export fails on non cloud mode" {
run solr start
run solr create_core -c COLL_NAME
- run solr export -url "http://localhost:8983/solr/COLL_NAME"
+ run solr export -url "http://localhost:${SOLR_PORT}/solr/COLL_NAME"
refute_output --partial 'Export complete'
assert_output --partial "ERROR: Couldn't initialize a HttpClusterStateProvider"
}
diff --git a/solr/packaging/test/test_extraction.bats b/solr/packaging/test/test_extraction.bats
index 875f4ca2e59..fa3f47e3085 100644
--- a/solr/packaging/test/test_extraction.bats
+++ b/solr/packaging/test/test_extraction.bats
@@ -47,11 +47,11 @@ teardown() {
"class": "solr.extraction.ExtractingRequestHandler",
"defaults":{ "lowernames": "true", "captureAttr":"true"}
}
- }' 'http://localhost:8983/solr/gettingstarted/config'
+ }' "http://localhost:${SOLR_PORT}/solr/gettingstarted/config"
- curl 'http://localhost:8983/solr/gettingstarted/update/extract?literal.id=doc1&commit=true' -F "myfile=@${SOLR_TIP}/example/exampledocs/solr-word.pdf"
+ curl "http://localhost:${SOLR_PORT}/solr/gettingstarted/update/extract?literal.id=doc1&commit=true" -F "myfile=@${SOLR_TIP}/example/exampledocs/solr-word.pdf"
- run curl 'http://localhost:8983/solr/gettingstarted/select?q=id:doc1'
+ run curl "http://localhost:${SOLR_PORT}/solr/gettingstarted/select?q=id:doc1"
assert_output --partial '"numFound":1'
}
@@ -70,15 +70,15 @@ teardown() {
"class": "solr.extraction.ExtractingRequestHandler",
"defaults":{ "lowernames": "true", "captureAttr":"true"}
}
- }' 'http://localhost:8983/solr/content_extraction/config'
+ }' "http://localhost:${SOLR_PORT}/solr/content_extraction/config"
# We filter to pdf to invoke the Extract handler.
- run solr post -filetypes pdf -commit -url http://localhost:8983/solr/content_extraction/update ${SOLR_TIP}/example/exampledocs
+ run solr post -filetypes pdf -commit -url http://localhost:${SOLR_PORT}/solr/content_extraction/update ${SOLR_TIP}/example/exampledocs
assert_output --partial '1 files indexed.'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/content_extraction/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/content_extraction/select?q=*:*"
assert_output --partial '"numFound":1'
}
@@ -97,14 +97,14 @@ teardown() {
"class": "solr.extraction.ExtractingRequestHandler",
"defaults":{ "lowernames": "true", "captureAttr":"true"}
}
- }' 'http://localhost:8983/solr/website_extraction/config'
+ }' "http://localhost:${SOLR_PORT}/solr/website_extraction/config"
# Change to -recursive 1 to crawl multiple pages, but may be too slow.
- run solr post -mode web -commit -url http://localhost:8983/solr/website_extraction/update -recursive 0 -delay 1 https://solr.apache.org/
+ run solr post -mode web -commit -url http://localhost:${SOLR_PORT}/solr/website_extraction/update -recursive 0 -delay 1 https://solr.apache.org/
assert_output --partial 'POSTed web resource https://solr.apache.org (depth: 0)'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/website_extraction/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/website_extraction/select?q=*:*"
assert_output --partial '"numFound":1'
}
diff --git a/solr/packaging/test/test_modules.bats b/solr/packaging/test/test_modules.bats
index ff6d88c8041..17ba8912661 100644
--- a/solr/packaging/test/test_modules.bats
+++ b/solr/packaging/test/test_modules.bats
@@ -32,7 +32,7 @@ teardown() {
@test "SQL Module" {
run solr start -c -Dsolr.modules=sql
run solr create_collection -c COLL_NAME
- run solr api -get http://localhost:8983/solr/COLL_NAME/sql?stmt=select+id+from+COLL_NAME+limit+10
+ run solr api -get http://localhost:${SOLR_PORT}/solr/COLL_NAME/sql?stmt=select+id+from+COLL_NAME+limit+10
assert_output --partial '"docs":'
assert_output --partial '"EOF":true'
assert_output --partial '"RESPONSE_TIME":'
@@ -52,7 +52,7 @@ teardown() {
-Dsolr.kerberos.cookie.domain=test
# Upload the custom security.json and wait for Solr to try to load it
- solr zk cp "${security_json}" zk:security.json -z localhost:9983
+ solr zk cp "${security_json}" zk:security.json -z localhost:${ZK_PORT}
sleep 1
run cat "${SOLR_LOGS_DIR}/solr.log"
diff --git a/solr/packaging/test/test_packages.bats b/solr/packaging/test/test_packages.bats
index 0396d91508f..d93e4bb464f 100644
--- a/solr/packaging/test/test_packages.bats
+++ b/solr/packaging/test/test_packages.bats
@@ -84,5 +84,5 @@ teardown() {
# run solr package deploy solr-splainer -y -cluster
# assert_output --partial "Deployment successful"
-# run -0 curl --fail http://localhost:8983/v2/splainer/index.html
+# run -0 curl --fail http://localhost:${SOLR_PORT}/v2/splainer/index.html
# }
diff --git a/solr/packaging/test/test_placement_plugin.bats b/solr/packaging/test/test_placement_plugin.bats
index 656c38e032d..965e5e73283 100644
--- a/solr/packaging/test/test_placement_plugin.bats
+++ b/solr/packaging/test/test_placement_plugin.bats
@@ -31,7 +31,7 @@ teardown() {
@test "Affinity placement plugin using sysprop" {
run solr start -c -Dsolr.placementplugin.default=affinity
- solr assert -c http://localhost:8983/solr -t 3000
+ solr assert -c http://localhost:${SOLR_PORT}/solr -t 3000
run solr create_collection -c COLL_NAME
collection_exists COLL_NAME
assert_file_contains "${SOLR_LOGS_DIR}/solr.log" 'Default replica placement plugin set in solr\.placementplugin\.default to affinity'
@@ -40,7 +40,7 @@ teardown() {
@test "Random placement plugin using ENV" {
export SOLR_PLACEMENTPLUGIN_DEFAULT=random
run solr start -c
- solr assert -c http://localhost:8983/solr -t 3000
+ solr assert -c http://localhost:${SOLR_PORT}/solr -t 3000
run solr create_collection -c COLL_NAME
collection_exists COLL_NAME
assert_file_contains "${SOLR_LOGS_DIR}/solr.log" 'Default replica placement plugin set in solr\.placementplugin\.default to random'
diff --git a/solr/packaging/test/test_post.bats b/solr/packaging/test/test_post.bats
index 2b8c18bfe46..1b0d11705a1 100644
--- a/solr/packaging/test/test_post.bats
+++ b/solr/packaging/test/test_post.bats
@@ -57,7 +57,7 @@ teardown() {
run solr create_collection -c monitors -d _default
assert_output --partial "Created collection 'monitors'"
- run solr post -type application/xml -url http://localhost:8983/solr/monitors/update ${SOLR_TIP}/example/exampledocs/monitor.xml
+ run solr post -type application/xml -url http://localhost:${SOLR_PORT}/solr/monitors/update ${SOLR_TIP}/example/exampledocs/monitor.xml
assert_output --partial '1 files indexed.'
refute_output --partial 'ERROR'
@@ -67,29 +67,29 @@ teardown() {
solr create_collection -c monitors_no_type -d _default
- run solr post -url http://localhost:8983/solr/monitors_no_type/update -commit ${SOLR_TIP}/example/exampledocs/monitor.xml
+ run solr post -url http://localhost:${SOLR_PORT}/solr/monitors_no_type/update -commit ${SOLR_TIP}/example/exampledocs/monitor.xml
assert_output --partial '1 files indexed.'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/monitors_no_type/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/monitors_no_type/select?q=*:*"
assert_output --partial '"numFound":1'
solr create_collection -c books_no_type -d _default
- run solr post -url http://localhost:8983/solr/books_no_type/update -commit ${SOLR_TIP}/example/exampledocs/books.json
+ run solr post -url http://localhost:${SOLR_PORT}/solr/books_no_type/update -commit ${SOLR_TIP}/example/exampledocs/books.json
assert_output --partial '1 files indexed.'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/books_no_type/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/books_no_type/select?q=*:*"
assert_output --partial '"numFound":4'
solr create_collection -c books_csv_no_type -d _default
- run solr post -url http://localhost:8983/solr/books_csv_no_type/update -commit ${SOLR_TIP}/example/exampledocs/books.csv
+ run solr post -url http://localhost:${SOLR_PORT}/solr/books_csv_no_type/update -commit ${SOLR_TIP}/example/exampledocs/books.csv
assert_output --partial '1 files indexed.'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/books_csv_no_type/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/books_csv_no_type/select?q=*:*"
assert_output --partial '"numFound":10'
}
@@ -98,11 +98,11 @@ teardown() {
solr create_collection -c mixed_content -d _default
# We filter to xml,json,and csv as we don't want to invoke the Extract handler.
- run solr post -filetypes xml,json,csv -url http://localhost:8983/solr/mixed_content/update -commit ${SOLR_TIP}/example/exampledocs
+ run solr post -filetypes xml,json,csv -url http://localhost:${SOLR_PORT}/solr/mixed_content/update -commit ${SOLR_TIP}/example/exampledocs
assert_output --partial '16 files indexed.'
refute_output --partial 'ERROR'
- run curl 'http://localhost:8983/solr/mixed_content/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/mixed_content/select?q=*:*"
assert_output --partial '"numFound":46'
}
@@ -116,9 +116,9 @@ teardown() {
"class": "solr.extraction.ExtractingRequestHandler",
"defaults":{ "lowernames": "true", "captureAttr":"true"}
}
- }' 'http://localhost:8983/solr/webcrawl/config'
+ }' "http://localhost:${SOLR_PORT}/solr/webcrawl/config"
- run solr post -mode web -url http://localhost:8983/webcrawl/update -recursive 1 -delay 1 https://solr.apache.org
+ run solr post -mode web -url http://localhost:${SOLR_PORT}/webcrawl/update -recursive 1 -delay 1 https://solr.apache.org
assert_output --partial 'Entering crawl at level 0'
}
@@ -127,7 +127,7 @@ teardown() {
run solr create_collection -c monitors2 -d _default
assert_output --partial "Created collection 'monitors2'"
- run solr post -url http://localhost:8983/solr/monitors2/update -type application/xml -commit -optimize ${SOLR_TIP}/example/exampledocs/monitor.xml
+ run solr post -url http://localhost:${SOLR_PORT}/solr/monitors2/update -type application/xml -commit -optimize ${SOLR_TIP}/example/exampledocs/monitor.xml
assert_output --partial '1 files indexed.'
assert_output --partial 'COMMITting Solr index'
@@ -141,26 +141,26 @@ teardown() {
run solr create_collection -c test_args -d _default
assert_output --partial "Created collection 'test_args'"
- run solr post -url http://localhost:8983/solr/test_args/update -mode args -type application/xml -out -commit "<delete><query>*:*</query></delete>"
+ run solr post -url http://localhost:${SOLR_PORT}/solr/test_args/update -mode args -type application/xml -out -commit "<delete><query>*:*</query></delete>"
assert_output --partial '<int name="status">0</int>'
# confirm default type
- run solr post -url http://localhost:8983/solr/test_args/update -mode args -out -commit "{'delete': {'query': '*:*'}}"
+ run solr post -url http://localhost:${SOLR_PORT}/solr/test_args/update -mode args -out -commit "{'delete': {'query': '*:*'}}"
assert_output --partial '"status":0'
# confirm we don't get back output without -out
- run solr post -url http://localhost:8983/solr/test_args/update -mode args -commit "{'delete': {'query': '*:*'}}"
+ run solr post -url http://localhost:${SOLR_PORT}/solr/test_args/update -mode args -commit "{'delete': {'query': '*:*'}}"
refute_output --partial '"status":0'
- run solr post -url http://localhost:8983/solr/test_args/update -mode args -commit -type text/csv -out $'id,value\nROW1,0.47'
+ run solr post -url http://localhost:${SOLR_PORT}/solr/test_args/update -mode args -commit -type text/csv -out $'id,value\nROW1,0.47'
assert_output --partial '"status":0'
- run curl 'http://localhost:8983/solr/test_args/select?q=id:ROW1'
+ run curl "http://localhost:${SOLR_PORT}/solr/test_args/select?q=id:ROW1"
assert_output --partial '"numFound":1'
}
# function used because run echo | solr ends up being (run echo) | solr and we loose the output capture.
capture_echo_to_solr() {
- echo "{'commit': {}}" | solr post -url http://localhost:8983/solr/test_stdin/update -mode stdin -type application/json -out
+ echo "{'commit': {}}" | solr post -url http://localhost:${SOLR_PORT}/solr/test_stdin/update -mode stdin -type application/json -out
}
@test "stdin mode" {
diff --git a/solr/packaging/test/test_postlogs.bats b/solr/packaging/test/test_postlogs.bats
index 64c8230fefd..863a8aa3583 100644
--- a/solr/packaging/test/test_postlogs.bats
+++ b/solr/packaging/test/test_postlogs.bats
@@ -42,11 +42,11 @@ teardown() {
run solr create_collection -c COLL_NAME
assert_output --partial "Created collection 'COLL_NAME'"
- run postlogs http://localhost:8983/solr/COLL_NAME ${SOLR_LOGS_DIR}/solr.log
+ run postlogs http://localhost:${SOLR_PORT}/solr/COLL_NAME ${SOLR_LOGS_DIR}/solr.log
assert_output --partial 'Sending last batch'
assert_output --partial 'Committed'
- run curl 'http://localhost:8983/solr/COLL_NAME/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/COLL_NAME/select?q=*:*"
refute_output --partial '"numFound":0'
}
@@ -54,10 +54,10 @@ teardown() {
run solr create_collection -c COLL_NAME
assert_output --partial "Created collection 'COLL_NAME'"
- run solr postlogs -url http://localhost:8983/solr/COLL_NAME -rootdir ${SOLR_LOGS_DIR}/solr.log
+ run solr postlogs -url http://localhost:${SOLR_PORT}/solr/COLL_NAME -rootdir ${SOLR_LOGS_DIR}/solr.log
assert_output --partial 'Sending last batch'
assert_output --partial 'Committed'
- run curl 'http://localhost:8983/solr/COLL_NAME/select?q=*:*'
+ run curl "http://localhost:${SOLR_PORT}/solr/COLL_NAME/select?q=*:*"
refute_output --partial '"numFound":0'
}
diff --git a/solr/packaging/test/test_security_manager.bats b/solr/packaging/test/test_security_manager.bats
index 0d7fa163a1a..da6649cc836 100644
--- a/solr/packaging/test/test_security_manager.bats
+++ b/solr/packaging/test/test_security_manager.bats
@@ -43,12 +43,12 @@ teardown() {
export SOLR_OPTS="-Dsolr.allowPaths=${backup_dir} -Djava.io.tmpdir=${test_tmp_dir}"
run solr start -c
run solr create_collection -c COLL_NAME
- run solr api -get "http://localhost:8983/solr/admin/collections?action=BACKUP&name=test&collection=COLL_NAME&location=file://${backup_dir}"
+ run solr api -get "http://localhost:${SOLR_PORT}/solr/admin/collections?action=BACKUP&name=test&collection=COLL_NAME&location=file://${backup_dir}"
assert_output --partial '"status":0'
# Solr is not permissioned for this directory, so it should fail
backup_dir_other="${backup_dir}-other"
mkdir -p "${backup_dir_other}"
- run solr api -get "http://localhost:8983/solr/admin/collections?action=BACKUP&name=test-fail&collection=COLL_NAME&location=file://${backup_dir_other}"
+ run solr api -get "http://localhost:${SOLR_PORT}/solr/admin/collections?action=BACKUP&name=test-fail&collection=COLL_NAME&location=file://${backup_dir_other}"
assert_output --partial 'access denied'
}
diff --git a/solr/packaging/test/test_ssl.bats b/solr/packaging/test/test_ssl.bats
index 85e0e32cc2a..2e9b01e263d 100644
--- a/solr/packaging/test/test_ssl.bats
+++ b/solr/packaging/test/test_ssl.bats
@@ -51,12 +51,12 @@ teardown() {
export SOLR_HOST=localhost
solr start -c
- solr assert --started https://localhost:8983/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
run solr create -c test -s 2
assert_output --partial "Created collection 'test'"
- run solr api -get 'https://localhost:8983/solr/test/select?q=*:*'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial '"numFound":0'
}
@@ -84,23 +84,23 @@ teardown() {
export SOLR_HOST=localhost
solr start -c
- solr assert --started https://localhost:8983/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
run solr create -c test -s 2
assert_output --partial "Created collection 'test'"
# Just test that curl can connect via insecure or via a custom host header
- run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" -k 'https://localhost:8983/solr/test/select?q=*:*'
+ run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" -k "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial '"numFound":0'
- run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" -H "Host: test.solr.apache.org" 'https://127.0.0.1:8983/solr/test/select?q=*:*'
+ run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" -H "Host: test.solr.apache.org" "https://127.0.0.1:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial '"numFound":0'
# This is a client setting, so we don't need to restart Solr to make sure that it fails
export SOLR_SSL_CHECK_PEER_NAME=true
# This should fail the peername check
- run ! solr api -get 'https://localhost:8983/solr/test/select?q=*:*'
+ run ! solr api -get "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial 'Server refused connection'
}
@@ -128,16 +128,16 @@ teardown() {
solr start -c
solr auth enable -type basicAuth -credentials name:password
- solr assert --started https://localhost:8983/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
- run curl -u name:password --basic --cacert "$ssl_dir/solr-ssl.pem" 'https://localhost:8983/solr/admin/collections?action=CREATE&collection.configName=_default&name=test&numShards=2&replicationFactor=1&router.name=compositeId&wt=json'
+ run curl -u name:password --basic --cacert "$ssl_dir/solr-ssl.pem" "https://localhost:${SOLR_PORT}/solr/admin/collections?action=CREATE&collection.configName=_default&name=test&numShards=2&replicationFactor=1&router.name=compositeId&wt=json"
assert_output --partial '"status":0'
- run curl -u name:password --basic --http2 --cacert "$ssl_dir/solr-ssl.pem" 'https://localhost:8983/solr/test/select?q=*:*'
+ run curl -u name:password --basic --http2 --cacert "$ssl_dir/solr-ssl.pem" "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial '"numFound":0'
# When the Jenkins box "curl" supports --fail-with-body, add "--fail-with-body" and change "run" to "run !", to expect a failure
- run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" 'https://localhost:8983/solr/test/select?q=*:*'
+ run curl --http2 --cacert "$ssl_dir/solr-ssl.pem" "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*"
assert_output --partial 'Error 401 Authentication'
}
@@ -190,12 +190,12 @@ teardown() {
export SOLR_SSL_TRUST_STORE=
export SOLR_SSL_TRUST_STORE_PASSWORD=
- solr assert --started https://localhost:8983/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
run solr create -c test -s 2
assert_output --partial "Created collection 'test'"
- run solr api -get 'https://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/admin/collections?action=CLUSTERSTATUS"
assert_output --partial '"urlScheme":"https"'
}
@@ -298,7 +298,7 @@ teardown() {
export SOLR_HOST=localhost
solr start -c
- solr start -c -z localhost:9983 -p 8984
+ solr start -c -z localhost:${ZK_PORT} -p ${SOLR2_PORT}
# Test Client connections, which do not need the server keystore/truststore
(
@@ -307,16 +307,16 @@ teardown() {
export SOLR_SSL_TRUST_STORE=
export SOLR_SSL_TRUST_STORE_PASSWORD=
- solr assert --started https://localhost:8983/solr --timeout 5000
- solr assert --started https://localhost:8984/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR2_PORT}/solr --timeout 5000
run solr create -c test -s 2
assert_output --partial "Created collection 'test'"
- run solr api -get 'https://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/admin/collections?action=CLUSTERSTATUS"
assert_output --partial '"urlScheme":"https"'
- run solr api -get 'https://localhost:8984/solr/test/select?q=*:*&rows=0'
+ run solr api -get "https://localhost:${SOLR2_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial '"numFound":0'
(
@@ -324,7 +324,7 @@ teardown() {
export SOLR_SSL_CLIENT_KEY_STORE=
export SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=
- run ! solr api -get 'https://localhost:8983/solr/test/select?q=*:*&rows=0'
+ run ! solr api -get "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial 'Server refused connection'
)
)
@@ -332,12 +332,12 @@ teardown() {
# Turn on client hostname verification, and start a new Solr node since the property is a server setting.
# Test that it fails because the client cert does not use "localhost"
export SOLR_SSL_CLIENT_HOSTNAME_VERIFICATION=true
- solr start -c -z localhost:9983 -p 8985
+ solr start -c -z localhost:${ZK_PORT} -p ${SOLR3_PORT}
# We can't check if the server has come up, because we can't connect to it, so just wait
sleep 5
- run ! solr api -get 'https://localhost:8985/solr/test/select?q=*:*&rows=0'
+ run ! solr api -get "https://localhost:${SOLR3_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial 'Server refused connection'
}
@@ -437,36 +437,36 @@ teardown() {
export SOLR_HOST=localhost
solr start -c
- solr start -c -z localhost:9983 -p 8984
+ solr start -c -z localhost:${ZK_PORT} -p ${SOLR2_PORT}
export SOLR_SSL_KEY_STORE=
export SOLR_SSL_KEY_STORE_PASSWORD=
export SOLR_SSL_TRUST_STORE=
export SOLR_SSL_TRUST_STORE_PASSWORD=
- solr assert --started https://localhost:8983/solr --timeout 5000
- solr assert --started https://localhost:8984/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR_PORT}/solr --timeout 5000
+ solr assert --started https://localhost:${SOLR2_PORT}/solr --timeout 5000
run solr create -c test -s 2
assert_output --partial "Created collection 'test'"
- run solr api -get 'https://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/admin/collections?action=CLUSTERSTATUS"
assert_output --partial '"urlScheme":"https"'
- run solr api -get 'https://localhost:8984/solr/test/select?q=*:*&rows=0'
+ run solr api -get "https://localhost:${SOLR2_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial '"numFound":0'
export SOLR_SSL_CLIENT_KEY_STORE=
export SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=
# mTLS requires a keyStore, so just using the truststore would fail if mTLS was "NEED"ed, however it is only "WANT"ed, so its ok
- run solr api -get 'https://localhost:8983/solr/test/select?q=*:*&rows=0'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial '"numFound":0'
export SOLR_SSL_CLIENT_TRUST_STORE=
export SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD=
# TLS cannot work if a truststore and keystore are not provided (either Server or Client)
- run solr api -get 'https://localhost:8983/solr/test/select?q=*:*&rows=0'
+ run solr api -get "https://localhost:${SOLR_PORT}/solr/test/select?q=*:*&rows=0"
assert_output --partial 'Server refused connection'
}
diff --git a/solr/packaging/test/test_start_solr.bats b/solr/packaging/test/test_start_solr.bats
index 3b664759da4..9b9e24a45aa 100644
--- a/solr/packaging/test/test_start_solr.bats
+++ b/solr/packaging/test/test_start_solr.bats
@@ -30,9 +30,9 @@ teardown() {
@test "SOLR-11740 check 'solr stop' connection" {
solr start
- solr start -p 7574
- solr assert --started http://localhost:8983/solr --timeout 5000
- solr assert --started http://localhost:7574/solr --timeout 5000
+ solr start -p ${SOLR2_PORT}
+ solr assert --started http://localhost:${SOLR_PORT}/solr --timeout 5000
+ solr assert --started http://localhost:${SOLR2_PORT}/solr --timeout 5000
run bash -c 'solr stop -all 2>&1'
refute_output --partial 'forcefully killing'
}
@@ -40,12 +40,12 @@ teardown() {
@test "stop command for single port" {
solr start
- solr start -p 7574
- solr assert --started http://localhost:8983/solr --timeout 5000
- solr assert --started http://localhost:7574/solr --timeout 5000
+ solr start -p ${SOLR2_PORT}
+ solr assert --started http://localhost:${SOLR_PORT}/solr --timeout 5000
+ solr assert --started http://localhost:${SOLR2_PORT}/solr --timeout 5000
- run solr stop -p 7574
- solr assert --not-started http://localhost:7574/solr --timeout 5000
- solr assert --started http://localhost:8983/solr --timeout 5000
+ run solr stop -p ${SOLR2_PORT}
+ solr assert --not-started http://localhost:${SOLR2_PORT}/solr --timeout 5000
+ solr assert --started http://localhost:${SOLR_PORT}/solr --timeout 5000
}
diff --git a/solr/packaging/test/test_status.bats b/solr/packaging/test/test_status.bats
index c1ca0c5986f..f5c15a066ca 100644
--- a/solr/packaging/test/test_status.bats
+++ b/solr/packaging/test/test_status.bats
@@ -41,6 +41,6 @@ teardown() {
}
@test "status does not expose cli parameters to end user" {
- run solr status -solr http://localhost:8983/solr
+ run solr status -solr http://localhost:${SOLR_PORT}/solr
assert_output --partial "ERROR: Unrecognized or misplaced argument: -solr!"
}
diff --git a/solr/packaging/test/test_zk.bats b/solr/packaging/test/test_zk.bats
index 686437d914e..06c0d75012d 100644
--- a/solr/packaging/test/test_zk.bats
+++ b/solr/packaging/test/test_zk.bats
@@ -38,24 +38,24 @@ teardown() {
@test "listing out files" {
sleep 1
- run solr zk ls / -z localhost:9983
+ run solr zk ls / -z localhost:${ZK_PORT}
assert_output --partial "aliases.json"
}
@test "copying files around" {
touch myfile.txt
# Umm, what is solr cp? It's like bin/solr zk cp but not?
- run solr cp -src myfile.txt -dst zk:/myfile.txt -z localhost:9983
- assert_output --partial "Copying from 'myfile.txt' to 'zk:/myfile.txt'. ZooKeeper at localhost:9983"
+ run solr cp -src myfile.txt -dst zk:/myfile.txt -z localhost:${ZK_PORT}
+ assert_output --partial "Copying from 'myfile.txt' to 'zk:/myfile.txt'. ZooKeeper at localhost:${ZK_PORT}"
sleep 1
- run solr zk ls / -z localhost:9983
+ run solr zk ls / -z localhost:${ZK_PORT}
assert_output --partial "myfile.txt"
touch myfile2.txt
- run solr zk cp myfile2.txt zk:myfile2.txt -z localhost:9983
- assert_output --partial "Copying from 'myfile2.txt' to 'zk:myfile2.txt'. ZooKeeper at localhost:9983"
+ run solr zk cp myfile2.txt zk:myfile2.txt -z localhost:${ZK_PORT}
+ assert_output --partial "Copying from 'myfile2.txt' to 'zk:myfile2.txt'. ZooKeeper at localhost:${ZK_PORT}"
sleep 1
- run solr zk ls / -z localhost:9983
+ run solr zk ls / -z localhost:${ZK_PORT}
assert_output --partial "myfile2.txt"
rm myfile.txt
@@ -66,12 +66,12 @@ teardown() {
local source_configset_dir="${SOLR_TIP}/server/solr/configsets/sample_techproducts_configs"
test -d $source_configset_dir
- run solr zk upconfig -d ${source_configset_dir} -n techproducts2 -z localhost:9983
+ run solr zk upconfig -d ${source_configset_dir} -n techproducts2 -z localhost:${ZK_PORT}
assert_output --partial "Uploading"
refute_output --partial "ERROR"
sleep 1
- run curl "http://localhost:8983/api/cluster/configs?omitHeader=true"
+ run curl "http://localhost:${SOLR_PORT}/api/cluster/configs?omitHeader=true"
assert_output --partial '"configSets":["_default","techproducts2"]'
}
diff --git a/solr/packaging/test/test_example_noprompt.bats b/solr/packaging/test/test_zz_cleanup.bats
similarity index 76%
copy from solr/packaging/test/test_example_noprompt.bats
copy to solr/packaging/test/test_zz_cleanup.bats
index 959cdd9d5bc..fe461eddd5e 100644
--- a/solr/packaging/test/test_example_noprompt.bats
+++ b/solr/packaging/test/test_zz_cleanup.bats
@@ -17,18 +17,21 @@
load bats_helper
-setup() {
+setup_file() {
common_clean_setup
}
-teardown() {
- # save a snapshot of SOLR_HOME for failed tests
- save_home_on_failure
+teardown_file() {
+ common_setup
+}
- solr stop -all >/dev/null 2>&1
+setup() {
+ common_setup
}
-@test "SOLR-16755 test works with noprompt" {
- solr start -e cloud -noprompt
- solr assert --started http://localhost:8983/solr --timeout 10000
+@test "Cleanup" {
+ sleep 1
+ run solr stop -all
+ run solr status
+ assert_output --partial "No Solr nodes are running"
}