Fix JMS test build issue (#340)
* Fix JMS test build issue * Remove ciphername where not required
This commit is contained in:
committed by
GitHub Enterprise
parent
a824b75bfa
commit
50260e1f57
2
Makefile
2
Makefile
@@ -304,7 +304,7 @@ build-devjmstest:
|
|||||||
test-devserver: test/docker/vendor
|
test-devserver: test/docker/vendor
|
||||||
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) on $(shell $(COMMAND) --version)"$(END)))
|
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) on $(shell $(COMMAND) --version)"$(END)))
|
||||||
$(COMMAND) inspect $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)
|
$(COMMAND) inspect $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)
|
||||||
cd test/docker && TEST_IMAGE=$(MQ_IMAGE_DEVSERVER):$(MQ_TAG) EXPECTED_LICENSE=Developer DEV_JMS_IMAGE=$(DEV_JMS_IMAGE) IBMJRE=true DOCKER_API_VERSION=$(DOCKER_API_VERSION) go test -parallel $(NUM_CPU) -timeout $(TEST_TIMEOUT_DOCKER) -tags mqdev $(TEST_OPTS_DOCKER)
|
cd test/docker && TEST_IMAGE=$(MQ_IMAGE_DEVSERVER):$(MQ_TAG) EXPECTED_LICENSE=Developer DEV_JMS_IMAGE=$(DEV_JMS_IMAGE) IBMJRE=false DOCKER_API_VERSION=$(DOCKER_API_VERSION) go test -parallel $(NUM_CPU) -timeout $(TEST_TIMEOUT_DOCKER) -tags mqdev $(TEST_OPTS_DOCKER)
|
||||||
|
|
||||||
.PHONY: coverage
|
.PHONY: coverage
|
||||||
coverage:
|
coverage:
|
||||||
|
|||||||
@@ -52,8 +52,10 @@ func TestDevGoldenPath(t *testing.T) {
|
|||||||
waitForReady(t, cli, id)
|
waitForReady(t, cli, id)
|
||||||
waitForWebReady(t, cli, id, insecureTLSConfig)
|
waitForWebReady(t, cli, id, insecureTLSConfig)
|
||||||
t.Run("JMS", func(t *testing.T) {
|
t.Run("JMS", func(t *testing.T) {
|
||||||
// Run the JMS tests, with no password specified
|
// Run the JMS tests, with no password specified.
|
||||||
runJMSTests(t, cli, id, false, "app", defaultAppPasswordOS)
|
// Use OpenJDK JRE for running testing, pass false for 7th parameter.
|
||||||
|
// Last parameter is blank as the test doesn't use TLS.
|
||||||
|
runJMSTests(t, cli, id, false, "app", defaultAppPasswordOS, "false", "")
|
||||||
})
|
})
|
||||||
t.Run("REST admin", func(t *testing.T) {
|
t.Run("REST admin", func(t *testing.T) {
|
||||||
testRESTAdmin(t, cli, id, insecureTLSConfig)
|
testRESTAdmin(t, cli, id, insecureTLSConfig)
|
||||||
@@ -116,7 +118,9 @@ func TestDevSecure(t *testing.T) {
|
|||||||
waitForWebReady(t, cli, ctr.ID, createTLSConfig(t, cert, tlsPassPhrase))
|
waitForWebReady(t, cli, ctr.ID, createTLSConfig(t, cert, tlsPassPhrase))
|
||||||
|
|
||||||
t.Run("JMS", func(t *testing.T) {
|
t.Run("JMS", func(t *testing.T) {
|
||||||
runJMSTests(t, cli, ctr.ID, true, "app", appPassword)
|
// OpenJDK is used for running tests, hence pass "false" for 7th parameter.
|
||||||
|
// Cipher name specified is compliant with non-IBM JRE naming.
|
||||||
|
runJMSTests(t, cli, ctr.ID, true, "app", appPassword, "false", "TLS_RSA_WITH_AES_256_CBC_SHA256")
|
||||||
})
|
})
|
||||||
t.Run("REST admin", func(t *testing.T) {
|
t.Run("REST admin", func(t *testing.T) {
|
||||||
testRESTAdmin(t, cli, ctr.ID, insecureTLSConfig)
|
testRESTAdmin(t, cli, ctr.ID, insecureTLSConfig)
|
||||||
@@ -154,7 +158,9 @@ func TestDevWebDisabled(t *testing.T) {
|
|||||||
})
|
})
|
||||||
t.Run("JMS", func(t *testing.T) {
|
t.Run("JMS", func(t *testing.T) {
|
||||||
// Run the JMS tests, with no password specified
|
// Run the JMS tests, with no password specified
|
||||||
runJMSTests(t, cli, id, false, "app", defaultAppPasswordOS)
|
// OpenJDK is used for running tests, hence pass "false" for 7th parameter.
|
||||||
|
// Last parameter is blank as the test doesn't use TLS.
|
||||||
|
runJMSTests(t, cli, id, false, "app", defaultAppPasswordOS, "false", "")
|
||||||
})
|
})
|
||||||
// Stop the container cleanly
|
// Stop the container cleanly
|
||||||
stopContainer(t, cli, id)
|
stopContainer(t, cli, id)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
//go:build mqdev
|
||||||
// +build mqdev
|
// +build mqdev
|
||||||
|
|
||||||
/*
|
/*
|
||||||
© Copyright IBM Corporation 2018, 2021
|
© Copyright IBM Corporation 2018, 2022
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -18,6 +19,7 @@ limitations under the License.
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
@@ -26,8 +28,8 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httputil"
|
"net/http/httputil"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -81,14 +83,14 @@ func tlsDir(t *testing.T, unixPath bool) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// runJMSTests runs a container with a JMS client, which connects to the queue manager container with the specified ID
|
// runJMSTests runs a container with a JMS client, which connects to the queue manager container with the specified ID
|
||||||
func runJMSTests(t *testing.T, cli *client.Client, ID string, tls bool, user, password string) {
|
func runJMSTests(t *testing.T, cli *client.Client, ID string, tls bool, user, password string, ibmjre string, cipherName string) {
|
||||||
containerConfig := container.Config{
|
containerConfig := container.Config{
|
||||||
// -e MQ_PORT_1414_TCP_ADDR=9.145.14.173 -e MQ_USERNAME=app -e MQ_PASSWORD=passw0rd -e MQ_CHANNEL=DEV.APP.SVRCONN -e MQ_TLS_TRUSTSTORE=/tls/test.p12 -e MQ_TLS_PASSPHRASE=passw0rd -v /Users/arthurbarr/go/src/github.com/ibm-messaging/mq-container/test/tls:/tls msgtest
|
// -e MQ_PORT_1414_TCP_ADDR=9.145.14.173 -e MQ_USERNAME=app -e MQ_PASSWORD=passw0rd -e MQ_CHANNEL=DEV.APP.SVRCONN -e MQ_TLS_TRUSTSTORE=/tls/test.p12 -e MQ_TLS_PASSPHRASE=passw0rd -v /Users/arthurbarr/go/src/github.com/ibm-messaging/mq-container/test/tls:/tls msgtest
|
||||||
Env: []string{
|
Env: []string{
|
||||||
"MQ_PORT_1414_TCP_ADDR=" + getIPAddress(t, cli, ID),
|
"MQ_PORT_1414_TCP_ADDR=" + getIPAddress(t, cli, ID),
|
||||||
"MQ_USERNAME=" + user,
|
"MQ_USERNAME=" + user,
|
||||||
"MQ_CHANNEL=DEV.APP.SVRCONN",
|
"MQ_CHANNEL=DEV.APP.SVRCONN",
|
||||||
"IBMJRE=" + os.Getenv("IBMJRE"),
|
"IBMJRE=" + ibmjre,
|
||||||
},
|
},
|
||||||
Image: imageNameDevJMS(),
|
Image: imageNameDevJMS(),
|
||||||
}
|
}
|
||||||
@@ -101,6 +103,7 @@ func runJMSTests(t *testing.T, cli *client.Client, ID string, tls bool, user, pa
|
|||||||
containerConfig.Env = append(containerConfig.Env, []string{
|
containerConfig.Env = append(containerConfig.Env, []string{
|
||||||
"MQ_TLS_TRUSTSTORE=/var/tls/client-trust.jks",
|
"MQ_TLS_TRUSTSTORE=/var/tls/client-trust.jks",
|
||||||
"MQ_TLS_PASSPHRASE=passw0rd",
|
"MQ_TLS_PASSPHRASE=passw0rd",
|
||||||
|
"MQ_TLS_CIPHER=" + cipherName,
|
||||||
}...)
|
}...)
|
||||||
}
|
}
|
||||||
hostConfig := container.HostConfig{
|
hostConfig := container.HostConfig{
|
||||||
@@ -119,9 +122,57 @@ func runJMSTests(t *testing.T, cli *client.Client, ID string, tls bool, user, pa
|
|||||||
if rc != 0 {
|
if rc != 0 {
|
||||||
t.Errorf("JUnit container failed with rc=%v", rc)
|
t.Errorf("JUnit container failed with rc=%v", rc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get console output of the container and process the lines
|
||||||
|
// to see if we have any failures
|
||||||
|
scanner := bufio.NewScanner(strings.NewReader(inspectLogs(t, cli, ctr.ID)))
|
||||||
|
for scanner.Scan() {
|
||||||
|
s := scanner.Text()
|
||||||
|
if processJunitLogLine(s) {
|
||||||
|
t.Errorf("JUnit container tests failed. Reason: %s", s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defer cleanContainer(t, cli, ctr.ID)
|
defer cleanContainer(t, cli, ctr.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse JUnit log line and return true if line contains failed or aborted tests
|
||||||
|
func processJunitLogLine(outputLine string) bool {
|
||||||
|
var failedLine bool
|
||||||
|
// Sample JUnit test run output
|
||||||
|
//[ 2 containers found ]
|
||||||
|
//[ 0 containers skipped ]
|
||||||
|
//[ 2 containers started ]
|
||||||
|
//[ 0 containers aborted ]
|
||||||
|
//[ 2 containers successful ]
|
||||||
|
//[ 0 containers failed ]
|
||||||
|
//[ 0 tests found ]
|
||||||
|
//[ 0 tests skipped ]
|
||||||
|
//[ 0 tests started ]
|
||||||
|
//[ 0 tests aborted ]
|
||||||
|
//[ 0 tests successful ]
|
||||||
|
//[ 0 tests failed ]
|
||||||
|
|
||||||
|
// Consider only those lines that begin with '[' and with ']'
|
||||||
|
if strings.HasPrefix(outputLine, "[") && strings.HasSuffix(outputLine, "]") {
|
||||||
|
// Strip off [] and whitespaces
|
||||||
|
trimmed := strings.Trim(outputLine, "[] ")
|
||||||
|
if strings.Contains(trimmed, "aborted") || strings.Contains(trimmed, "failed") {
|
||||||
|
// Tokenize on whitespace
|
||||||
|
tokens := strings.Split(trimmed, " ")
|
||||||
|
// Determine the count of aborted or failed tests
|
||||||
|
count, err := strconv.Atoi(tokens[0])
|
||||||
|
if err == nil {
|
||||||
|
if count > 0 {
|
||||||
|
failedLine = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return failedLine
|
||||||
|
}
|
||||||
|
|
||||||
// createTLSConfig creates a tls.Config which trusts the specified certificate
|
// createTLSConfig creates a tls.Config which trusts the specified certificate
|
||||||
func createTLSConfig(t *testing.T, certFile, password string) *tls.Config {
|
func createTLSConfig(t *testing.T, certFile, password string) *tls.Config {
|
||||||
// Get the SystemCertPool, continue with an empty pool on error
|
// Get the SystemCertPool, continue with an empty pool on error
|
||||||
|
|||||||
@@ -16,16 +16,16 @@
|
|||||||
# Application build environment (Maven)
|
# Application build environment (Maven)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
FROM registry.access.redhat.com/ubi8/openjdk-8 as builder
|
FROM registry.access.redhat.com/ubi8/openjdk-8 as builder
|
||||||
COPY pom.xml .
|
COPY pom.xml ./
|
||||||
#WORKDIR /usr/src/mymaven
|
#WORKDIR /usr/src/mymaven
|
||||||
# Download dependencies separately, so Docker caches them
|
# Download dependencies separately, so Docker caches them
|
||||||
RUN mvn dependency:go-offline install
|
RUN mvn dependency:go-offline install
|
||||||
# Copy source
|
# Copy source
|
||||||
COPY src .
|
COPY src ./src
|
||||||
# Run the main build
|
# Run the main build
|
||||||
RUN mvn --offline install
|
RUN mvn --offline install
|
||||||
# Print a list of all the files (useful for debugging)
|
# Print a list of all the files (useful for debugging)
|
||||||
RUN find .
|
RUN find ./
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Application runtime (JRE only, no build environment)
|
# Application runtime (JRE only, no build environment)
|
||||||
@@ -35,4 +35,4 @@ FROM registry.access.redhat.com/ubi8/openjdk-8-runtime
|
|||||||
COPY --from=builder /home/jboss/target/*.jar /opt/app/
|
COPY --from=builder /home/jboss/target/*.jar /opt/app/
|
||||||
COPY --from=builder /home/jboss/target/lib/*.jar /opt/app/
|
COPY --from=builder /home/jboss/target/lib/*.jar /opt/app/
|
||||||
USER 1001
|
USER 1001
|
||||||
ENTRYPOINT ["java", "-classpath", "/opt/app/*", "org.junit.platform.console.ConsoleLauncher", "-p", "com.ibm.mqcontainer.test", "--details", "verbose"]
|
ENTRYPOINT ["java", "-classpath", "/opt/app/*", "org.junit.platform.console.ConsoleLauncher", "--fail-if-no-tests", "-p", "com.ibm.mqcontainer.test", "--details", "verbose"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
© Copyright IBM Corporation 2018, 2021
|
© Copyright IBM Corporation 2018, 2022
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -82,11 +82,10 @@ class JMSTests {
|
|||||||
boolean ibmjre = System.getenv("IBMJRE").equals("true");
|
boolean ibmjre = System.getenv("IBMJRE").equals("true");
|
||||||
if (ibmjre){
|
if (ibmjre){
|
||||||
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "true");
|
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "true");
|
||||||
factory.setSSLCipherSuite("SSL_RSA_WITH_AES_128_CBC_SHA256");
|
|
||||||
} else {
|
} else {
|
||||||
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
|
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
|
||||||
factory.setSSLCipherSuite("TLS_RSA_WITH_AES_128_CBC_SHA256");
|
|
||||||
}
|
}
|
||||||
|
factory.setSSLCipherSuite(System.getenv("MQ_TLS_CIPHER"));
|
||||||
}
|
}
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user