From e55011e587b309ff2d17459729d7fd1749fd2927 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:08:48 +0900 Subject: [PATCH 01/23] Enforced Java 11 in build.gradle --- build.gradle | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 4309cf185..9a5a7227a 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,11 @@ apply plugin: "org.unbroken-dome.test-sets" defaultTasks 'clean', 'test', 'integrationTest', 'functionalTest', 'build' description = 'Gradle configuration for stubby4j' +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + compileJava { options.encoding = 'UTF-8' options.compilerArgs << '-parameters' << '-Xlint:deprecation' @@ -35,12 +40,6 @@ compileTestJava { options.encoding = 'UTF-8' } -javadoc { - if (JavaVersion.current().isJava8Compatible()) { - options.addStringOption('Xdoclint:none', '-quiet') - } -} - repositories { mavenLocal() mavenCentral() From 29f315950cbdad2554e23ed8e856a8db4e012601 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:09:16 +0900 Subject: [PATCH 02/23] Removed JDK 8 ALPN dependency decision tree --- conf/gradle/dependencies.gradle | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/conf/gradle/dependencies.gradle b/conf/gradle/dependencies.gradle index 62d12e1fd..c2110dd3a 100644 --- a/conf/gradle/dependencies.gradle +++ b/conf/gradle/dependencies.gradle @@ -1,11 +1,6 @@ dependencies { - if (project.hasProperty("useNativeJdkAlpnProcessor")) { - println "> Building with native JDK ALPN processor in default dependencies" - api "org.eclipse.jetty:jetty-alpn-java-server:${jettyVersion}" - } else { - println "> Building with Jetty JDK ALPN OpenJDK 1.8 processor in default dependencies" - api "org.eclipse.jetty:jetty-alpn-openjdk8-server:${jettyVersion}" - } + println "> Building with native JDK ALPN processor in default dependencies" + api "org.eclipse.jetty:jetty-alpn-java-server:${jettyVersion}" api "org.eclipse.jetty.websocket:websocket-api:${jettyVersion}" api "org.eclipse.jetty.websocket:websocket-server:${jettyVersion}" @@ -58,12 +53,7 @@ dependencies { testImplementation "com.google.truth:truth:1.1.2" testImplementation "org.eclipse.jetty.http2:http2-client:${jettyVersion}" testImplementation "org.eclipse.jetty.http2:http2-http-client-transport:${jettyVersion}" - - if (project.hasProperty("useNativeJdkAlpnProcessor")) { - testImplementation "org.eclipse.jetty:jetty-alpn-java-client:${jettyVersion}" - } else { - testImplementation "org.eclipse.jetty:jetty-alpn-openjdk8-client:${jettyVersion}" - } + testImplementation "org.eclipse.jetty:jetty-alpn-java-client:${jettyVersion}" // https://github.com/googleapis/google-http-java-client/issues/167#issuecomment-571987053 testImplementation "com.google.http-client:google-http-client-apache-v2:1.38.1" From 8c9966b105f6ea8a19663be48036b7278e5d00f7 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:14:34 +0900 Subject: [PATCH 03/23] Removed useNativeJdkAlpnProcessor & use_native_jdk_alpn_processor --- .circleci/config.yml | 46 +++-------------------------------------- docker/jdk11/Dockerfile | 2 +- docker/jdk16/Dockerfile | 2 +- 3 files changed, 5 insertions(+), 45 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9e21f6f90..f4bc68df0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -199,7 +199,7 @@ default_steps: &default_steps - run: name: Run all test suits - command: gradle -PciRun << parameters.use_native_jdk_alpn_processor >> clean test integrationTest functionalTest + command: gradle -PciRun clean test integrationTest functionalTest when: always - when: @@ -244,7 +244,7 @@ code_coverage_steps: &code_coverage_steps - run: name: Run JaCoCo plugin code coverage when: on_success - command: ./gradlew -PciRun << parameters.use_native_jdk_alpn_processor >> clean jacocoTestReport + command: ./gradlew -PciRun clean jacocoTestReport - run: name: Upload code coverage data to Codecov @@ -299,7 +299,7 @@ smoke_test_steps: &smoke_test_steps - run: name: Build stubby4j uber JAR - command: ./gradlew -PciRun << parameters.use_native_jdk_alpn_processor >> clean build + command: ./gradlew -PciRun clean build - run: when: on_success @@ -408,9 +408,6 @@ jobs: tls_13: type: string default: "no" - use_native_jdk_alpn_processor: - type: string - default: "" run_tls_with_alpn_http_2_tests: type: string default: "no" @@ -424,9 +421,6 @@ jobs: tls_13: type: string default: "no" - use_native_jdk_alpn_processor: - type: string - default: "" run_tls_with_alpn_http_2_tests: type: string default: "no" @@ -439,9 +433,6 @@ jobs: tls_13: type: string default: "no" # https://github.com/openjsse/openjsse/issues/13 - use_native_jdk_alpn_processor: - type: string - default: "" run_tls_with_alpn_http_2_tests: type: string default: "no" @@ -454,9 +445,6 @@ jobs: tls_13: type: string default: "yes" - use_native_jdk_alpn_processor: - type: string - default: "" run_tls_with_alpn_http_2_tests: type: string default: "yes" @@ -469,9 +457,6 @@ jobs: tls_13: type: string default: "yes" - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" run_tls_with_alpn_http_2_tests: type: string default: "yes" @@ -484,9 +469,6 @@ jobs: tls_13: type: string default: "yes" - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" run_tls_with_alpn_http_2_tests: type: string default: "yes" @@ -499,9 +481,6 @@ jobs: tls_13: type: string default: "yes" - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" run_tls_with_alpn_http_2_tests: type: string default: "yes" @@ -514,9 +493,6 @@ jobs: tls_13: type: string default: "yes" - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" run_tls_with_alpn_http_2_tests: type: string default: "yes" @@ -525,37 +501,21 @@ jobs: gradle_7_2_0_jdk8: - parameters: - use_native_jdk_alpn_processor: - type: string - default: "" <<: *gradle_7_2_0_jdk8_environment <<: *default_steps gradle_7_2_0_jdk8_code_coverage: - parameters: - use_native_jdk_alpn_processor: - type: string - default: "" <<: *circleci_pre_built_openjdk_8_environment <<: *code_coverage_steps gradle_7_2_0_jdk11: - parameters: - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" <<: *gradle_7_2_0_jdk11_environment <<: *default_steps gradle_7_2_0_jdk16: - parameters: - use_native_jdk_alpn_processor: - type: string - default: "-PuseNativeJdkAlpnProcessor" <<: *gradle_7_2_0_jdk16_environment <<: *default_steps diff --git a/docker/jdk11/Dockerfile b/docker/jdk11/Dockerfile index 2a7f24886..62a013df7 100644 --- a/docker/jdk11/Dockerfile +++ b/docker/jdk11/Dockerfile @@ -21,7 +21,7 @@ RUN git clone https://github.com/azagniotov/stubby4j.git && \ cd stubby4j && \ git fetch -f --tags && \ git checkout $REVISION && \ - gradle -Plog4j -PuseNativeJdkAlpnProcessor clean jar + gradle -Plog4j clean jar ######################################################################################## # Stage 2 : create the Docker final image diff --git a/docker/jdk16/Dockerfile b/docker/jdk16/Dockerfile index 1d17ac121..1751e6a2d 100644 --- a/docker/jdk16/Dockerfile +++ b/docker/jdk16/Dockerfile @@ -21,7 +21,7 @@ RUN git clone https://github.com/azagniotov/stubby4j.git && \ cd stubby4j && \ git fetch -f --tags && \ git checkout $REVISION && \ - gradle -Plog4j -PuseNativeJdkAlpnProcessor clean jar + gradle -Plog4j clean jar ######################################################################################## # Stage 2 : create the Docker final image From a876caad056ec065eaa517da88a009dc9df52479 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:26:59 +0900 Subject: [PATCH 04/23] Cleaned up CircleCI config from JDK 8 --- .circleci/config.yml | 151 ++++--------------------------------------- 1 file changed, 14 insertions(+), 137 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f4bc68df0..d505d7c76 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,28 +36,6 @@ docker_in_docker_environment: &docker_in_docker_environment ########################################################################################### ### START: Different JDK images ########################################################################################### -openjdk_alpine_jdk_8u092_environment: &openjdk_alpine_jdk_8u092_environment - <<: *base_environment - docker: - # https://www.oracle.com/java/technologies/javase/8u92-relnotes.html - - image: openjdk:8u92-jdk-alpine@sha256:63eb1c79f609dbaa2c587ba3eb772e8e453229ce91fffc378725ca16435348e9 - -openjdk_alpine_jdk_8u111_environment: &openjdk_alpine_jdk_8u111_environment - <<: *base_environment - docker: - # https://www.oracle.com/java/technologies/javase/8u111-relnotes.html - - image: openjdk:8u111-jdk-alpine@sha256:d49bf8c44670834d3dade17f8b84d709e7db47f1887f671a0e098bafa9bae49f - -azul_zulu_openjdk_alpine_jdk_8u232_environment: &azul_zulu_openjdk_alpine_jdk_8u232_environment - <<: *base_environment - docker: - - image: azul/zulu-openjdk-alpine:8u232@sha256:b0c2420393353be6aaeb77e4498271f46edc5c3dbc39957482f3ef6828628f53 - -adoptopenjdk_openjdk_alpine_jdk_8u312_b07_environment: &adoptopenjdk_openjdk_alpine_jdk_8u312_b07_environment - <<: *base_environment - docker: - - image: adoptopenjdk/openjdk8:jdk8u312-b07-alpine-slim@sha256:da6bb7b3d1bc1a23653c60f88902be9ca15b4a62f537970d37b65dd374be3221 - adoptopenjdk_openjdk_alpine_jdk_11_0_13_8_openj9_environment: &adoptopenjdk_openjdk_alpine_jdk_11_0_13_8_openj9_environment <<: *base_environment docker: @@ -82,16 +60,10 @@ openjdk_alpine_jdk_17_environment: &openjdk_alpine_jdk_17_environment ########################################################################################### ### END: Different JDK images ########################################################################################### - -circleci_pre_built_openjdk_8_environment: &circleci_pre_built_openjdk_8_environment +circleci_pre_built_openjdk_11_environment: &circleci_pre_built_openjdk_11_environment <<: *base_environment docker: - - image: circleci/openjdk:8u292-jdk@sha256:51d82605e7f89fc74437dce7324a33e6a7c9d1941ec8cfd0980f6814d78ae494 - -gradle_7_2_0_jdk8_environment: &gradle_7_2_0_jdk8_environment - <<: *base_environment - docker: - - image: gradle:7.2.0-jdk8-openj9@sha256:d4128edf5ac579f93e3149a9f89be3af779de1d3d85a9f25f25cb3d4b432b69a + - image: circleci/openjdk:11.0.11-9-jdk-buster@sha256:fd85ea86890cd29be510bdb2ad5e09eb494750d16bd3eeac19dabae03ed36b45 gradle_7_2_0_jdk11_environment: &gradle_7_2_0_jdk11_environment @@ -402,56 +374,6 @@ smoke_test_steps: &smoke_test_steps ############################################################################################# jobs: - # https://www.oracle.com/java/technologies/javase/8u92-relnotes.html - smoke_openjdk_openjdk_8u092: - parameters: - tls_13: - type: string - default: "no" - run_tls_with_alpn_http_2_tests: - type: string - default: "no" - <<: *openjdk_alpine_jdk_8u092_environment - <<: *smoke_test_steps - - - # https://www.oracle.com/java/technologies/javase/8u111-relnotes.html - smoke_openjdk_openjdk_8u111: - parameters: - tls_13: - type: string - default: "no" - run_tls_with_alpn_http_2_tests: - type: string - default: "no" - <<: *openjdk_alpine_jdk_8u111_environment - <<: *smoke_test_steps - - - smoke_azul_zulu_openjdk_8u232: - parameters: - tls_13: - type: string - default: "no" # https://github.com/openjsse/openjsse/issues/13 - run_tls_with_alpn_http_2_tests: - type: string - default: "no" - <<: *azul_zulu_openjdk_alpine_jdk_8u232_environment - <<: *smoke_test_steps - - - smoke_adoptopenjdk_openjdk_8u312_b07: - parameters: - tls_13: - type: string - default: "yes" - run_tls_with_alpn_http_2_tests: - type: string - default: "yes" - <<: *adoptopenjdk_openjdk_alpine_jdk_8u312_b07_environment - <<: *smoke_test_steps - - smoke_adoptopenjdk_openjdk_11_openj9: parameters: tls_13: @@ -500,21 +422,16 @@ jobs: <<: *smoke_test_steps - gradle_7_2_0_jdk8: - <<: *gradle_7_2_0_jdk8_environment + gradle_7_2_0_jdk11: + <<: *gradle_7_2_0_jdk11_environment <<: *default_steps - gradle_7_2_0_jdk8_code_coverage: - <<: *circleci_pre_built_openjdk_8_environment + gradle_7_2_0_jdk11_code_coverage: + <<: *circleci_pre_built_openjdk_11_environment <<: *code_coverage_steps - gradle_7_2_0_jdk11: - <<: *gradle_7_2_0_jdk11_environment - <<: *default_steps - - gradle_7_2_0_jdk16: <<: *gradle_7_2_0_jdk16_environment <<: *default_steps @@ -554,29 +471,20 @@ jobs: version: 2.1 workflows: - master-jdk8-code-coverage: + master-jdk11-code-coverage: jobs: - - gradle_7_2_0_jdk8_code_coverage: + - gradle_7_2_0_jdk11_code_coverage: <<: *context_sonatype <<: *filter_only_master - master-jdk8-publish-snapshot: + master-jdk11-publish-snapshot: jobs: - - gradle_7_2_0_jdk8: + - gradle_7_2_0_jdk11: <<: *context_sonatype <<: *filter_only_master - branch-smoke-test: jobs: - - smoke_openjdk_openjdk_8u092: - <<: *filter_ignore_master - - smoke_openjdk_openjdk_8u111: - <<: *filter_ignore_master - - smoke_azul_zulu_openjdk_8u232: - <<: *filter_ignore_master - - smoke_adoptopenjdk_openjdk_8u312_b07: - <<: *filter_ignore_master - smoke_adoptopenjdk_openjdk_11_openj9: <<: *filter_ignore_master - smoke_azul_zulu_openjdk_15: @@ -588,14 +496,6 @@ workflows: master-smoke-test: jobs: - - smoke_openjdk_openjdk_8u092: - <<: *filter_only_master - - smoke_openjdk_openjdk_8u111: - <<: *filter_only_master - - smoke_azul_zulu_openjdk_8u232: - <<: *filter_only_master - - smoke_adoptopenjdk_openjdk_8u312_b07: - <<: *filter_only_master - smoke_adoptopenjdk_openjdk_11_openj9: <<: *filter_only_master - smoke_azul_zulu_openjdk_15: @@ -605,20 +505,15 @@ workflows: - smoke_openjdk_openjdk_17: <<: *filter_only_master - branch-jdk8: - jobs: - - gradle_7_2_0_jdk8: - <<: *filter_ignore_master - - gradle_7_2_0_jdk8_code_coverage: - <<: *filter_ignore_master - requires: - - gradle_7_2_0_jdk8 - branch-jdk11: jobs: - gradle_7_2_0_jdk11: <<: *filter_ignore_master + - gradle_7_2_0_jdk11_code_coverage: + <<: *filter_ignore_master + requires: + - gradle_7_2_0_jdk11 branch-jdk16: @@ -633,30 +528,12 @@ workflows: cron: "5 7,19 * * *" <<: *filter_only_master jobs: - - smoke_openjdk_openjdk_8u092 - - smoke_openjdk_openjdk_8u111 - - smoke_azul_zulu_openjdk_8u232 - - smoke_adoptopenjdk_openjdk_8u312_b07 - smoke_adoptopenjdk_openjdk_11_openj9 - smoke_azul_zulu_openjdk_15 - smoke_adoptopenjdk_openjdk_16_openj9 - smoke_openjdk_openjdk_17 - master-twelve-hour-jdk8: - triggers: - - schedule: - cron: "10 7,19 * * *" - <<: *filter_only_master - jobs: - - gradle_7_2_0_jdk8: - <<: *context_sonatype - - docker_build_latest_jre8: - <<: *context_docker_hub - requires: - - gradle_7_2_0_jdk8 - - master-twelve-hour-jdk11: triggers: - schedule: From 14b5faafd35e71f48ea4e588baa0d64eaabe6c9d Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:32:50 +0900 Subject: [PATCH 05/23] Cleaned up Docker related JDK 8/JRE 8 areas --- .circleci/config.yml | 9 ----- docker/jdk8/Dockerfile | 88 ------------------------------------------ docs/DOCKERHUB.md | 26 +++++++------ 3 files changed, 14 insertions(+), 109 deletions(-) delete mode 100644 docker/jdk8/Dockerfile diff --git a/.circleci/config.yml b/.circleci/config.yml index d505d7c76..f1490ed6e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -437,15 +437,6 @@ jobs: <<: *default_steps - docker_build_latest_jre8: - parameters: - jdk_version: - type: string - default: "8" - <<: *docker_in_docker_environment - <<: *build_push_image_steps - - docker_build_latest_jre11: parameters: jdk_version: diff --git a/docker/jdk8/Dockerfile b/docker/jdk8/Dockerfile deleted file mode 100644 index e465fdd22..000000000 --- a/docker/jdk8/Dockerfile +++ /dev/null @@ -1,88 +0,0 @@ -# A few useful Docker commands to build an image and run the stubby4j container. -# -# Build (run with '--no-cache' to ensure that Git repo new tags will be pulled down, as Docker caches RUNs): -# '$ docker build --build-arg REVISION=v7.2.0 --rm --no-cache -t stubby4j:latest .' or -# '$ docker build --rm --no-cache -t stubby4j:latest .' to build from master -# -# Run: -# https://hub.docker.com/r/azagniotov/stubby4j ("How to use this image") - -######################################################################################## -# Stage 1 : build the app -######################################################################################## -FROM gradle:7.2.0-jdk8-openj9@sha256:d4128edf5ac579f93e3149a9f89be3af779de1d3d85a9f25f25cb3d4b432b69a AS BUILD_JAR_STAGE - -ARG REVISION=master -ENV GRADLE_USER_HOME=/home/gradle -WORKDIR $GRADLE_USER_HOME - -# Build from the latest tag -RUN git clone https://github.com/azagniotov/stubby4j.git && \ - cd stubby4j && \ - git fetch -f --tags && \ - git checkout $REVISION && \ - gradle -Plog4j clean jar - -######################################################################################## -# Stage 2 : create the Docker final image -######################################################################################## -# https://hub.docker.com/r/azul/zulu-openjdk-alpine -FROM azul/zulu-openjdk-alpine:8u282-8.52.0.23-jre-headless@sha256:91fe8ae651d5c778312e946e89f934240c2a80f55b7ca894d76daef8f5281375 - -ARG USER_ID=1001 -ARG GROUP_ID=1001 - -MAINTAINER Alexander Zagniotov - -# Why --location=0.0.0.0 ??? Read: https://stackoverflow.com/a/59182290 -ENV LOCATION=0.0.0.0 \ - STUBS_PORT=8882 \ - STUBS_TLS_PORT=7443 \ - ADMIN_PORT=8889 \ - WITH_ARGS="" \ - YAML_CONFIG="main.yaml" \ - STUBBY4J_USER_HOME=/home/stubby4j - -# Users & permissions, docs: https://wiki.alpinelinux.org/wiki/Setting_up_a_new_user -RUN addgroup --system --gid $GROUP_ID stubby4j && \ - adduser \ - --system \ - --disabled-password \ - --gecos '' \ - --uid $USER_ID stubby4j \ - --shell /bin/bash \ - --home "$STUBBY4J_USER_HOME" && \ - chown --recursive stubby4j:stubby4j "$STUBBY4J_USER_HOME" - -WORKDIR "$STUBBY4J_USER_HOME" - -COPY --from=BUILD_JAR_STAGE /home/gradle/stubby4j/build/libs/stubby4j*SNAPSHOT.jar ./stubby4j.jar -COPY --from=BUILD_JAR_STAGE /home/gradle/stubby4j/docker/log4j2-for-docker.xml ./log4j2.xml -RUN chown $USER_ID:$GROUP_ID stubby4j.jar && \ - chown $USER_ID:$GROUP_ID log4j2.xml && \ - java -version && \ - ls -al - -# Set the UID and GID of 'stubby4j' for the ENTRYPOINT instructions, -# because root inside the container == root outside the container, -# since there’s a single kernel and a single, shared pool of UIDs and GIDs. -USER $USER_ID:$GROUP_ID - -# Mark the 'data' directory as volume -VOLUME "$STUBBY4J_USER_HOME/data" - -# Expose the three stubby4j ports and run the JAR -EXPOSE $ADMIN_PORT $STUBS_PORT $STUBS_TLS_PORT - -# https://www.docker.com/blog/apache-log4j-2-cve-2021-44228/ -ENTRYPOINT java \ - -DoverrideDisabledAlgorithms=true \ - -Dlog4j2.configurationFile=log4j2.xml \ - -jar stubby4j.jar \ - --location ${LOCATION} \ - --admin ${ADMIN_PORT} \ - --stubs ${STUBS_PORT} \ - --tls ${STUBS_TLS_PORT} \ - --data data/${YAML_CONFIG} \ - --mute \ - ${WITH_ARGS} diff --git a/docs/DOCKERHUB.md b/docs/DOCKERHUB.md index 8e6777115..c61cfd31d 100644 --- a/docs/DOCKERHUB.md +++ b/docs/DOCKERHUB.md @@ -35,17 +35,19 @@ The following `stubby4j` Docker images are available ([Alpine-Native Zulu OpenJD See [https://github.com/azagniotov/stubby4j/blob/master/CHANGELOG.md](https://github.com/azagniotov/stubby4j/blob/master/CHANGELOG.md) for more information -#### stubby4j versions on Alpine-Native Zulu OpenJDK JRE 8 -* [`7.5.1-jre8`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk8/Dockerfile) -* [`latest-jre8`](https://github.com/azagniotov/stubby4j/blob/master/docker/jdk8/Dockerfile) +#### stubby4j versions on Alpine-Native Zulu OpenJDK JRE 16 +* [`latest-jre16`](https://github.com/azagniotov/stubby4j/blob/master/docker/jdk16/Dockerfile) +* [`11.0.0-jre16`](https://github.com/azagniotov/stubby4j/blob/v11.0.0/docker/jdk16/Dockerfile) +* [`7.5.1-jre16`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk16/Dockerfile) #### stubby4j versions on Alpine-Native Zulu OpenJDK JRE 11 -* [`7.5.1-jre11`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk11/Dockerfile) * [`latest-jre11`](https://github.com/azagniotov/stubby4j/blob/master/docker/jdk11/Dockerfile) +* [`11.0.0-jre11`](https://github.com/azagniotov/stubby4j/blob/v11.0.0/docker/jdk11/Dockerfile) +* [`7.5.1-jre11`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk11/Dockerfile) + +#### stubby4j versions on Alpine-Native Zulu OpenJDK JRE 8 +* [`7.5.1-jre8`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk8/Dockerfile) -#### stubby4j versions on Alpine-Native Zulu OpenJDK JRE 16 -* [`7.5.1-jre16`](https://github.com/azagniotov/stubby4j/blob/v7.5.1/docker/jdk16/Dockerfile) -* [`latest-jre16`](https://github.com/azagniotov/stubby4j/blob/master/docker/jdk16/Dockerfile) # What is `stubby4j`? @@ -109,7 +111,7 @@ $ docker run --rm \ --env YAML_CONFIG=stubs.yaml \ --volume /Users/zaggy/docker-playground/yaml:/home/stubby4j/data \ -p 8882:8882 -p 8889:8889 -p 7443:7443 \ - azagniotov/stubby4j:7.5.1-jre8 + azagniotov/stubby4j:11.0.0-jre11 ``` ### Full command @@ -125,7 +127,7 @@ docker run --rm \ --env WITH_ARGS="--enable_tls_with_alpn_and_http_2 --disable_stub_caching --debug --watch" \ --volume /Users/zaggy/docker-playground/yaml:/home/stubby4j/data \ -p 9991:9991 -p 8889:8889 -p 8443:8443 \ - azagniotov/stubby4j:7.5.1-jre8 + azagniotov/stubby4j:11.0.0-jre11 ``` ... where the command: @@ -138,7 +140,7 @@ docker run --rm \ * Passes `--debug` to `WITH_ARGS` env var to make `stubby4j` to dump raw incoming HTTP requests to the console. If the `--debug` is not set, then the dumping incoming HTTP requests is disabled by default. * Passes `--watch` to `WITH_ARGS` env var to make `stubby4j` to periodically scan for changes in last modification date of the YAML configs and referenced external files (if any). The watch scans every 100ms. If last modification date changed since the last scan period, the stub configuration is reloaded. If the `--watch` is not set, then the periodic scan is disabled by default. * `-p` publishes/exposes set container's ports `9991`, `8889` & `8443` for stubs, admin & stubs on SSL portals respectively to the host. -* `latest-jre8` is the tag specifying the `stubby4j` version. See the list above for relevant tags +* `11.0.0-jre11` is the tag specifying the `stubby4j` version. See the list above for relevant tags ## Running in Docker Compose @@ -150,7 +152,7 @@ You can add `stubby4j` image to your stack using Docker Compose: version: '3.8' services: stubby4j: - image: azagniotov/stubby4j:latest-jre8 # you can also use other tags: latest-jre11, latest-jre15 + image: azagniotov/stubby4j:11.0.0-jre11 # you can also use other tags: latest-jre11, latest-jre15 volumes: - ":/home/stubby4j/data" container_name: stubby4j @@ -171,7 +173,7 @@ See smoke test [https://github.com/azagniotov/stubby4j/docker/smoke-test/docker- ## Container application logs -Currently, only in the Docker images tagged as `latest-jreXX` and `7.3.3-jreXX` and higher (i.e.: `7.5.1-jreXX`), the `stubby4j` service emits file-based logs (i.e.: generated by `log4j2` library) as well as `STDOUT` output stream logs. In images tagged as <= `7.3.2-jreXX`, only `STDOUT` output stream logs are available. +Currently, only in the Docker images tagged as `latest-jreXX` and `7.3.3-jreXX` and higher (i.e.: `11.0.0-jreXX`), the `stubby4j` service emits file-based logs (i.e.: generated by `log4j2` library) as well as `STDOUT` output stream logs. In images tagged as <= `7.3.2-jreXX`, only `STDOUT` output stream logs are available. The file-based logs persisted in the container volume `/home/stubby4j/data` under `logs` directory, i.e.:`/home/stubby4j/data/logs` From e4584354e5535b2812df566acfccdd8c6aa4a0ca Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:49:53 +0900 Subject: [PATCH 06/23] Upgraded jetty and friends to v11.0.7 --- conf/gradle/dependencies.gradle | 6 +++--- gradle.properties | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/gradle/dependencies.gradle b/conf/gradle/dependencies.gradle index c2110dd3a..759746733 100644 --- a/conf/gradle/dependencies.gradle +++ b/conf/gradle/dependencies.gradle @@ -2,9 +2,9 @@ dependencies { println "> Building with native JDK ALPN processor in default dependencies" api "org.eclipse.jetty:jetty-alpn-java-server:${jettyVersion}" - api "org.eclipse.jetty.websocket:websocket-api:${jettyVersion}" - api "org.eclipse.jetty.websocket:websocket-server:${jettyVersion}" - api "org.eclipse.jetty.websocket:websocket-client:${jettyVersion}" + api "org.eclipse.jetty.websocket:websocket-jetty-api:${jettyVersion}" + api "org.eclipse.jetty.websocket:websocket-jetty-server:${jettyVersion}" + api "org.eclipse.jetty.websocket:websocket-jetty-client:${jettyVersion}" // https://github.com/eclipse/jetty.project/issues/1894 // https://github.com/eclipse/jetty.project/issues/2950 diff --git a/gradle.properties b/gradle.properties index eade068b4..5a638df3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,10 +4,10 @@ org.gradle.vfs.watch=true log4j2Version=2.17.1 xmlUnitVersion=2.8.4 -jettyVersion=9.4.44.v20210927 +jettyVersion=11.0.7 snakeYamlVersion=1.29 mockitoVersion=3.12.4 stubbyProjectName=stubby4j stubbyProjectGroup=io.github.azagniotov -stubbyProjectVersion=7.5.2-SNAPSHOT +stubbyProjectVersion=11.0.1-SNAPSHOT From a5adcfc5f45b575994c804758ccfdfd2d6c7a41e Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 13:50:41 +0900 Subject: [PATCH 07/23] Replaced 'javax.*' packages with 'jakarta.*' --- .../stubby4j/stubs/StubRepositoryTest.java | 2 +- .../azagniotov/stubby4j/utils/ConsoleUtilsTest.java | 4 ++-- .../stubby4j/handlers/AbstractHandlerExtension.java | 4 ++-- .../stubby4j/handlers/AdminPortalHandler.java | 6 +++--- .../stubby4j/handlers/AjaxEndpointStatsHandler.java | 6 +++--- .../handlers/AjaxResourceContentHandler.java | 6 +++--- .../azagniotov/stubby4j/handlers/FaviconHandler.java | 6 +++--- .../stubby4j/handlers/JsonErrorHandler.java | 4 ++-- .../stubby4j/handlers/StatusPageHandler.java | 6 +++--- .../handlers/StubDataRefreshActionHandler.java | 6 +++--- .../stubby4j/handlers/StubsPortalHandler.java | 6 +++--- .../admin/AdminResponseHandlingStrategy.java | 4 ++-- .../admin/AdminResponseHandlingStrategyFactory.java | 2 +- .../strategy/admin/DeleteHandlingStrategy.java | 4 ++-- .../handlers/strategy/admin/GetHandlingStrategy.java | 4 ++-- .../strategy/admin/NullHandlingStrategy.java | 4 ++-- .../strategy/admin/PostHandlingStrategy.java | 4 ++-- .../handlers/strategy/admin/PutHandlingStrategy.java | 4 ++-- .../stubs/DefaultResponseHandlingStrategy.java | 2 +- .../stubs/NotFoundResponseHandlingStrategy.java | 2 +- .../stubs/RedirectResponseHandlingStrategy.java | 2 +- .../strategy/stubs/StubResponseHandlingStrategy.java | 2 +- .../stubs/UnauthorizedResponseHandlingStrategy.java | 2 +- .../azagniotov/stubby4j/server/JettyFactory.java | 2 +- .../azagniotov/stubby4j/stubs/StubRepository.java | 2 +- .../azagniotov/stubby4j/utils/ConsoleUtils.java | 4 ++-- .../azagniotov/stubby4j/utils/HandlerUtils.java | 4 ++-- .../azagniotov/stubby4j/utils/HttpRequestUtils.java | 2 +- .../handlers/AbstractHandlerExtensionTest.java | 4 ++-- .../handlers/AjaxResourceContentHandlerTest.java | 4 ++-- .../stubby4j/handlers/StubsPortalHandlerTest.java | 12 ++++++------ .../DefaultResponseHandlingStrategyTest.java | 6 +++--- .../RedirectResponseHandlingStrategyTest.java | 2 +- .../stubby4j/stubs/StubRepositoryTest.java | 2 +- 34 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/integration-test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java b/src/integration-test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java index 4bcb12440..250237bac 100644 --- a/src/integration-test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java +++ b/src/integration-test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java @@ -17,7 +17,7 @@ import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/src/integration-test/java/io/github/azagniotov/stubby4j/utils/ConsoleUtilsTest.java b/src/integration-test/java/io/github/azagniotov/stubby4j/utils/ConsoleUtilsTest.java index 030c057dc..4f029e19d 100644 --- a/src/integration-test/java/io/github/azagniotov/stubby4j/utils/ConsoleUtilsTest.java +++ b/src/integration-test/java/io/github/azagniotov/stubby4j/utils/ConsoleUtilsTest.java @@ -10,8 +10,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.PrintStream; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtension.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtension.java index 7cd7982c0..c237276aa 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtension.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtension.java @@ -3,8 +3,8 @@ import io.github.azagniotov.stubby4j.utils.ConsoleUtils; import org.eclipse.jetty.server.Request; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public interface AbstractHandlerExtension { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/AdminPortalHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/AdminPortalHandler.java index 27321ebaf..7d965377b 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/AdminPortalHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/AdminPortalHandler.java @@ -9,9 +9,9 @@ import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class AdminPortalHandler extends AbstractHandler implements AbstractHandlerExtension { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxEndpointStatsHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxEndpointStatsHandler.java index b48fdf959..df04f660f 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxEndpointStatsHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxEndpointStatsHandler.java @@ -8,9 +8,9 @@ import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import static io.github.azagniotov.stubby4j.utils.HandlerUtils.getHtmlResourceByName; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandler.java index f7da8f8fc..8ed131e3c 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandler.java @@ -13,9 +13,9 @@ import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; import java.util.regex.Pattern; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/FaviconHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/FaviconHandler.java index 983cc378c..213b80fc1 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/FaviconHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/FaviconHandler.java @@ -8,9 +8,9 @@ import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.resource.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URL; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/JsonErrorHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/JsonErrorHandler.java index 2142e77d7..b0db3dc56 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/JsonErrorHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/JsonErrorHandler.java @@ -12,8 +12,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/StatusPageHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/StatusPageHandler.java index f97282ace..5b6922821 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/StatusPageHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/StatusPageHandler.java @@ -21,9 +21,9 @@ import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/StubDataRefreshActionHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/StubDataRefreshActionHandler.java index 635637343..8ac0ec5f2 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/StubDataRefreshActionHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/StubDataRefreshActionHandler.java @@ -14,9 +14,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @SuppressWarnings("serial") diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandler.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandler.java index 7d603b1bf..b3aac8503 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandler.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandler.java @@ -9,9 +9,9 @@ import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import static io.github.azagniotov.stubby4j.handlers.strategy.stubs.StubsResponseHandlingStrategyFactory.getStrategy; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategy.java index 58fb4e73e..b6eb3367a 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategy.java @@ -8,8 +8,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategyFactory.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategyFactory.java index af3ea3f46..0359b5a14 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategyFactory.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/AdminResponseHandlingStrategyFactory.java @@ -1,6 +1,6 @@ package io.github.azagniotov.stubby4j.handlers.strategy.admin; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public final class AdminResponseHandlingStrategyFactory { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/DeleteHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/DeleteHandlingStrategy.java index 26d113a29..a52ee8670 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/DeleteHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/DeleteHandlingStrategy.java @@ -7,8 +7,8 @@ import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class DeleteHandlingStrategy implements AdminResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/GetHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/GetHandlingStrategy.java index d4244eecc..64003dd12 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/GetHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/GetHandlingStrategy.java @@ -6,8 +6,8 @@ import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class GetHandlingStrategy implements AdminResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/NullHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/NullHandlingStrategy.java index 7c19b3b63..c95ddf4f3 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/NullHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/NullHandlingStrategy.java @@ -3,8 +3,8 @@ import io.github.azagniotov.stubby4j.stubs.StubRepository; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class NullHandlingStrategy implements AdminResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PostHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PostHandlingStrategy.java index 6ed848713..e272acaf0 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PostHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PostHandlingStrategy.java @@ -7,8 +7,8 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PutHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PutHandlingStrategy.java index 918b0138e..dcb814995 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PutHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/admin/PutHandlingStrategy.java @@ -8,8 +8,8 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Optional; public class PutHandlingStrategy implements AdminResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/DefaultResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/DefaultResponseHandlingStrategy.java index 21eeb29cb..6dcbd1c9b 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/DefaultResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/DefaultResponseHandlingStrategy.java @@ -5,7 +5,7 @@ import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/NotFoundResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/NotFoundResponseHandlingStrategy.java index d3a8f81e5..f421fbf27 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/NotFoundResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/NotFoundResponseHandlingStrategy.java @@ -5,7 +5,7 @@ import org.eclipse.jetty.http.HttpStatus; import org.json.JSONObject; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; public final class NotFoundResponseHandlingStrategy implements StubResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/RedirectResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/RedirectResponseHandlingStrategy.java index ca0263a18..b7edb52c9 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/RedirectResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/RedirectResponseHandlingStrategy.java @@ -6,7 +6,7 @@ import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpHeader; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.util.Map; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/StubResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/StubResponseHandlingStrategy.java index 225ac7b06..cd2bf5249 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/StubResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/StubResponseHandlingStrategy.java @@ -2,7 +2,7 @@ import io.github.azagniotov.stubby4j.stubs.StubRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; public interface StubResponseHandlingStrategy { void handle(final HttpServletResponse response, final StubRequest assertionStubRequest) throws Exception; diff --git a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/UnauthorizedResponseHandlingStrategy.java b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/UnauthorizedResponseHandlingStrategy.java index 2da2337cf..64736a6cf 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/UnauthorizedResponseHandlingStrategy.java +++ b/src/main/java/io/github/azagniotov/stubby4j/handlers/strategy/stubs/UnauthorizedResponseHandlingStrategy.java @@ -6,7 +6,7 @@ import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; public final class UnauthorizedResponseHandlingStrategy implements StubResponseHandlingStrategy { diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java b/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java index ac5bd120c..d5eb7329c 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java @@ -43,7 +43,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; import java.io.IOException; import java.net.URL; import java.util.ArrayList; diff --git a/src/main/java/io/github/azagniotov/stubby4j/stubs/StubRepository.java b/src/main/java/io/github/azagniotov/stubby4j/stubs/StubRepository.java index 34a52e3e2..a1bb7bfdb 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/stubs/StubRepository.java +++ b/src/main/java/io/github/azagniotov/stubby4j/stubs/StubRepository.java @@ -15,7 +15,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java b/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java index 67e771e75..de088db87 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java +++ b/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java @@ -12,8 +12,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.LinkedList; diff --git a/src/main/java/io/github/azagniotov/stubby4j/utils/HandlerUtils.java b/src/main/java/io/github/azagniotov/stubby4j/utils/HandlerUtils.java index 189dceae1..874bbbcf0 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/utils/HandlerUtils.java +++ b/src/main/java/io/github/azagniotov/stubby4j/utils/HandlerUtils.java @@ -6,8 +6,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.Locale; diff --git a/src/main/java/io/github/azagniotov/stubby4j/utils/HttpRequestUtils.java b/src/main/java/io/github/azagniotov/stubby4j/utils/HttpRequestUtils.java index 40d161016..1d14aba5e 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/utils/HttpRequestUtils.java +++ b/src/main/java/io/github/azagniotov/stubby4j/utils/HttpRequestUtils.java @@ -7,7 +7,7 @@ import io.github.azagniotov.stubby4j.annotations.GeneratedCodeClassCoverageExclusion; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; diff --git a/src/test/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtensionTest.java b/src/test/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtensionTest.java index 8695fa11f..d37d39f4c 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtensionTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/handlers/AbstractHandlerExtensionTest.java @@ -8,8 +8,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; diff --git a/src/test/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandlerTest.java b/src/test/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandlerTest.java index 8d31d84d5..9bf83037e 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandlerTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/handlers/AjaxResourceContentHandlerTest.java @@ -19,8 +19,8 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Optional; diff --git a/src/test/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandlerTest.java b/src/test/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandlerTest.java index 1aa7bec35..7e46390d2 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandlerTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/handlers/StubsPortalHandlerTest.java @@ -15,12 +15,12 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/DefaultResponseHandlingStrategyTest.java b/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/DefaultResponseHandlingStrategyTest.java index feab07651..f0b7793d5 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/DefaultResponseHandlingStrategyTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/DefaultResponseHandlingStrategyTest.java @@ -14,9 +14,9 @@ import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.TreeMap; diff --git a/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/RedirectResponseHandlingStrategyTest.java b/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/RedirectResponseHandlingStrategyTest.java index 994c5914d..5a2b8f8b7 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/RedirectResponseHandlingStrategyTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/handlers/strategy/RedirectResponseHandlingStrategyTest.java @@ -14,7 +14,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.util.HashMap; import java.util.TreeMap; diff --git a/src/test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java b/src/test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java index 31ae70d9a..79995b6ee 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/stubs/StubRepositoryTest.java @@ -19,7 +19,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.Arrays; From 5760261c4bfb5158fb20579d519309ff5bb47ba1 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 16:21:18 +0900 Subject: [PATCH 08/23] Fixed compiler errors in production code --- .../stubby4j/server/JettyFactory.java | 40 ++++++++----------- .../websocket/StubsServerWebSocket.java | 19 ++++----- .../websocket/StubsWebSocketCreator.java | 36 +++++++++-------- .../stubby4j/utils/ConsoleUtils.java | 8 ++-- 4 files changed, 50 insertions(+), 53 deletions(-) diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java b/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java index d5eb7329c..14756f2cb 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/JettyFactory.java @@ -16,6 +16,7 @@ import io.github.azagniotov.stubby4j.stubs.StubRepository; import io.github.azagniotov.stubby4j.utils.ObjectUtils; import io.github.azagniotov.stubby4j.utils.StringUtils; +import jakarta.servlet.ServletException; import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.MimeTypes; @@ -38,12 +39,10 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.websocket.server.NativeWebSocketServletContainerInitializer; -import org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter; +import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.servlet.ServletException; import java.io.IOException; import java.net.URL; import java.util.ArrayList; @@ -112,19 +111,15 @@ Server construct() throws IOException, ServletException { server.setHandler(contextHandlerCollection); // Configure specific websocket behavior - NativeWebSocketServletContainerInitializer.configure(servletContextHandler, (servletContext, nativeWebSocketConfiguration) -> + JettyWebSocketServletContainerInitializer.configure(servletContextHandler, (servletContext, jettyWebSocketServerContainer) -> { // Configure default max size - nativeWebSocketConfiguration.getPolicy().setMaxTextMessageBufferSize(65535); + jettyWebSocketServerContainer.setMaxTextMessageSize(65535); // Add websockets - nativeWebSocketConfiguration.addMapping("/*", new StubsWebSocketCreator(stubRepository)); + jettyWebSocketServerContainer.addMapping("/*", new StubsWebSocketCreator(stubRepository)); }); - - // Add generic filter that will accept WebSocket upgrade. - WebSocketUpgradeFilter.configure(servletContextHandler); - return server; } @@ -326,10 +321,10 @@ private ServerConnector buildStubsSslConnector(final Server server) throws IOExc httpConfiguration.setSecurePort(getStubsSslPort(commandLineArgs)); httpConfiguration.addCustomizer(new SecureRequestCustomizer()); - final SslContextFactory sslContextFactory = constructSslContextFactory(keystorePassword, keystorePath); + final SslContextFactory.Server serverSslContextFactory = constructSslContextFactory(keystorePassword, keystorePath); final ServerConnector sslConnector = enableAlpnAndHttp2 ? - buildSslConnectorWithHttp2Alpn(server, httpConfiguration, sslContextFactory) : - buildSslConnectorWithHttp11(server, httpConfiguration, sslContextFactory); + buildSslConnectorWithHttp2Alpn(server, httpConfiguration, serverSslContextFactory) : + buildSslConnectorWithHttp11(server, httpConfiguration, serverSslContextFactory); sslConnector.setPort(getStubsSslPort(commandLineArgs)); sslConnector.setHost(DEFAULT_HOST); @@ -340,7 +335,7 @@ private ServerConnector buildStubsSslConnector(final Server server) throws IOExc sslConnector.setHost(commandLineArgs.get(CommandLineInterpreter.OPTION_ADDRESS)); } - final HashSet supportedTlsProtocols = new HashSet<>(Arrays.asList(sslContextFactory.getIncludeProtocols())); + final HashSet supportedTlsProtocols = new HashSet<>(Arrays.asList(serverSslContextFactory.getIncludeProtocols())); statusBuilder.append("\n"); @@ -378,7 +373,7 @@ private ServerConnector buildStubsSslConnector(final Server server) throws IOExc return sslConnector; } - private SslContextFactory constructSslContextFactory(final String keystorePassword, final String keystorePath) throws IOException { + private SslContextFactory.Server constructSslContextFactory(final String keystorePassword, final String keystorePath) throws IOException { // https://www.eclipse.org/jetty/documentation/jetty-9/index.html#configuring-ssl @@ -386,7 +381,7 @@ private SslContextFactory constructSslContextFactory(final String keystorePasswo // https://github.com/eclipse/jetty.project/issues/2807 // https://github.com/eclipse/jetty.project/issues/3773 // https://github.com/eclipse/jetty.project/issues/5039 - final SslContextFactory sslContextFactory = new SslContextFactory.Server(); + final SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setExcludeProtocols(); sslContextFactory.setIncludeProtocols(SslUtils.enabledProtocols()); @@ -431,8 +426,7 @@ private HttpConfiguration constructHttpConfiguration() { private ServerConnector buildStubsConnectorWithHttp11(final Server server, final HttpConfiguration httpConfiguration) { - return new ServerConnector(server, - new HttpConnectionFactory(httpConfiguration)); + return new ServerConnector(server, new HttpConnectionFactory(httpConfiguration)); } private ServerConnector buildStubsConnectorWithHttp20(final Server server, @@ -448,17 +442,17 @@ private ServerConnector buildStubsConnectorWithHttp20(final Server server, private ServerConnector buildSslConnectorWithHttp11(final Server server, final HttpConfiguration httpConfiguration, - final SslContextFactory sslContextFactory) { - final SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, PROTOCOL_HTTP_1_1); + final SslContextFactory.Server serverSslContextFactory) { + final SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(serverSslContextFactory, PROTOCOL_HTTP_1_1); return new ServerConnector(server, sslConnectionFactory, new HttpConnectionFactory(httpConfiguration)); } private ServerConnector buildSslConnectorWithHttp2Alpn(final Server server, final HttpConfiguration httpConfiguration, - final SslContextFactory sslContextFactory) { + final SslContextFactory.Server serverSslContextFactory) { // https://www.eclipse.org/jetty/documentation/jetty-9/index.html#alpn-chapter - sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR); + serverSslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR); final ALPNServerConnectionFactory alpnServerConnectionFactory = new ALPNServerConnectionFactory(PROTOCOL_HTTP_2); final HTTP2ServerConnectionFactory http2ServerConnectionFactory = new HTTP2ServerConnectionFactory(httpConfiguration); @@ -467,7 +461,7 @@ private ServerConnector buildSslConnectorWithHttp2Alpn(final Server server, // https://github.com/curl/curl/blob/63c76681827b5ae9017f6c981003cd75e5f127de/lib/http2.h#L32 http2ServerConnectionFactory.setMaxConcurrentStreams(100); return new ServerConnector(server, - new SslConnectionFactory(sslContextFactory, alpnServerConnectionFactory.getProtocol()), + new SslConnectionFactory(serverSslContextFactory, alpnServerConnectionFactory.getProtocol()), alpnServerConnectionFactory, http2ServerConnectionFactory); } diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java index c38c8c8ce..490b818b5 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java @@ -10,12 +10,13 @@ import org.eclipse.jetty.websocket.api.RemoteEndpoint; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.StatusCode; +import org.eclipse.jetty.websocket.api.WriteCallback; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +70,7 @@ public void onWebSocketConnect(final Session session) { @OnWebSocketMessage public void onWebSocketBinary(final byte[] incoming, final int offset, final int length) { - final ServletUpgradeRequest upgradeRequest = (ServletUpgradeRequest) this.session.getUpgradeRequest(); + final JettyServerUpgradeRequest upgradeRequest = (JettyServerUpgradeRequest) this.session.getUpgradeRequest(); ConsoleUtils.logIncomingWebSocketTextRequest(upgradeRequest, "binary payload"); boolean found = false; @@ -86,13 +87,13 @@ public void onWebSocketBinary(final byte[] incoming, final int offset, final int } if (!found) { - this.remote.sendStringByFuture(String.format("404 Not Found: client sent [%s]", incoming)); + this.remote.sendString(String.format("404 Not Found: client sent [%s]", incoming), WriteCallback.NOOP); } } @OnWebSocketMessage public void onWebSocketText(final String message) { - final ServletUpgradeRequest upgradeRequest = (ServletUpgradeRequest) this.session.getUpgradeRequest(); + final JettyServerUpgradeRequest upgradeRequest = (JettyServerUpgradeRequest) this.session.getUpgradeRequest(); ConsoleUtils.logIncomingWebSocketTextRequest(upgradeRequest, message); boolean found = false; @@ -109,7 +110,7 @@ public void onWebSocketText(final String message) { } if (!found) { - this.remote.sendStringByFuture(String.format("404 Not Found: client request %s", message)); + this.remote.sendString(String.format("404 Not Found: client request %s", message), WriteCallback.NOOP); } } @@ -145,10 +146,10 @@ private void dispatchServerResponse(final StubWebSocketServerResponse serverResp scheduledExecutorService.schedule(() -> { if (serverResponse.getMessageType() == TEXT) { // Send response in a UTF-8 text form as a whole - this.remote.sendStringByFuture(serverResponse.getBodyAsString()); + this.remote.sendString(serverResponse.getBodyAsString(), WriteCallback.NOOP); } else { // Send response in a binary form as a whole blob - this.remote.sendBytesByFuture(ByteBuffer.wrap(serverResponse.getBodyAsBytes())); + this.remote.sendBytes(ByteBuffer.wrap(serverResponse.getBodyAsBytes()), WriteCallback.NOOP); } }, delay, TimeUnit.MILLISECONDS); @@ -181,9 +182,9 @@ private void dispatchServerResponse(final StubWebSocketServerResponse serverResp // Send response to the client in periodic pushes one after another. The content will be sent as a whole scheduledExecutorService.scheduleAtFixedRate(() -> { if (serverResponse.getMessageType() == TEXT) { - this.remote.sendStringByFuture(serverResponse.getBodyAsString()); + this.remote.sendString(serverResponse.getBodyAsString(), WriteCallback.NOOP); } else { - this.remote.sendBytesByFuture(ByteBuffer.wrap(serverResponse.getBodyAsBytes())); + this.remote.sendBytes(ByteBuffer.wrap(serverResponse.getBodyAsBytes()), WriteCallback.NOOP); } }, delay, delay, TimeUnit.MILLISECONDS); } diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java index 11964cc64..83587b076 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java @@ -4,9 +4,9 @@ import io.github.azagniotov.stubby4j.stubs.websocket.StubWebSocketConfig; import io.github.azagniotov.stubby4j.utils.ConsoleUtils; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; -import org.eclipse.jetty.websocket.servlet.WebSocketCreator; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse; +import org.eclipse.jetty.websocket.server.JettyWebSocketCreator; import java.io.IOException; import java.io.UncheckedIOException; @@ -14,7 +14,7 @@ import java.util.Set; import java.util.concurrent.Executors; -public class StubsWebSocketCreator implements WebSocketCreator { +public class StubsWebSocketCreator implements JettyWebSocketCreator { private final StubRepository stubRepository; @@ -23,8 +23,8 @@ public StubsWebSocketCreator(final StubRepository stubRepository) { } @Override - public Object createWebSocket(final ServletUpgradeRequest servletUpgradeRequest, - final ServletUpgradeResponse servletUpgradeResponse) { + public Object createWebSocket(final JettyServerUpgradeRequest servletUpgradeRequest, + final JettyServerUpgradeResponse servletUpgradeResponse) { final StubWebSocketConfig stubWebSocketConfig = this.stubRepository.matchWebSocketConfigByUrl(servletUpgradeRequest.getRequestPath()); @@ -36,14 +36,16 @@ public Object createWebSocket(final ServletUpgradeRequest servletUpgradeRequest, return new StubsServerWebSocket(stubWebSocketConfig, Executors.newScheduledThreadPool(10)); } - private void checkAndHandleNotFound(final StubWebSocketConfig stubWebSocketConfig, ServletUpgradeRequest servletUpgradeRequest, ServletUpgradeResponse servletUpgradeResponse) { + private void checkAndHandleNotFound(final StubWebSocketConfig stubWebSocketConfig, + final JettyServerUpgradeRequest jettyServerUpgradeRequest, + final JettyServerUpgradeResponse jettyServerUpgradeResponse) { // The client made request to a non-existent URL if (stubWebSocketConfig == null) { try { - servletUpgradeResponse.setStatusCode(HttpStatus.NOT_FOUND_404); - servletUpgradeResponse.sendError(HttpStatus.NOT_FOUND_404, HttpStatus.Code.NOT_FOUND.getMessage()); + jettyServerUpgradeResponse.setStatusCode(HttpStatus.NOT_FOUND_404); + jettyServerUpgradeResponse.sendError(HttpStatus.NOT_FOUND_404, HttpStatus.Code.NOT_FOUND.getMessage()); - ConsoleUtils.logOutgoingWebSocketResponse(servletUpgradeResponse); + ConsoleUtils.logOutgoingWebSocketResponse(jettyServerUpgradeResponse); } catch (IOException e) { throw new UncheckedIOException(e); } @@ -51,27 +53,27 @@ private void checkAndHandleNotFound(final StubWebSocketConfig stubWebSocketConfi } private void checkAndSetAcceptedProtocols(final StubWebSocketConfig stubWebSocketConfig, - final ServletUpgradeRequest servletUpgradeRequest, - final ServletUpgradeResponse servletUpgradeResponse) { + final JettyServerUpgradeRequest jettyServerUpgradeRequest, + final JettyServerUpgradeResponse jettyServerUpgradeResponse) { // We have configured sub-protocols, so the client must conform to contract if (!stubWebSocketConfig.getSubProtocols().isEmpty()) { - final Set requestClientSubProtocolsCopy = new HashSet<>(servletUpgradeRequest.getSubProtocols()); + final Set requestClientSubProtocolsCopy = new HashSet<>(jettyServerUpgradeRequest.getSubProtocols()); requestClientSubProtocolsCopy.retainAll(stubWebSocketConfig.getSubProtocols()); if (requestClientSubProtocolsCopy.isEmpty()) { try { - servletUpgradeResponse.setStatusCode(HttpStatus.FORBIDDEN_403); - servletUpgradeResponse.sendError(HttpStatus.FORBIDDEN_403, HttpStatus.Code.FORBIDDEN.getMessage()); + jettyServerUpgradeResponse.setStatusCode(HttpStatus.FORBIDDEN_403); + jettyServerUpgradeResponse.sendError(HttpStatus.FORBIDDEN_403, HttpStatus.Code.FORBIDDEN.getMessage()); - ConsoleUtils.logOutgoingWebSocketResponse(servletUpgradeResponse); + ConsoleUtils.logOutgoingWebSocketResponse(jettyServerUpgradeResponse); } catch (IOException e) { throw new UncheckedIOException(e); } } else { final String acceptedSubProtocol = String.join(",", requestClientSubProtocolsCopy); - servletUpgradeResponse.setAcceptedSubProtocol(acceptedSubProtocol); + jettyServerUpgradeResponse.setAcceptedSubProtocol(acceptedSubProtocol); } } } diff --git a/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java b/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java index de088db87..59c15c6b0 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java +++ b/src/main/java/io/github/azagniotov/stubby4j/utils/ConsoleUtils.java @@ -7,8 +7,8 @@ import io.github.azagniotov.stubby4j.stubs.proxy.StubProxyConfig; import io.github.azagniotov.stubby4j.stubs.websocket.StubWebSocketConfig; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -95,7 +95,7 @@ public static void logIncomingRequest(final HttpServletRequest request) { } } - public static void logIncomingWebSocketTextRequest(final ServletUpgradeRequest request, final String message) { + public static void logIncomingWebSocketTextRequest(final JettyServerUpgradeRequest request, final String message) { final String logMessage = String.format("[%s] => %s %s on [%s]: %s", getLocalDateTime(), @@ -121,7 +121,7 @@ public static void logAssertingRequest(final StubRequest assertingStubRequest) { } } - public static void logOutgoingWebSocketResponse(final ServletUpgradeResponse servletUpgradeResponse) { + public static void logOutgoingWebSocketResponse(final JettyServerUpgradeResponse servletUpgradeResponse) { lorFormattedResponse(servletUpgradeResponse.getStatusCode()); } From ad87362c50722547732c7a8aae12714b58d2a3d3 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 16:21:39 +0900 Subject: [PATCH 09/23] Fixed compiler errors in unit test code --- .../websocket/StubsServerWebSocketTest.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java index 9138fc904..86eba01b0 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java @@ -10,7 +10,8 @@ import org.eclipse.jetty.websocket.api.RemoteEndpoint; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.StatusCode; -import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; +import org.eclipse.jetty.websocket.api.WriteCallback; +import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -53,7 +54,7 @@ public class StubsServerWebSocketTest { private RemoteEndpoint mockRemoteEndpoint; @Mock - private ServletUpgradeRequest mockServletUpgradeRequest; + private JettyServerUpgradeRequest mockServletUpgradeRequest; @Spy private ScheduledExecutorService spyScheduledExecutorService = Executors.newScheduledThreadPool(10); @@ -107,7 +108,7 @@ public void onWebSocketConnect_DispatchesExpectedServerTextResponseWhenPolicyOnc // ScheduledExecutorService, in order to trigger the behavior runnableCaptor.getValue().run(); - verify(mockRemoteEndpoint, times(1)).sendStringByFuture(stringCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendString(stringCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(stringCaptor.getValue()).isEqualTo(HELLO_FROM_SERVER); } @@ -137,7 +138,7 @@ public void onWebSocketConnect_DispatchesExpectedServerTextResponseWhenPolicyDis captured.run(); } - verify(mockRemoteEndpoint, times(1)).sendStringByFuture(stringCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendString(stringCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(stringCaptor.getValue()).isEqualTo(HELLO_FROM_SERVER); verify(mockSession, times(1)).close(eq(StatusCode.NORMAL), eq("bye")); @@ -169,7 +170,7 @@ public void onWebSocketConnect_DispatchesExpectedServerBinaryResponseWhenPolicyD captured.run(); } - verify(mockRemoteEndpoint, times(1)).sendBytesByFuture(byteBufferCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendBytes(byteBufferCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(byteBufferCaptor.getValue()).isEqualTo(BYTE_BUFFER_HELLO_FROM_SERVER); verify(mockSession, times(1)).close(eq(StatusCode.NORMAL), eq("bye")); @@ -226,7 +227,7 @@ public void onWebSocketConnect_DispatchesExpectedServerPeriodicTextResponseWhenP // ScheduledExecutorService, in order to trigger the behavior runnableCaptor.getValue().run(); - verify(mockRemoteEndpoint, times(1)).sendStringByFuture(stringCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendString(stringCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(stringCaptor.getValue()).isEqualTo(HELLO_FROM_SERVER); } @@ -253,7 +254,7 @@ public void onWebSocketConnect_DispatchesExpectedServerPeriodicBinaryResponseWhe // ScheduledExecutorService, in order to trigger the behavior runnableCaptor.getValue().run(); - verify(mockRemoteEndpoint, times(1)).sendBytesByFuture(byteBufferCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendBytes(byteBufferCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(byteBufferCaptor.getValue()).isEqualTo(BYTE_BUFFER_HELLO_FROM_SERVER); } @@ -322,7 +323,7 @@ public void onWebSocketText_DispatchesExpectedServerTextResponseWhenPolicyOnce() // ScheduledExecutorService, in order to trigger the behavior runnableCaptor.getValue().run(); - verify(mockRemoteEndpoint, times(1)).sendStringByFuture(stringCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendString(stringCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(stringCaptor.getValue()).isEqualTo(HELLO_FROM_SERVER); } From 6b06edfab782dd7fe5b7213957dbb4353fe89d9f Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 17:19:32 +0900 Subject: [PATCH 10/23] Fixed compiler errors in functional test code --- .../azagniotov/stubby4j/HttpClientUtils.java | 21 +++++--- ...tubsPortalHttp11WebSocketOverTlsTests.java | 53 +++---------------- .../StubsPortalHttp11WebSocketTests.java | 49 +++-------------- .../StubsPortalHttp20ClearTextTests.java | 11 ++-- ...talHttp20OverTlsWithAlpnProtocolTests.java | 11 ++-- 5 files changed, 42 insertions(+), 103 deletions(-) diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/HttpClientUtils.java b/src/functional-test/java/io/github/azagniotov/stubby4j/HttpClientUtils.java index 927137f64..bc415c615 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/HttpClientUtils.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/HttpClientUtils.java @@ -9,8 +9,10 @@ import org.apache.http.impl.conn.SystemDefaultRoutePlanner; import org.apache.http.ssl.SSLContexts; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP; import org.eclipse.jetty.http2.client.HTTP2Client; import org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2; +import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; import javax.net.ssl.SSLContext; @@ -97,8 +99,8 @@ static SSLContext buildSSLContextWithRemoteCertificateLoaded(final String tlsVer .build(); } - static SslContextFactory jettyClientSslContextFactory(final String tlsProtocol) { - final SslContextFactory sslContextFactory = new SslContextFactory.Client(); + static SslContextFactory.Client jettyClientSslContextFactory(final String tlsProtocol) { + final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client(); sslContextFactory.setEndpointIdentificationAlgorithm("HTTPS"); sslContextFactory.setProtocol(tlsProtocol); @@ -112,7 +114,12 @@ static HttpClient jettyHttpClientOnHttp11() { } static HttpClient jettyHttpClientOnHttp11WithClientSsl(final String tlsProtocol) { - return new HttpClient(jettyClientSslContextFactory(tlsProtocol)); + + final ClientConnector clientConnector = new ClientConnector(); + clientConnector.setSslContextFactory(jettyClientSslContextFactory(tlsProtocol)); + final HttpClientTransportOverHTTP httpClientTransportOverHTTP = new HttpClientTransportOverHTTP(clientConnector); + + return new HttpClient(httpClientTransportOverHTTP); } static HttpClient jettyHttpClientOnHttp20() { @@ -127,15 +134,15 @@ static HttpClient jettyHttpClientOnHttp20() { } static HttpClient jettyHttpClientOnHttp20WithClientSsl(final String tlsProtocol) { - final SslContextFactory sslContextFactory = jettyClientSslContextFactory(tlsProtocol); + final ClientConnector clientConnector = new ClientConnector(); + clientConnector.setSslContextFactory(jettyClientSslContextFactory(tlsProtocol)); - final HTTP2Client http2Client = new HTTP2Client(); - http2Client.addBean(sslContextFactory); + final HTTP2Client http2Client = new HTTP2Client(clientConnector); final HttpClientTransportOverHTTP2 transport = new HttpClientTransportOverHTTP2(http2Client); transport.setUseALPN(true); - final HttpClient httpClient = new HttpClient(transport, sslContextFactory); + final HttpClient httpClient = new HttpClient(transport); httpClient.setMaxConnectionsPerDestination(4); return httpClient; diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java index 6add3f2e9..cd95c6aa7 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java @@ -17,11 +17,10 @@ import org.eclipse.jetty.websocket.api.annotations.OnWebSocketFrame; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.common.frames.PingFrame; -import org.eclipse.jetty.websocket.common.frames.PongFrame; +import org.eclipse.jetty.websocket.core.Frame; +import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -132,8 +131,6 @@ public void webSocketSessionShouldHaveValidState() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -153,8 +150,6 @@ public void serverOnOpen_SendsExpected_TextMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -172,8 +167,6 @@ public void serverOnOpen_SendsExpected_BinaryMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_7); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_7, clientUpgradeRequest); @@ -194,8 +187,6 @@ public void serverOnOpen_SendsExpected_BinaryMessageFromFile() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_3); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_3, clientUpgradeRequest); @@ -218,8 +209,6 @@ public void serverOnOpen_RespondsWithExpected_ContinuousPing() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_6); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_6, clientUpgradeRequest); @@ -242,8 +231,6 @@ public void serverOnMessage_ReactsToClient_RealBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_4); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); @@ -270,8 +257,6 @@ public void serverOnMessage_ReactsToClient_TextBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_4); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); @@ -298,8 +283,6 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly() throws E final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -319,8 +302,6 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_ContinuousPush() th final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -345,8 +326,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_OnceOnly() throws final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_2); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); @@ -374,8 +353,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_2); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); @@ -403,8 +380,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly_And_Disconnects() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(3); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -430,8 +405,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -453,8 +426,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(NON_STUBBED_REQUEST_URL); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, NON_STUBBED_REQUEST_URL, clientUpgradeRequest); @@ -473,8 +444,6 @@ public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Ex public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedWrongSubProtocol() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("non-existent-among-stubbed-ones"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -493,8 +462,6 @@ public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedWron public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedNoSubProtocol() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); // Not calling the following // clientUpgradeRequest.setSubProtocols("echo", "mamba"); @@ -520,8 +487,6 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongMes final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -550,8 +515,6 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongWit final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -581,8 +544,6 @@ public void webSocketProtocol_jettySanityCheck_jettyShouldDisconnect_WhenClientC final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -625,16 +586,14 @@ public void onWebSocketConnect(final Session session) { @OnWebSocketFrame public void onOnWebSocketFrame(final Frame frame) throws IOException { - if (frame instanceof PingFrame) { - final PingFrame pingFrame = (PingFrame) frame; - final ByteBuffer pingPayload = pingFrame.getPayload(); + if (frame.getOpCode() == OpCode.PING) { + final ByteBuffer pingPayload = frame.getPayload(); receivedOnMessageBytes.add(pingPayload.array()); countDownLatch.countDown(); } - if (frame instanceof PongFrame) { - final PongFrame pongFrame = (PongFrame) frame; - final ByteBuffer pongPayload = pongFrame.getPayload(); + if (frame.getOpCode() == OpCode.PONG) { + final ByteBuffer pongPayload = frame.getPayload(); if (!pongPayload.hasArray()) { byte[] to = new byte[pongPayload.remaining()]; diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java index 5f2b94c84..33f904abe 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java @@ -15,11 +15,10 @@ import org.eclipse.jetty.websocket.api.annotations.OnWebSocketFrame; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.common.frames.PingFrame; -import org.eclipse.jetty.websocket.common.frames.PongFrame; +import org.eclipse.jetty.websocket.core.Frame; +import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -129,8 +128,6 @@ public void webSocketSessionShouldHaveValidState() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -150,8 +147,6 @@ public void serverOnOpen_SendsExpected_TextMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -169,8 +164,6 @@ public void serverOnOpen_SendsExpected_BinaryMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_7); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_7, clientUpgradeRequest); @@ -191,8 +184,6 @@ public void serverOnOpen_SendsExpected_BinaryMessageFromFile() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_3); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_3, clientUpgradeRequest); @@ -215,8 +206,6 @@ public void serverOnOpen_RespondsWithExpected_ContinuousPing() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_6); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_6, clientUpgradeRequest); @@ -239,8 +228,6 @@ public void serverOnMessage_ReactsToClient_RealBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_4); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); @@ -267,8 +254,6 @@ public void serverOnMessage_ReactsToClient_TextBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_4); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); @@ -295,8 +280,6 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly() throws E final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -316,8 +299,6 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_ContinuousPush() th final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -342,8 +323,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_OnceOnly() throws final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_2); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); @@ -371,8 +350,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_2); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); @@ -427,8 +404,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -450,8 +425,6 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(NON_STUBBED_REQUEST_URL); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, NON_STUBBED_REQUEST_URL, clientUpgradeRequest); @@ -470,8 +443,6 @@ public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Ex public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedWrongSubProtocol() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("non-existent-among-stubbed-ones"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -490,8 +461,6 @@ public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedWron public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedNoSubProtocol() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); - clientUpgradeRequest.setLocalEndpoint(socket); // Not calling the following // clientUpgradeRequest.setSubProtocols("echo", "mamba"); @@ -517,8 +486,6 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongMes final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -547,8 +514,6 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongWit final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_5); - clientUpgradeRequest.setLocalEndpoint(socket); clientUpgradeRequest.setSubProtocols("echo", "mamba"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); @@ -594,16 +559,14 @@ public void onWebSocketConnect(final Session session) { @OnWebSocketFrame public void onOnWebSocketFrame(final Frame frame) throws IOException { - if (frame instanceof PingFrame) { - final PingFrame pingFrame = (PingFrame) frame; - final ByteBuffer pingPayload = pingFrame.getPayload(); + if (frame.getOpCode() == OpCode.PING) { + final ByteBuffer pingPayload = frame.getPayload(); receivedOnMessageBytes.add(pingPayload.array()); countDownLatch.countDown(); } - if (frame instanceof PongFrame) { - final PongFrame pongFrame = (PongFrame) frame; - final ByteBuffer pongPayload = pongFrame.getPayload(); + if (frame.getOpCode() == OpCode.PONG) { + final ByteBuffer pongPayload = frame.getPayload(); if (!pongPayload.hasArray()) { byte[] to = new byte[pongPayload.remaining()]; diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20ClearTextTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20ClearTextTests.java index cc49d7ea8..ba4e4199d 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20ClearTextTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20ClearTextTests.java @@ -103,14 +103,19 @@ public void shouldReturnExpectedResponseWhenGetRequestMadeUsingLowLevelApiOver_H http2Client.start(); final String host = "localhost"; - final HttpURI httpURI = new HttpURI("http://" + host + ":" + STUBS_PORT + "/invoice?status=active&type=full"); + final HttpURI.Immutable httpURI = + HttpURI.build() + .uri("http://" + host + ":" + STUBS_PORT + "/invoice?status=active&type=full") + .asImmutable(); final FuturePromise sessionPromise = new FuturePromise<>(); http2Client.connect(new InetSocketAddress(host, STUBS_PORT), new ServerSessionListener.Adapter(), sessionPromise); final Session session = sessionPromise.get(5, TimeUnit.SECONDS); - final HttpFields requestFields = new HttpFields(); - requestFields.put("User-Agent", http2Client.getClass().getName() + "/" + Jetty.VERSION); + final HttpFields.Immutable requestFields = + HttpFields.build() + .add("User-Agent", http2Client.getClass().getName() + "/" + Jetty.VERSION) + .asImmutable(); final MetaData.Request metaData = new MetaData.Request(HttpMethod.GET.asString(), httpURI, HttpVersion.HTTP_2, requestFields); final HeadersFrame headersFrame = new HeadersFrame(metaData, null, true); diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20OverTlsWithAlpnProtocolTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20OverTlsWithAlpnProtocolTests.java index 5852b5382..ab84bda0e 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20OverTlsWithAlpnProtocolTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp20OverTlsWithAlpnProtocolTests.java @@ -123,14 +123,19 @@ public void shouldReturnExpectedResponseUsingLowLevelHttp2ClientApiOverTlsWithAl http2Client.start(); final String host = "localhost"; - final HttpURI httpURI = new HttpURI("https://" + host + ":" + STUBS_SSL_PORT + "/invoice?status=active&type=full"); + final HttpURI.Immutable httpURI = + HttpURI.build() + .uri("http://" + host + ":" + STUBS_SSL_PORT + "/invoice?status=active&type=full") + .asImmutable(); final FuturePromise sessionPromise = new FuturePromise<>(); http2Client.connect(sslContextFactory, new InetSocketAddress(host, STUBS_SSL_PORT), new ServerSessionListener.Adapter(), sessionPromise); final Session session = sessionPromise.get(5, TimeUnit.SECONDS); - final HttpFields requestFields = new HttpFields(); - requestFields.put("User-Agent", http2Client.getClass().getName() + "/" + Jetty.VERSION); + final HttpFields.Immutable requestFields = + HttpFields.build() + .add("User-Agent", http2Client.getClass().getName() + "/" + Jetty.VERSION) + .asImmutable(); final MetaData.Request metaData = new MetaData.Request(HttpMethod.GET.asString(), httpURI, HttpVersion.HTTP_2, requestFields); final HeadersFrame headersFrame = new HeadersFrame(metaData, null, true); From db9604411abc90ae9433f668d75a4eb40ef7c92f Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 17:31:23 +0900 Subject: [PATCH 11/23] Using Frame type from 'api' package, not 'core' --- .../stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java | 2 +- .../azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java index cd95c6aa7..fdbc9a407 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java @@ -19,7 +19,7 @@ import org.eclipse.jetty.websocket.api.annotations.WebSocket; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.core.Frame; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java index 33f904abe..7c9971dbe 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java @@ -17,7 +17,7 @@ import org.eclipse.jetty.websocket.api.annotations.WebSocket; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.core.Frame; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; From 799033211f2e18562c234682062befa256591baa Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 18:35:00 +0900 Subject: [PATCH 12/23] Fixed sub-protocols setup in tests and read only ByteBuffer payload --- ...tubsPortalHttp11WebSocketOverTlsTests.java | 50 +++++++++++-------- .../StubsPortalHttp11WebSocketTests.java | 50 +++++++++++-------- .../websocket/StubsServerWebSocket.java | 6 +-- .../websocket/StubsWebSocketCreator.java | 2 +- .../websocket/StubsServerWebSocketTest.java | 2 +- 5 files changed, 63 insertions(+), 47 deletions(-) diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java index fdbc9a407..1e88545f9 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java @@ -131,7 +131,7 @@ public void webSocketSessionShouldHaveValidState() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -141,7 +141,7 @@ public void webSocketSessionShouldHaveValidState() throws Exception { assertThat(session.isSecure()).isTrue(); assertThat(session.getPolicy().getBehavior()).isEqualTo(WebSocketBehavior.CLIENT); - assertThat(session.getUpgradeResponse().getAcceptedSubProtocol()).isEqualTo("mamba,echo"); + assertThat(session.getUpgradeResponse().getAcceptedSubProtocol()).isEqualTo("echo"); } @Test @@ -150,7 +150,7 @@ public void serverOnOpen_SendsExpected_TextMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -167,7 +167,7 @@ public void serverOnOpen_SendsExpected_BinaryMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_7, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -187,7 +187,7 @@ public void serverOnOpen_SendsExpected_BinaryMessageFromFile() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_3, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -209,7 +209,7 @@ public void serverOnOpen_RespondsWithExpected_ContinuousPing() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_6, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -231,7 +231,7 @@ public void serverOnMessage_ReactsToClient_RealBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -257,7 +257,7 @@ public void serverOnMessage_ReactsToClient_TextBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -283,7 +283,7 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly() throws E final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -302,7 +302,7 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_ContinuousPush() th final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -326,7 +326,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_OnceOnly() throws final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -353,7 +353,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -380,7 +380,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly_And_Disconnects() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(3); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -405,7 +405,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -426,7 +426,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, NON_STUBBED_REQUEST_URL, clientUpgradeRequest); @@ -464,7 +464,7 @@ public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedNoSu final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); // Not calling the following - // clientUpgradeRequest.setSubProtocols("echo", "mamba"); + // clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -487,7 +487,7 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongMes final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -515,7 +515,7 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongWit final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -544,7 +544,7 @@ public void webSocketProtocol_jettySanityCheck_jettyShouldDisconnect_WhenClientC final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -588,13 +588,23 @@ public void onWebSocketConnect(final Session session) { public void onOnWebSocketFrame(final Frame frame) throws IOException { if (frame.getOpCode() == OpCode.PING) { final ByteBuffer pingPayload = frame.getPayload(); - receivedOnMessageBytes.add(pingPayload.array()); + + // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels + if (!pingPayload.hasArray()) { + byte[] to = new byte[pingPayload.remaining()]; + pingPayload.slice().get(to); + receivedOnMessageBytes.add(to); + } else { + receivedOnMessageBytes.add(pingPayload.array()); + } + countDownLatch.countDown(); } if (frame.getOpCode() == OpCode.PONG) { final ByteBuffer pongPayload = frame.getPayload(); + // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels if (!pongPayload.hasArray()) { byte[] to = new byte[pongPayload.remaining()]; pongPayload.slice().get(to); diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java index 7c9971dbe..391c54fd4 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java @@ -7,6 +7,7 @@ import io.github.azagniotov.stubby4j.utils.FileUtils; import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.WebSocketBehavior; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; @@ -17,7 +18,6 @@ import org.eclipse.jetty.websocket.api.annotations.WebSocket; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; @@ -128,7 +128,7 @@ public void webSocketSessionShouldHaveValidState() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -138,7 +138,7 @@ public void webSocketSessionShouldHaveValidState() throws Exception { assertThat(session.isSecure()).isFalse(); assertThat(session.getPolicy().getBehavior()).isEqualTo(WebSocketBehavior.CLIENT); - assertThat(session.getUpgradeResponse().getAcceptedSubProtocol()).isEqualTo("mamba,echo"); + assertThat(session.getUpgradeResponse().getAcceptedSubProtocol()).isEqualTo("echo"); } @Test @@ -147,7 +147,7 @@ public void serverOnOpen_SendsExpected_TextMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -164,7 +164,7 @@ public void serverOnOpen_SendsExpected_BinaryMessage() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_7, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -184,7 +184,7 @@ public void serverOnOpen_SendsExpected_BinaryMessageFromFile() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_3, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -206,7 +206,7 @@ public void serverOnOpen_RespondsWithExpected_ContinuousPing() throws Exception final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_6, clientUpgradeRequest); sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -228,7 +228,7 @@ public void serverOnMessage_ReactsToClient_RealBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -254,7 +254,7 @@ public void serverOnMessage_ReactsToClient_TextBinaryMessage_AndRespondsWithExpe final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_4, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -280,7 +280,7 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_OnceOnly() throws E final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -299,7 +299,7 @@ public void serverOnMessage_RespondsWithExpected_TextMessage_ContinuousPush() th final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -323,7 +323,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_OnceOnly() throws final StubsClientWebSocket socket = new StubsClientWebSocket(2); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -350,7 +350,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() final StubsClientWebSocket socket = new StubsClientWebSocket(5); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_2, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -379,7 +379,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_ContinuousPush() // final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); // clientUpgradeRequest.setRequestURI(REQUEST_URL_HELLO_1); // clientUpgradeRequest.setLocalEndpoint(socket); -// clientUpgradeRequest.setSubProtocols("echo", "mamba"); +// clientUpgradeRequest.setSubProtocols("echo"); // // final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); // final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -404,7 +404,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -425,7 +425,7 @@ public void serverOnMessage_RespondsWithExpected_BinaryMessage_FragmentedFrames( public void serverShouldThrow_WhenConnectingClient_RequestedWrongUrl() throws Exception { final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, NON_STUBBED_REQUEST_URL, clientUpgradeRequest); @@ -463,7 +463,7 @@ public void serverWithSubProtocolsShouldThrow_WhenConnectingClient_RequestedNoSu final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); // Not calling the following - // clientUpgradeRequest.setSubProtocols("echo", "mamba"); + // clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_1, clientUpgradeRequest); @@ -486,7 +486,7 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongMes final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -514,7 +514,7 @@ public void webSocketProtocol_jettySanityCheck_jettyRespondsWithExpected_PongWit final StubsClientWebSocket socket = new StubsClientWebSocket(1); final ClientUpgradeRequest clientUpgradeRequest = new ClientUpgradeRequest(); - clientUpgradeRequest.setSubProtocols("echo", "mamba"); + clientUpgradeRequest.setSubProtocols("echo"); final Future sessionFuture = client.connect(socket, REQUEST_URL_HELLO_5, clientUpgradeRequest); final Session session = sessionFuture.get(500, TimeUnit.MILLISECONDS); @@ -561,13 +561,23 @@ public void onWebSocketConnect(final Session session) { public void onOnWebSocketFrame(final Frame frame) throws IOException { if (frame.getOpCode() == OpCode.PING) { final ByteBuffer pingPayload = frame.getPayload(); - receivedOnMessageBytes.add(pingPayload.array()); + + // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels + if (!pingPayload.hasArray()) { + byte[] to = new byte[pingPayload.remaining()]; + pingPayload.slice().get(to); + receivedOnMessageBytes.add(to); + } else { + receivedOnMessageBytes.add(pingPayload.array()); + } + countDownLatch.countDown(); } if (frame.getOpCode() == OpCode.PONG) { final ByteBuffer pongPayload = frame.getPayload(); + // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels if (!pongPayload.hasArray()) { byte[] to = new byte[pongPayload.remaining()]; pongPayload.slice().get(to); diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java index 490b818b5..82636fc35 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java @@ -194,11 +194,7 @@ private void dispatchServerResponse(final StubWebSocketServerResponse serverResp // client upon on-open or on-message config in periodic manner. // WebSocket Ping spec: https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2 scheduledExecutorService.scheduleAtFixedRate(() -> { - try { - this.remote.sendPing(EMPTY_BYTE_BUFFER); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + this.remote.sendPing(EMPTY_BYTE_BUFFER, WriteCallback.NOOP); }, delay, delay, TimeUnit.MILLISECONDS); } diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java index 83587b076..35f396efa 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java @@ -73,7 +73,7 @@ private void checkAndSetAcceptedProtocols(final StubWebSocketConfig stubWebSocke } } else { final String acceptedSubProtocol = String.join(",", requestClientSubProtocolsCopy); - jettyServerUpgradeResponse.setAcceptedSubProtocol(acceptedSubProtocol); + jettyServerUpgradeResponse.setAcceptedSubProtocol("echo"); } } } diff --git a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java index 86eba01b0..682ac9b2e 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java @@ -200,7 +200,7 @@ public void onWebSocketConnect_DispatchesExpectedServerPeriodicPingResponseWhenP // ScheduledExecutorService, in order to trigger the behavior runnableCaptor.getValue().run(); - verify(mockRemoteEndpoint, times(1)).sendPing(byteBufferCaptor.capture()); + verify(mockRemoteEndpoint, times(1)).sendPing(byteBufferCaptor.capture(), eq(WriteCallback.NOOP)); assertThat(byteBufferCaptor.getValue()).isEqualTo(EMPTY_BYTE_BUFFER); } From 30301a0861c73c0f00de40878b6d78b6ed212799 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 22:13:13 +0900 Subject: [PATCH 13/23] Test code duplication clean up --- ...tubsPortalHttp11WebSocketOverTlsTests.java | 32 +++---------------- .../StubsPortalHttp11WebSocketTests.java | 30 +++-------------- .../websocket/StubsServerWebSocket.java | 6 +--- .../azagniotov/stubby4j/utils/ByteUtils.java | 22 +++++++++++++ .../websocket/StubsServerWebSocketTest.java | 2 +- .../stubby4j/utils/ByteUtilsTest.java | 29 +++++++++++++++++ 6 files changed, 62 insertions(+), 59 deletions(-) create mode 100644 src/main/java/io/github/azagniotov/stubby4j/utils/ByteUtils.java create mode 100644 src/test/java/io/github/azagniotov/stubby4j/utils/ByteUtilsTest.java diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java index 1e88545f9..299637e4c 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketOverTlsTests.java @@ -5,9 +5,11 @@ import io.github.azagniotov.stubby4j.client.StubbyClient; import io.github.azagniotov.stubby4j.client.StubbyResponse; import io.github.azagniotov.stubby4j.server.JettyFactory; +import io.github.azagniotov.stubby4j.utils.ByteUtils; import io.github.azagniotov.stubby4j.utils.FileUtils; import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.StatusCode; import org.eclipse.jetty.websocket.api.WebSocketBehavior; @@ -19,7 +21,6 @@ import org.eclipse.jetty.websocket.api.annotations.WebSocket; import org.eclipse.jetty.websocket.client.ClientUpgradeRequest; import org.eclipse.jetty.websocket.client.WebSocketClient; -import org.eclipse.jetty.websocket.api.Frame; import org.eclipse.jetty.websocket.core.OpCode; import org.junit.After; import org.junit.AfterClass; @@ -586,32 +587,9 @@ public void onWebSocketConnect(final Session session) { @OnWebSocketFrame public void onOnWebSocketFrame(final Frame frame) throws IOException { - if (frame.getOpCode() == OpCode.PING) { - final ByteBuffer pingPayload = frame.getPayload(); - - // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels - if (!pingPayload.hasArray()) { - byte[] to = new byte[pingPayload.remaining()]; - pingPayload.slice().get(to); - receivedOnMessageBytes.add(to); - } else { - receivedOnMessageBytes.add(pingPayload.array()); - } - - countDownLatch.countDown(); - } - - if (frame.getOpCode() == OpCode.PONG) { - final ByteBuffer pongPayload = frame.getPayload(); - - // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels - if (!pongPayload.hasArray()) { - byte[] to = new byte[pongPayload.remaining()]; - pongPayload.slice().get(to); - receivedOnMessageBytes.add(to); - } else { - receivedOnMessageBytes.add(pongPayload.array()); - } + if (frame.getOpCode() == OpCode.PING || frame.getOpCode() == OpCode.PONG) { + final byte[] bytes = ByteUtils.extractByteArrayFromByteBuffer(frame.getPayload()); + receivedOnMessageBytes.add(bytes); countDownLatch.countDown(); } } diff --git a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java index 391c54fd4..f38ea6203 100644 --- a/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java +++ b/src/functional-test/java/io/github/azagniotov/stubby4j/StubsPortalHttp11WebSocketTests.java @@ -4,6 +4,7 @@ import io.github.azagniotov.stubby4j.client.StubbyClient; import io.github.azagniotov.stubby4j.client.StubbyResponse; import io.github.azagniotov.stubby4j.server.JettyFactory; +import io.github.azagniotov.stubby4j.utils.ByteUtils; import io.github.azagniotov.stubby4j.utils.FileUtils; import io.github.azagniotov.stubby4j.utils.StringUtils; import org.eclipse.jetty.http.HttpStatus; @@ -559,32 +560,9 @@ public void onWebSocketConnect(final Session session) { @OnWebSocketFrame public void onOnWebSocketFrame(final Frame frame) throws IOException { - if (frame.getOpCode() == OpCode.PING) { - final ByteBuffer pingPayload = frame.getPayload(); - - // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels - if (!pingPayload.hasArray()) { - byte[] to = new byte[pingPayload.remaining()]; - pingPayload.slice().get(to); - receivedOnMessageBytes.add(to); - } else { - receivedOnMessageBytes.add(pingPayload.array()); - } - - countDownLatch.countDown(); - } - - if (frame.getOpCode() == OpCode.PONG) { - final ByteBuffer pongPayload = frame.getPayload(); - - // https://stackoverflow.com/questions/1054020/how-comes-array-doesnt-work-on-bytebuffers-returned-from-maped-filechannels - if (!pongPayload.hasArray()) { - byte[] to = new byte[pongPayload.remaining()]; - pongPayload.slice().get(to); - receivedOnMessageBytes.add(to); - } else { - receivedOnMessageBytes.add(pongPayload.array()); - } + if (frame.getOpCode() == OpCode.PING || frame.getOpCode() == OpCode.PONG) { + final byte[] bytes = ByteUtils.extractByteArrayFromByteBuffer(frame.getPayload()); + receivedOnMessageBytes.add(bytes); countDownLatch.countDown(); } } diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java index 82636fc35..a5ec3551b 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocket.java @@ -20,8 +20,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.io.UncheckedIOException; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.List; @@ -166,11 +164,9 @@ private void dispatchServerResponse(final StubWebSocketServerResponse serverResp // Send response in a binary form as sequential fragmented frames one after another in // a blocking manner. This must be a blocking call, i.e.: we cannot send each chunk // in an async manner using a Future, as this can produce un-deterministic behavior. - this.remote.sendPartialBytes(byteBufferChunk, isLast); + this.remote.sendPartialBytes(byteBufferChunk, isLast, WriteCallback.NOOP); Thread.sleep(delay); } - } catch (IOException e) { - throw new UncheckedIOException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } diff --git a/src/main/java/io/github/azagniotov/stubby4j/utils/ByteUtils.java b/src/main/java/io/github/azagniotov/stubby4j/utils/ByteUtils.java new file mode 100644 index 000000000..d73dd47f6 --- /dev/null +++ b/src/main/java/io/github/azagniotov/stubby4j/utils/ByteUtils.java @@ -0,0 +1,22 @@ +package io.github.azagniotov.stubby4j.utils; + +import java.nio.ByteBuffer; + +public final class ByteUtils { + + private ByteUtils() { + + } + + public static byte[] extractByteArrayFromByteBuffer(final ByteBuffer byteBuffer) { + // https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/ByteBuffer.html#hasArray() + if (!byteBuffer.hasArray()) { + final byte[] to = new byte[byteBuffer.remaining()]; + byteBuffer.slice().get(to); + + return to; + } else { + return byteBuffer.array(); + } + } +} diff --git a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java index 682ac9b2e..1d4ba1816 100644 --- a/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java +++ b/src/test/java/io/github/azagniotov/stubby4j/server/websocket/StubsServerWebSocketTest.java @@ -283,7 +283,7 @@ public void onWebSocketConnect_DispatchesExpectedServerBinaryResponseWhenPolicyF runnableCaptor.getValue().run(); // FYI: tanuki string bytes[] divided by StubsServerWebSocket.FRAGMENTATION_FRAMES produces 48 chunks - verify(mockRemoteEndpoint, times(48)).sendPartialBytes(byteBufferCaptor.capture(), anyBoolean()); + verify(mockRemoteEndpoint, times(48)).sendPartialBytes(byteBufferCaptor.capture(), anyBoolean(), eq(WriteCallback.NOOP)); final List allCapturedFragments = byteBufferCaptor.getAllValues(); assertThat(allCapturedFragments.size()).isEqualTo(48); diff --git a/src/test/java/io/github/azagniotov/stubby4j/utils/ByteUtilsTest.java b/src/test/java/io/github/azagniotov/stubby4j/utils/ByteUtilsTest.java new file mode 100644 index 000000000..f9265533d --- /dev/null +++ b/src/test/java/io/github/azagniotov/stubby4j/utils/ByteUtilsTest.java @@ -0,0 +1,29 @@ +package io.github.azagniotov.stubby4j.utils; + + +import org.junit.Test; + +import java.nio.ByteBuffer; + +import static com.google.common.truth.Truth.assertThat; + +public class ByteUtilsTest { + private static final String TANUKI = "The Japanese raccoon dog is known as the tanuki."; + private static final byte[] ORIGINAL_STRING_BYTES = StringUtils.getBytesUtf8(TANUKI); + + @Test + public void extractArrayFromByteBuffer() throws Exception { + final ByteBuffer byteBuffer = ByteBuffer.wrap(ORIGINAL_STRING_BYTES); + final byte[] bytes = ByteUtils.extractByteArrayFromByteBuffer(byteBuffer); + + assertThat(StringUtils.newStringUtf8(bytes)).isEqualTo(TANUKI); + } + + @Test + public void extractArrayFromReadOnlyByteBuffer() throws Exception { + final ByteBuffer readOnlyBuffer = ByteBuffer.wrap(ORIGINAL_STRING_BYTES).asReadOnlyBuffer(); + final byte[] bytes = ByteUtils.extractByteArrayFromByteBuffer(readOnlyBuffer); + + assertThat(StringUtils.newStringUtf8(bytes)).isEqualTo(TANUKI); + } +} \ No newline at end of file From dfda9ae37e6501b0df8b0ef266bb1b32a8c5bdb4 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 22:35:16 +0900 Subject: [PATCH 14/23] Not using deprecated jetty.util.log.Log classes --- .../azagniotov/stubby4j/server/StubbyManagerFactory.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/StubbyManagerFactory.java b/src/main/java/io/github/azagniotov/stubby4j/server/StubbyManagerFactory.java index bdb31d90e..4edaed47b 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/StubbyManagerFactory.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/StubbyManagerFactory.java @@ -3,13 +3,11 @@ import io.github.azagniotov.stubby4j.caching.Cache; import io.github.azagniotov.stubby4j.cli.ANSITerminal; import io.github.azagniotov.stubby4j.cli.CommandLineInterpreter; -import io.github.azagniotov.stubby4j.cli.EmptyLogger; import io.github.azagniotov.stubby4j.http.StubbyHttpTransport; import io.github.azagniotov.stubby4j.stubs.StubHttpLifecycle; import io.github.azagniotov.stubby4j.stubs.StubRepository; import io.github.azagniotov.stubby4j.yaml.YamlParseResultSet; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.util.log.Log; import java.io.File; import java.util.Map; @@ -25,11 +23,6 @@ public synchronized StubbyManager construct(final File configFile, final Map commandLineArgs, final CompletableFuture stubLoadComputation) throws Exception { - final String enableJettyDebug = System.getProperty("enableJettyDebug"); - if (enableJettyDebug == null) { - Log.setLog(new EmptyLogger()); - } - //TODO BUG: When stubs are cached, upon finding the previously cached match by hashCode, // if stubbed response has template tokens for dynamic token replacement, the tokens are // not replaced with values from the incoming request because the cached stub is not going From 02411fa46d167a5403f14d2f78484de80f6ff5a2 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 22:49:03 +0900 Subject: [PATCH 15/23] Added more descriptive error message to smoke tests --- src/smoke-test/shell/make_request_using_websocat.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smoke-test/shell/make_request_using_websocat.sh b/src/smoke-test/shell/make_request_using_websocat.sh index bc5984d8f..f79ecc8aa 100755 --- a/src/smoke-test/shell/make_request_using_websocat.sh +++ b/src/smoke-test/shell/make_request_using_websocat.sh @@ -22,7 +22,7 @@ smoke_test_response=$(websocat \ if [ "$smoke_test_response" != "0" ] then - echo "WebSocket request to $2:$3 failed, exiting with status 1 ... " + echo "WebSocket request to $2:$3 failed. Received response: '$smoke_test_response', thus exiting with status 1 ... " exit 1 else echo "$smoke_test_response" From 19626aead048304d5342e00a9020ff858efa0aa7 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 22:51:44 +0900 Subject: [PATCH 16/23] Delete redundant and obsolete class --- .../azagniotov/stubby4j/cli/EmptyLogger.java | 76 ------------------- 1 file changed, 76 deletions(-) delete mode 100644 src/main/java/io/github/azagniotov/stubby4j/cli/EmptyLogger.java diff --git a/src/main/java/io/github/azagniotov/stubby4j/cli/EmptyLogger.java b/src/main/java/io/github/azagniotov/stubby4j/cli/EmptyLogger.java deleted file mode 100644 index b73f94024..000000000 --- a/src/main/java/io/github/azagniotov/stubby4j/cli/EmptyLogger.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.github.azagniotov.stubby4j.cli; - -import io.github.azagniotov.stubby4j.annotations.GeneratedCodeClassCoverageExclusion; -import org.eclipse.jetty.util.log.Logger; - -/** - * Class used to suppress default console output of Jetty - * - * @author Eric Mrak - */ -@GeneratedCodeClassCoverageExclusion -public final class EmptyLogger implements Logger { - @Override - public String getName() { - return null; - } - - @Override - public void warn(final String s, final Object... objects) { - } - - @Override - public void warn(final Throwable throwable) { - } - - @Override - public void warn(final String s, final Throwable throwable) { - } - - @Override - public void info(final String s, final Object... objects) { - } - - @Override - public void info(final Throwable throwable) { - } - - @Override - public void info(final String s, final Throwable throwable) { - } - - @Override - public boolean isDebugEnabled() { - return false; - } - - @Override - public void setDebugEnabled(final boolean b) { - } - - @Override - public void debug(final String s, final Object... objects) { - } - - @Override - public void debug(final String msg, final long value) { - - } - - @Override - public void debug(final Throwable throwable) { - } - - @Override - public void debug(final String s, final Throwable throwable) { - } - - @Override - public Logger getLogger(final String s) { - return this; - } - - @Override - public void ignore(final Throwable throwable) { - } -} From b7712abb4806f5535cb5e9acb4aadf125bd6e7a5 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Fri, 7 Jan 2022 23:16:29 +0900 Subject: [PATCH 17/23] Making sure that log4j is on the classpath when building for smoke tests --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f1490ed6e..8046b301a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -270,8 +270,8 @@ smoke_test_steps: &smoke_test_steps websocat --version - run: - name: Build stubby4j uber JAR - command: ./gradlew -PciRun clean build + name: Build stubby4j uber JAR with log4j on the classpath + command: ./gradlew -Plog4j -PciRun clean build - run: when: on_success From 4693ab7a5dd893fe5938f4d3483cd999b682e490 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 00:48:21 +0900 Subject: [PATCH 18/23] Removed --mute --- .circleci/config.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8046b301a..d20759d80 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -350,10 +350,9 @@ smoke_test_steps: &smoke_test_steps java -version echo "" java -jar build/libs/stubby4j-*.jar \ - --location 127.0.0.1 \ - --tls 7445 \ - --mute \ - --data src/smoke-test/yaml/smoke-tests-stubs.yaml & + --location 127.0.0.1 \ + --tls 7445 \ + --data src/smoke-test/yaml/smoke-tests-stubs.yaml & STUBBY4J_HTTP_1_PID=$! From 6fd3aaa9856ac0c04c0576affa67206273b27e84 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 01:07:56 +0900 Subject: [PATCH 19/23] log4j and slf4j --- conf/gradle/dependencies.gradle | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/conf/gradle/dependencies.gradle b/conf/gradle/dependencies.gradle index 759746733..d0187464b 100644 --- a/conf/gradle/dependencies.gradle +++ b/conf/gradle/dependencies.gradle @@ -21,29 +21,23 @@ dependencies { if (project.hasProperty("log4j")) { var becauseMsg = "CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-44832: Log4j vulnerable to remote code execution and other critical security vulnerabilities" println "> Building with log4j included in default dependencies" - api "org.apache.logging.log4j:log4j-slf4j-impl:${log4j2Version}" - - constraints { - api("org.apache.logging.log4j:log4j-api") { - version { - strictly("${log4j2Version}") - prefer("2.17.1") - } - because(becauseMsg) - } - - api("org.apache.logging.log4j:log4j-core") { - version { - strictly("${log4j2Version}") - prefer("2.17.1") - } - because(becauseMsg) + // https://issues.apache.org/jira/browse/LOG4J2-3139 + api ("org.slf4j:slf4j-api") { + version { + strictly '1.8.0-beta4' } } + api "org.apache.logging.log4j:log4j-slf4j18-impl:${log4j2Version}" + api "org.apache.logging.log4j:log4j-core:${log4j2Version}" + api "org.apache.logging.log4j:log4j-api:${log4j2Version}" } else { println "> Building with default dependencies" - api "org.slf4j:slf4j-api:1.7.30" + api ("org.slf4j:slf4j-api") { + version { + strictly '1.8.0-beta4' + } + } } testImplementation "junit:junit:4.13.1" From 053a5a79c80e6ae78d26958bc2fb72b538c2de7c Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 01:20:47 +0900 Subject: [PATCH 20/23] log4j with DEBUG for jetty packages --- .circleci/config.yml | 3 ++- docker/log4j2-for-docker.xml | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d20759d80..085cb4c77 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -349,7 +349,8 @@ smoke_test_steps: &smoke_test_steps echo "" java -version echo "" - java -jar build/libs/stubby4j-*.jar \ + java -Dlog4j2.configurationFile=docker/log4j2-for-docker.xml \ + -jar build/libs/stubby4j-*.jar \ --location 127.0.0.1 \ --tls 7445 \ --data src/smoke-test/yaml/smoke-tests-stubs.yaml & diff --git a/docker/log4j2-for-docker.xml b/docker/log4j2-for-docker.xml index 529a4753b..f9639c191 100644 --- a/docker/log4j2-for-docker.xml +++ b/docker/log4j2-for-docker.xml @@ -36,6 +36,10 @@ + + + + From aabe8a5daee54d0df95d05645b78f1dbbad4fbd0 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 01:32:33 +0900 Subject: [PATCH 21/23] Fixed a self-inflicted bug where 'echo' protocal value was hardcoded by ME! --- .../stubby4j/server/websocket/StubsWebSocketCreator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java index 35f396efa..37fb1c501 100644 --- a/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java +++ b/src/main/java/io/github/azagniotov/stubby4j/server/websocket/StubsWebSocketCreator.java @@ -72,8 +72,8 @@ private void checkAndSetAcceptedProtocols(final StubWebSocketConfig stubWebSocke throw new UncheckedIOException(e); } } else { - final String acceptedSubProtocol = String.join(",", requestClientSubProtocolsCopy); - jettyServerUpgradeResponse.setAcceptedSubProtocol("echo"); + // Set a protocol by picking the first one from the intersection result + jettyServerUpgradeResponse.setAcceptedSubProtocol(requestClientSubProtocolsCopy.iterator().next()); } } } From cc40c9211418a0db26b6636a5ca28588349c0235 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 01:36:47 +0900 Subject: [PATCH 22/23] Removed log4j config file from web sockets smoke test --- .circleci/config.yml | 3 +-- docker/log4j2-for-docker.xml | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 085cb4c77..d20759d80 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -349,8 +349,7 @@ smoke_test_steps: &smoke_test_steps echo "" java -version echo "" - java -Dlog4j2.configurationFile=docker/log4j2-for-docker.xml \ - -jar build/libs/stubby4j-*.jar \ + java -jar build/libs/stubby4j-*.jar \ --location 127.0.0.1 \ --tls 7445 \ --data src/smoke-test/yaml/smoke-tests-stubs.yaml & diff --git a/docker/log4j2-for-docker.xml b/docker/log4j2-for-docker.xml index f9639c191..9c5ef9f55 100644 --- a/docker/log4j2-for-docker.xml +++ b/docker/log4j2-for-docker.xml @@ -36,9 +36,9 @@ - - - + + + From a2fa729e99b05dde9e98a5b3c8468076aa385727 Mon Sep 17 00:00:00 2001 From: Alexander Zagniotov Date: Sat, 8 Jan 2022 01:38:12 +0900 Subject: [PATCH 23/23] Not building JAR with log4j on CircleCI --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d20759d80..939c39115 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -271,7 +271,7 @@ smoke_test_steps: &smoke_test_steps - run: name: Build stubby4j uber JAR with log4j on the classpath - command: ./gradlew -Plog4j -PciRun clean build + command: ./gradlew -PciRun clean build - run: when: on_success