diff --git a/.builder/actions/aws_crt_java_test.py b/.builder/actions/aws_crt_java_test.py index f1d308d19..2c2c26161 100644 --- a/.builder/actions/aws_crt_java_test.py +++ b/.builder/actions/aws_crt_java_test.py @@ -11,6 +11,8 @@ def _run_java_tests(self, *extra_args): os.remove('log.txt') profiles = 'continuous-integration' + if os.getenv("GRAAL_VM") is not None: + profiles = 'graalvm-native' cmd_args = [ "mvn", "-B", @@ -40,18 +42,20 @@ def start_maven_tests(self, env): self._run_java_tests("-DrerunFailingTestsCount=5") - # run the ShutdownTest by itself - env.shell.setenv('AWS_CRT_SHUTDOWN_TESTING', '1') - self._run_java_tests("-Dtest=ShutdownTest") - # run the InitTest by itself. This creates an environment where the test itself is the one that - # causes the CRT to be loaded and initialized. - self._run_java_tests("-Dtest=InitTest") + if os.getenv("GRAAL_VM") is None: + # run the ShutdownTest by itself + env.shell.setenv('AWS_CRT_SHUTDOWN_TESTING', '1') + self._run_java_tests("-Dtest=ShutdownTest") - # run the elasticurl integration tests - python = sys.executable - env.shell.exec(python, 'crt/aws-c-http/integration-testing/http_client_test.py', - python, 'integration-testing/java_elasticurl_runner.py', check=True) + # run the InitTest by itself. This creates an environment where the test itself is the one that + # causes the CRT to be loaded and initialized. + self._run_java_tests("-Dtest=InitTest") + + # run the elasticurl integration tests + python = sys.executable + env.shell.exec(python, 'crt/aws-c-http/integration-testing/http_client_test.py', + python, 'integration-testing/java_elasticurl_runner.py', check=True) def run(self, env): self.env = env diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f445bdfd..da2159f39 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,347 +20,371 @@ env: AWS_DEVICE_FARM_REGION: us-west-2 # Device Farm only available in us-west-2 region jobs: - linux-compat: - runs-on: ubuntu-22.04 # latest - strategy: - matrix: - image: - - manylinux2014-x64 - - manylinux2014-x86 - - al2-x64 - - fedora-34-x64 - - opensuse-leap - - rhel8-x64 - #- manylinux2014-x86 until we find 32-bit linux binaries we can use - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} - run: | - aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh - ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} + # linux-compat: + # runs-on: ubuntu-22.04 # latest + # strategy: + # matrix: + # image: + # - manylinux2014-x64 + # - manylinux2014-x86 + # - al2-x64 + # - fedora-34-x64 + # - opensuse-leap + # - rhel8-x64 + # #- manylinux2014-x86 until we find 32-bit linux binaries we can use + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh + # ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} - linux-compiler-compat: - runs-on: ubuntu-22.04 # latest - strategy: - matrix: - compiler: - - clang-3 - - clang-6 - - clang-8 - - clang-9 - - clang-10 - - clang-11 - - gcc-4.8 - - gcc-5 - - gcc-6 - - gcc-7 - - gcc-8 - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} - run: | - aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh - ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=${{ matrix.compiler }} + # linux-compiler-compat: + # runs-on: ubuntu-22.04 # latest + # strategy: + # matrix: + # compiler: + # - clang-3 + # - clang-6 + # - clang-8 + # - clang-9 + # - clang-10 + # - clang-11 + # - gcc-4.8 + # - gcc-5 + # - gcc-6 + # - gcc-7 + # - gcc-8 + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh + # ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=${{ matrix.compiler }} - linux-arm: - name: ARM (${{ matrix.arch }}) - runs-on: ubuntu-22.04 # latest - strategy: - matrix: - arch: [armv6, armv7, arm64] - steps: - - name: Build ${{ env.PACKAGE_NAME }} - run: | - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream + # linux-arm: + # name: ARM (${{ matrix.arch }}) + # runs-on: ubuntu-22.04 # latest + # strategy: + # matrix: + # arch: [armv6, armv7, arm64] + # steps: + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + # chmod a+x builder + # ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream - linux-musl: - runs-on: ubuntu-22.04 # latest - strategy: - matrix: - image: - - alpine-3.16-x64 - - alpine-3.16-arm64 - - openwrt-x64-openjdk8 - steps: - - name: Install qemu/docker - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - name: Checkout Sources - uses: actions/checkout@v2 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} - run: | - aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh - ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} + # linux-musl: + # runs-on: ubuntu-22.04 # latest + # strategy: + # matrix: + # image: + # - alpine-3.16-x64 + # - alpine-3.16-arm64 + # - openwrt-x64-openjdk8 + # steps: + # - name: Install qemu/docker + # run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + # - name: Checkout Sources + # uses: actions/checkout@v2 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh + # ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} - linux-fips-x64: - runs-on: ubuntu-22.04 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v4 - with: - submodules: true - fetch-depth: 0 - - name: Build ${{ env.PACKAGE_NAME }} - run: | - bash codebuild/cd/test-fips-branch.sh - export CRT_FIPS=ON - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - ./builder build -p ${{ env.PACKAGE_NAME }} + # linux-fips-x64: + # runs-on: ubuntu-22.04 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v4 + # with: + # submodules: true + # fetch-depth: 0 + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # bash codebuild/cd/test-fips-branch.sh + # export CRT_FIPS=ON + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + # chmod a+x builder + # ./builder build -p ${{ env.PACKAGE_NAME }} - linux-fips-armv8: - runs-on: ubuntu-22.04 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v4 - with: - submodules: true - fetch-depth: 0 - - name: Build ${{ env.PACKAGE_NAME }} - run: | - bash codebuild/cd/test-fips-branch.sh - export CRT_FIPS=ON - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-arm64 --spec=downstream --cmake-extra=-DCRT_FIPS=ON + # linux-fips-armv8: + # runs-on: ubuntu-22.04 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v4 + # with: + # submodules: true + # fetch-depth: 0 + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # bash codebuild/cd/test-fips-branch.sh + # export CRT_FIPS=ON + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + # chmod a+x builder + # ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-arm64 --spec=downstream --cmake-extra=-DCRT_FIPS=ON - # armv7 needs its own action due to inability to differentiate at runtime armv6 vs armv7 in the jvm: - # - # At build time we can properly figure out that we're targeting armv7. - # At run time we have to force armv7 (via environment variable) in order to achieve proper resource path - # resolution. - linux-musl-armv7: - runs-on: ubuntu-20.04 # latest - steps: - - name: Install qemu/docker - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - name: Checkout Sources - uses: actions/checkout@v2 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} - run: | - aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh - ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-alpine-3.16-armv7 build -p ${{ env.PACKAGE_NAME }} --classifier "armv7" + # # armv7 needs its own action due to inability to differentiate at runtime armv6 vs armv7 in the jvm: + # # + # # At build time we can properly figure out that we're targeting armv7. + # # At run time we have to force armv7 (via environment variable) in order to achieve proper resource path + # # resolution. + # linux-musl-armv7: + # runs-on: ubuntu-20.04 # latest + # steps: + # - name: Install qemu/docker + # run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + # - name: Checkout Sources + # uses: actions/checkout@v2 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh + # ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-alpine-3.16-armv7 build -p ${{ env.PACKAGE_NAME }} --classifier "armv7" - raspberry: - runs-on: ubuntu-22.04 # latest - strategy: - fail-fast: false - matrix: - image: - - raspbian-bullseye - steps: - # set arm arch - - name: Install qemu/docker - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - name: Build ${{ env.PACKAGE_NAME }} - run: | - aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh - ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} + # raspberry: + # runs-on: ubuntu-22.04 # latest + # strategy: + # fail-fast: false + # matrix: + # image: + # - raspbian-bullseye + # steps: + # # set arm arch + # - name: Install qemu/docker + # run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh + # ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} - windows: - runs-on: windows-2022 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} + consumers - run: | - python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - python builder.pyz build -p ${{ env.PACKAGE_NAME }} --spec=downstream + # windows: + # runs-on: windows-2022 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + consumers + # run: | + # python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + # python builder.pyz build -p ${{ env.PACKAGE_NAME }} --spec=downstream - windows-vc14: - runs-on: windows-2019 # windows-2019 is last env with Visual Studio 2015 (v14.0) - strategy: - matrix: - arch: [x86, x64] - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} + consumers - env: - AWS_CMAKE_TOOLSET: v140 - run: | - python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - python builder.pyz build -p ${{ env.PACKAGE_NAME }} downstream + # windows-vc14: + # runs-on: windows-2019 # windows-2019 is last env with Visual Studio 2015 (v14.0) + # strategy: + # matrix: + # arch: [x86, x64] + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + consumers + # env: + # AWS_CMAKE_TOOLSET: v140 + # run: | + # python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + # python builder.pyz build -p ${{ env.PACKAGE_NAME }} downstream - osx: # With integration tests - runs-on: macos-13 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} + consumers - run: | - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - ./builder build -p ${{ env.PACKAGE_NAME }} --spec=downstream + # osx: # With integration tests + # runs-on: macos-13 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + consumers + # run: | + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + # chmod a+x builder + # ./builder build -p ${{ env.PACKAGE_NAME }} --spec=downstream - osx-arm64: - runs-on: macos-13 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v3 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} + consumers - run: | - mvn -B compile -P mac-arm64 - - name: verify backward compatibility - run: | - python3 codebuild/macos_compatibility_check.py armv8 + # osx-arm64: + # runs-on: macos-13 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + consumers + # run: | + # mvn -B compile -P mac-arm64 + # - name: verify backward compatibility + # run: | + # python3 codebuild/macos_compatibility_check.py armv8 - osx-x64: - runs-on: macos-13 - steps: - - name: Checkout Sources - uses: actions/checkout@v2 - with: - submodules: true - - name: Build ${{ env.PACKAGE_NAME }} + consumers - run: | - mvn -B compile -P mac-x64 - - name: verify backward compatibility - run: | - python3 codebuild/macos_compatibility_check.py + # osx-x64: + # runs-on: macos-13 + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v2 + # with: + # submodules: true + # - name: Build ${{ env.PACKAGE_NAME }} + consumers + # run: | + # mvn -B compile -P mac-x64 + # - name: verify backward compatibility + # run: | + # python3 codebuild/macos_compatibility_check.py - android: - # ubuntu-20.04 comes with Android tooling, see: - # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#android - name: Android - runs-on: ubuntu-20.04 # latest - steps: - - name: Checkout Sources - uses: actions/checkout@v2 - with: - submodules: true - # Setup JDK 11 - - name: set up JDK 11 - uses: actions/setup-java@v3 - with: - java-version: '11' - distribution: 'temurin' - cache: 'gradle' - # Build and publish locally for the test app to find the SNAPSHOT version - - name: Build ${{ env.PACKAGE_NAME }} - run: | - ./gradlew :android:crt:build - ./gradlew -PnewVersion="1.0.0-SNAPSHOT" :android:crt:publishToMavenLocal - # Setup files required by test app for Device Farm testing - - name: Setup Android Test Files - run: | - cd src/test/android/testapp/src/main/assets - python3 -m pip install boto3 - python3 ./android_file_creation.py - - name: Build Test App - run: | - cd src/test/android/testapp - ../../../../gradlew assembledebug - ../../../../gradlew assembleAndroidTest - - name: Device Farm Tests - run: | - echo "Running Device Farm Python Script" - python3 ./.github/workflows/run_android_ci.py \ - --run_id ${{ github.run_id }} \ - --run_attempt ${{ github.run_attempt }} \ - --project_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/ProjectArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') \ - --device_pool_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/DevicePoolArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') + # android: + # # ubuntu-20.04 comes with Android tooling, see: + # # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#android + # name: Android + # runs-on: ubuntu-20.04 # latest + # steps: + # - name: Checkout Sources + # uses: actions/checkout@v2 + # with: + # submodules: true + # # Setup JDK 11 + # - name: set up JDK 11 + # uses: actions/setup-java@v3 + # with: + # java-version: '11' + # distribution: 'temurin' + # cache: 'gradle' + # # Build and publish locally for the test app to find the SNAPSHOT version + # - name: Build ${{ env.PACKAGE_NAME }} + # run: | + # ./gradlew :android:crt:build + # ./gradlew -PnewVersion="1.0.0-SNAPSHOT" :android:crt:publishToMavenLocal + # # Setup files required by test app for Device Farm testing + # - name: Setup Android Test Files + # run: | + # cd src/test/android/testapp/src/main/assets + # python3 -m pip install boto3 + # python3 ./android_file_creation.py + # - name: Build Test App + # run: | + # cd src/test/android/testapp + # ../../../../gradlew assembledebug + # ../../../../gradlew assembleAndroidTest + # - name: Device Farm Tests + # run: | + # echo "Running Device Farm Python Script" + # python3 ./.github/workflows/run_android_ci.py \ + # --run_id ${{ github.run_id }} \ + # --run_attempt ${{ github.run_attempt }} \ + # --project_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/ProjectArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') \ + # --device_pool_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/DevicePoolArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') - # check that docs can still build - check-docs: - runs-on: ubuntu-22.04 # latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: Check docs - run: | - ./make-docs.sh + # # check that docs can still build + # check-docs: + # runs-on: ubuntu-22.04 # latest + # steps: + # - uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Check docs + # run: | + # ./make-docs.sh - check-submodules: - runs-on: ubuntu-22.04 # latest - steps: - - name: Checkout Source - uses: actions/checkout@v3 - with: - submodules: true - fetch-depth: 0 - - name: Check Submodules - # note: using "@main" because "@${{env.BUILDER_VERSION}}" doesn't work - # https://github.com/actions/runner/issues/480 - uses: awslabs/aws-crt-builder/.github/actions/check-submodules@main + # check-submodules: + # runs-on: ubuntu-22.04 # latest + # steps: + # - name: Checkout Source + # uses: actions/checkout@v3 + # with: + # submodules: true + # fetch-depth: 0 + # - name: Check Submodules + # # note: using "@main" because "@${{env.BUILDER_VERSION}}" doesn't work + # # https://github.com/actions/runner/issues/480 + # uses: awslabs/aws-crt-builder/.github/actions/check-submodules@main - localhost-test-linux: - runs-on: ubuntu-22.04 # latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: true - - name: Configure local host - run: | - python3 -m pip install h2 - cd crt/aws-c-http/tests/py_localhost/ - python3 server.py & - python3 non_tls_server.py & - - name: Build and test - run: | - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream + # localhost-test-linux: + # runs-on: ubuntu-22.04 # latest + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Configure local host + # run: | + # python3 -m pip install h2 + # cd crt/aws-c-http/tests/py_localhost/ + # python3 server.py & + # python3 non_tls_server.py & + # - name: Build and test + # run: | + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + # python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream - localhost-test-mac: - runs-on: macos-13 # latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: true - - name: Configure local host - run: | - python3 -m pip install h2 - cd crt/aws-c-http/tests/py_localhost/ - python3 server.py & - python3 non_tls_server.py & - - name: Build and test - run: | - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - ./builder localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream + # localhost-test-mac: + # runs-on: macos-13 # latest + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Configure local host + # run: | + # python3 -m pip install h2 + # cd crt/aws-c-http/tests/py_localhost/ + # python3 server.py & + # python3 non_tls_server.py & + # - name: Build and test + # run: | + # python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + # chmod a+x builder + # ./builder localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream + + # localhost-test-win: + # runs-on: windows-2022 # latest + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + # with: + # submodules: true + # - name: Configure local host + # run: | + # python -m pip install h2 + # - name: Build and test + # run: | + # cd crt/aws-c-http/tests/py_localhost/ + # Start-Process -NoNewWindow python .\server.py + # Start-Process -NoNewWindow python .\non_tls_server.py + # python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + # python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} downstream - localhost-test-win: - runs-on: windows-2022 # latest + + GraalVM: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + java-version: ['22', '21', '17'] steps: - - name: Checkout - uses: actions/checkout@v3 - with: - submodules: true - - name: Configure local host - run: | - python -m pip install h2 - - name: Build and test - run: | - cd crt/aws-c-http/tests/py_localhost/ - Start-Process -NoNewWindow python .\server.py - Start-Process -NoNewWindow python .\non_tls_server.py - python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} downstream + - name: Checkout Sources + uses: actions/checkout@v2 + with: + submodules: true + - name: Setup GraalVM + uses: graalvm/setup-graalvm@v1 + with: + java-version: ${{ matrix.java-version }} + distribution: 'graalvm' + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build ${{ env.PACKAGE_NAME }} + consumers + run: | + python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + python builder.pyz build -p ${{ env.PACKAGE_NAME }} --variant=graalvm downstream \ No newline at end of file diff --git a/.gitignore b/.gitignore index e8e8aef6e..d3e42af04 100644 --- a/.gitignore +++ b/.gitignore @@ -96,3 +96,5 @@ log.txt # docs are updated automatically by .github/workflows/docs.yml docs/ +# graalvm manually generated config files +graalvm-configuration \ No newline at end of file diff --git a/builder.json b/builder.json index 92b5e126b..d24023390 100644 --- a/builder.json +++ b/builder.json @@ -142,5 +142,16 @@ "mvn -B test -DrerunFailingTestsCount=5" ] } + }, + "variants":{ + "graalvm": { + "!packages": [], + "!imports": [ + ], + "!test_env": { + "GRAAL_VM": true + }, + "!build_env": {} + } } } diff --git a/crt/s2n b/crt/s2n index 171c96a23..38d769c9c 160000 --- a/crt/s2n +++ b/crt/s2n @@ -1 +1 @@ -Subproject commit 171c96a232eb2bf45415340378b55b3bb6dd29cd +Subproject commit 38d769c9cd079b4bbe250032acdc7fdafbfaab51 diff --git a/pom.xml b/pom.xml index 3178ba924..248384604 100644 --- a/pom.xml +++ b/pom.xml @@ -214,6 +214,39 @@ + + graalvm-native + + + + org.graalvm.buildtools + native-maven-plugin + 0.10.2 + true + + + test-native + + test + + test + + + + + true + + aws-crt-java + + --no-fallback + --initialize-at-build-time=org.junit.Ignore,java.lang.annotation.Annotation,org.junit.runners.model.FrameworkField + --verbose + + + + + + release @@ -286,13 +319,36 @@ + + generate-graalvm-files + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.3 + + -agentlib:native-image-agent=config-output-dir=graalvm-configuration -Daws.crt.memory.tracing=2 -Xcheck:jni + 1 + + + + + junit junit - 4.13.1 + 4.13.2 + test + + + + org.junit.vintage + junit-vintage-engine + 5.10.2 test @@ -320,6 +376,10 @@ **/*.a + + + src/main/resources + @@ -410,7 +470,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.21.0 + 3.2.3 ${crt.classifier} diff --git a/src/main/java/software/amazon/awssdk/crt/s3/ResumeToken.java b/src/main/java/software/amazon/awssdk/crt/s3/ResumeToken.java index 8fc3307a7..376e01298 100644 --- a/src/main/java/software/amazon/awssdk/crt/s3/ResumeToken.java +++ b/src/main/java/software/amazon/awssdk/crt/s3/ResumeToken.java @@ -55,7 +55,7 @@ public PutResumeTokenBuilder withUploadId(String uploadId) { public ResumeToken build() { return new ResumeToken(this); - } + } }; private int nativeType; @@ -71,6 +71,10 @@ public ResumeToken(PutResumeTokenBuilder builder) { this.numPartsCompleted = builder.numPartsCompleted; this.uploadId = builder.uploadId; } + /** + * Default constructor + */ + private ResumeToken() {} /****** * Common Fields. @@ -106,7 +110,7 @@ public long getNumPartsCompleted() { } /****** - * Upload Specific fields. + * Upload Specific fields. ******/ /** * @return upload Id diff --git a/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/jni-config.json b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/jni-config.json new file mode 100644 index 000000000..ae449c89d --- /dev/null +++ b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/jni-config.json @@ -0,0 +1,478 @@ +[ + { + "name":"[Lsoftware.amazon.awssdk.crt.SystemInfo$CpuInfo;" + }, + { + "name":"java.lang.Boolean", + "methods":[{"name":"","parameterTypes":["boolean"] }, {"name":"booleanValue","parameterTypes":[] }, {"name":"getBoolean","parameterTypes":["java.lang.String"] }] + }, + { + "name":"java.lang.Integer", + "methods":[{"name":"","parameterTypes":["int"] }, {"name":"intValue","parameterTypes":[] }] + }, + { + "name":"java.lang.Long", + "methods":[{"name":"","parameterTypes":["long"] }, {"name":"longValue","parameterTypes":[] }] + }, + { + "name":"java.lang.NullPointerException", + "methods":[{"name":"","parameterTypes":["java.lang.String"] }] + }, + { + "name":"java.lang.String", + "methods":[{"name":"lastIndexOf","parameterTypes":["int"] }, {"name":"substring","parameterTypes":["int"] }] + }, + { + "name":"java.lang.System", + "methods":[{"name":"getProperty","parameterTypes":["java.lang.String"] }, {"name":"setProperty","parameterTypes":["java.lang.String","java.lang.String"] }] + }, + { + "name":"java.nio.Buffer", + "methods":[{"name":"capacity","parameterTypes":[] }, {"name":"limit","parameterTypes":[] }, {"name":"position","parameterTypes":[] }, {"name":"remaining","parameterTypes":[] }] + }, + { + "name":"java.nio.ByteBuffer", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredClasses" : true, + "allPublicClasses" : true + }, + { + "name":"java.util.ArrayList", + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"java.util.List", + "methods":[{"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["int"] }, {"name":"size","parameterTypes":[] }] + }, + { + "name":"java.util.concurrent.CompletableFuture", + "methods":[{"name":"complete","parameterTypes":["java.lang.Object"] }, {"name":"completeExceptionally","parameterTypes":["java.lang.Throwable"] }] + }, + { + "name":"java.util.function.Predicate", + "methods":[{"name":"test","parameterTypes":["java.lang.Object"] }] + }, + { + "name":"software.amazon.awssdk.crt.AsyncCallback", + "methods":[{"name":"onFailure","parameterTypes":["java.lang.Throwable"] }, {"name":"onSuccess","parameterTypes":[] }, {"name":"onSuccess","parameterTypes":["java.lang.Object"] }] + }, + { + "name":"software.amazon.awssdk.crt.CRT", + "methods":[{"name":"testJniException","parameterTypes":["boolean"] }] + }, + { + "name":"software.amazon.awssdk.crt.CrtResource", + "methods":[{"name":"addRef","parameterTypes":[] }, {"name":"close","parameterTypes":[] }, {"name":"getNativeHandle","parameterTypes":[] }, {"name":"releaseReferences","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.CrtRuntimeException", + "fields":[{"name":"errorCode"}], + "methods":[{"name":"","parameterTypes":["int"] }, {"name":"","parameterTypes":["java.lang.String"] }] + }, + { + "name":"software.amazon.awssdk.crt.SystemInfo$CpuInfo", + "methods":[{"name":"","parameterTypes":["int","boolean"] }] + }, + { + "name":"software.amazon.awssdk.crt.auth.credentials.Credentials", + "fields":[{"name":"accessKeyId"}, {"name":"expirationTimePointSecs"}, {"name":"secretAccessKey"}, {"name":"sessionToken"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.auth.credentials.CredentialsProvider", + "methods":[{"name":"onGetCredentialsComplete","parameterTypes":["java.util.concurrent.CompletableFuture","software.amazon.awssdk.crt.auth.credentials.Credentials"] }, {"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.auth.credentials.DelegateCredentialsHandler", + "methods":[{"name":"getCredentials","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.auth.signing.AwsSigningConfig", + "fields":[{"name":"algorithm"}, {"name":"credentials"}, {"name":"credentialsProvider"}, {"name":"expirationInSeconds"}, {"name":"omitSessionToken"}, {"name":"region"}, {"name":"service"}, {"name":"shouldNormalizeUriPath"}, {"name":"shouldSignHeader"}, {"name":"signatureType"}, {"name":"signedBodyHeader"}, {"name":"signedBodyValue"}, {"name":"time"}, {"name":"useDoubleUriEncode"}] + }, + { + "name":"software.amazon.awssdk.crt.auth.signing.AwsSigningResult", + "fields":[{"name":"signature"}, {"name":"signedRequest"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.cal.EccKeyPair", + "methods":[{"name":"","parameterTypes":["long"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ClientConnectionContinuationHandler", + "methods":[{"name":"onContinuationClosedShim","parameterTypes":[] }, {"name":"onContinuationMessageShim","parameterTypes":["byte[]","byte[]","int","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ClientConnectionHandler", + "methods":[{"name":"onConnectionClosedShim","parameterTypes":["int"] }, {"name":"onConnectionSetupShim","parameterTypes":["long","int"] }, {"name":"onProtocolMessage","parameterTypes":["byte[]","byte[]","int","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.MessageFlushCallback", + "methods":[{"name":"onCallbackInvoked","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerConnection", + "methods":[{"name":"","parameterTypes":["long"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerConnectionContinuation", + "methods":[{"name":"","parameterTypes":["long"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerConnectionContinuationHandler", + "methods":[{"name":"onContinuationClosedShim","parameterTypes":[] }, {"name":"onContinuationMessageShim","parameterTypes":["byte[]","byte[]","int","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerConnectionHandler", + "methods":[{"name":"onIncomingStream","parameterTypes":["software.amazon.awssdk.crt.eventstream.ServerConnectionContinuation","byte[]"] }, {"name":"onProtocolMessage","parameterTypes":["byte[]","byte[]","int","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerListener", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.eventstream.ServerListenerHandler", + "methods":[{"name":"onConnectionShutdownShim","parameterTypes":["software.amazon.awssdk.crt.eventstream.ServerConnection","int"] }, {"name":"onNewConnection","parameterTypes":["software.amazon.awssdk.crt.eventstream.ServerConnection","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.Http2Stream", + "methods":[{"name":"","parameterTypes":["long"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.Http2StreamManager", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpClientConnection", + "methods":[{"name":"onConnectionAcquired","parameterTypes":["java.util.concurrent.CompletableFuture","long","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpClientConnectionManager", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpHeader", + "methods":[{"name":"","parameterTypes":["byte[]","byte[]"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpManagerMetrics", + "methods":[{"name":"","parameterTypes":["long","long","long"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpProxyOptions", + "methods":[{"name":"getAuthorizationPassword","parameterTypes":[] }, {"name":"getAuthorizationType","parameterTypes":[] }, {"name":"getAuthorizationUsername","parameterTypes":[] }, {"name":"getConnectionType","parameterTypes":[] }, {"name":"getHost","parameterTypes":[] }, {"name":"getPort","parameterTypes":[] }, {"name":"getTlsContext","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpProxyOptions$HttpProxyConnectionType", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpRequest", + "methods":[{"name":"","parameterTypes":["java.nio.ByteBuffer","software.amazon.awssdk.crt.http.HttpRequestBodyStream"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpRequestBase", + "fields":[{"name":"bodyStream"}] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpRequestBodyStream", + "methods":[{"name":"getLength","parameterTypes":[] }, {"name":"resetPosition","parameterTypes":[] }, {"name":"sendRequestBody","parameterTypes":["java.nio.ByteBuffer"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpStream", + "methods":[{"name":"","parameterTypes":["long"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpStream$HttpStreamWriteChunkCompletionCallback", + "methods":[{"name":"onChunkCompleted","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpStreamMetrics", + "methods":[{"name":"","parameterTypes":["long","long","long","long","long","long","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpStreamResponseHandlerNativeAdapter", + "methods":[{"name":"onMetrics","parameterTypes":["software.amazon.awssdk.crt.http.HttpStreamBase","software.amazon.awssdk.crt.http.HttpStreamMetrics"] }, {"name":"onResponseBody","parameterTypes":["software.amazon.awssdk.crt.http.HttpStreamBase","java.nio.ByteBuffer"] }, {"name":"onResponseComplete","parameterTypes":["software.amazon.awssdk.crt.http.HttpStreamBase","int"] }, {"name":"onResponseHeaders","parameterTypes":["software.amazon.awssdk.crt.http.HttpStreamBase","int","int","java.nio.ByteBuffer"] }, {"name":"onResponseHeadersDone","parameterTypes":["software.amazon.awssdk.crt.http.HttpStreamBase","int"] }] + }, + { + "name":"software.amazon.awssdk.crt.io.ClientBootstrap", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.DirectoryEntry", + "fields":[{"name":"fileSize"}, {"name":"isDirectory"}, {"name":"isFile"}, {"name":"isSymLink"}, {"name":"path"}, {"name":"relativePath"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.DirectoryTraversalHandler", + "methods":[{"name":"onDirectoryEntry","parameterTypes":["software.amazon.awssdk.crt.io.DirectoryEntry"] }] + }, + { + "name":"software.amazon.awssdk.crt.io.EventLoopGroup", + "methods":[{"name":"onCleanupComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.ExponentialBackoffRetryOptions", + "fields":[{"name":"backoffScaleFactorMS"}, {"name":"eventLoopGroup"}, {"name":"jitterMode"}, {"name":"maxRetries"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.ExponentialBackoffRetryOptions$JitterMode", + "fields":[{"name":"value"}], + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.StandardRetryOptions", + "fields":[{"name":"backoffRetryOptions"}, {"name":"initialBucketCapacity"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.io.TlsContextCustomKeyOperationOptions", + "fields":[{"name":"certificateFileContents"}, {"name":"certificateFilePath"}, {"name":"operationHandler"}] + }, + { + "name":"software.amazon.awssdk.crt.io.TlsContextPkcs11Options", + "fields":[{"name":"certificateFileContents"}, {"name":"certificateFilePath"}, {"name":"pkcs11Lib"}, {"name":"privateKeyObjectLabel"}, {"name":"slotId"}, {"name":"tokenLabel"}, {"name":"userPin"}] + }, + { + "name":"software.amazon.awssdk.crt.io.TlsKeyOperation", + "methods":[{"name":"","parameterTypes":["long","byte[]","int","int","int"] }, {"name":"invokePerformOperation","parameterTypes":["software.amazon.awssdk.crt.io.TlsKeyOperationHandler","software.amazon.awssdk.crt.io.TlsKeyOperation"] }] + }, + { + "name":"software.amazon.awssdk.crt.io.TlsKeyOperationHandler", + "methods":[{"name":"performOperation","parameterTypes":["software.amazon.awssdk.crt.io.TlsKeyOperation"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt.MqttClientConnection", + "methods":[{"name":"onConnectionClosed","parameterTypes":[] }, {"name":"onConnectionComplete","parameterTypes":["int","boolean"] }, {"name":"onConnectionFailure","parameterTypes":["int"] }, {"name":"onConnectionInterrupted","parameterTypes":["int","software.amazon.awssdk.crt.AsyncCallback"] }, {"name":"onConnectionResumed","parameterTypes":["boolean"] }, {"name":"onConnectionSuccess","parameterTypes":["boolean"] }, {"name":"onWebsocketHandshake","parameterTypes":["software.amazon.awssdk.crt.http.HttpRequest","long"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt.MqttClientConnection$MessageHandler", + "methods":[{"name":"deliver","parameterTypes":["java.lang.String","byte[]","boolean","int","boolean"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt.MqttClientConnectionOperationStatistics", + "fields":[{"name":"incompleteOperationCount"}, {"name":"incompleteOperationSize"}, {"name":"unackedOperationCount"}, {"name":"unackedOperationSize"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt.MqttException", + "methods":[{"name":"","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5Client", + "fields":[{"name":"websocketHandshakeTransform"}], + "methods":[{"name":"onWebsocketHandshake","parameterTypes":["software.amazon.awssdk.crt.http.HttpRequest","long"] }, {"name":"setIsConnected","parameterTypes":["boolean"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOperationStatistics", + "fields":[{"name":"incompleteOperationCount"}, {"name":"incompleteOperationSize"}, {"name":"unackedOperationCount"}, {"name":"unackedOperationSize"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions", + "fields":[{"name":"ackTimeoutSeconds"}, {"name":"connackTimeoutMs"}, {"name":"extendedValidationAndFlowControlOptions"}, {"name":"hostName"}, {"name":"httpProxyOptions"}, {"name":"lifecycleEvents"}, {"name":"maxReconnectDelayMs"}, {"name":"minConnectedTimeToResetReconnectDelayMs"}, {"name":"minReconnectDelayMs"}, {"name":"offlineQueueBehavior"}, {"name":"pingTimeoutMs"}, {"name":"port"}, {"name":"publishEvents"}, {"name":"retryJitterMode"}, {"name":"sessionBehavior"}, {"name":"topicAliasingOptions"}], + "methods":[{"name":"getBootstrap","parameterTypes":[] }, {"name":"getExtendedValidationAndFlowControlOptions","parameterTypes":[] }, {"name":"getOfflineQueueBehavior","parameterTypes":[] }, {"name":"getRetryJitterMode","parameterTypes":[] }, {"name":"getSessionBehavior","parameterTypes":[] }, {"name":"getSocketOptions","parameterTypes":[] }, {"name":"getTlsContext","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions$ClientOfflineQueueBehavior", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions$ClientSessionBehavior", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions$ExtendedValidationAndFlowControlOptions", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions$LifecycleEvents", + "methods":[{"name":"onAttemptingConnect","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.OnAttemptingConnectReturn"] }, {"name":"onConnectionFailure","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.OnConnectionFailureReturn"] }, {"name":"onConnectionSuccess","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.OnConnectionSuccessReturn"] }, {"name":"onDisconnection","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.OnDisconnectionReturn"] }, {"name":"onStopped","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.OnStoppedReturn"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.Mqtt5ClientOptions$PublishEvents", + "methods":[{"name":"onMessageReceived","parameterTypes":["software.amazon.awssdk.crt.mqtt5.Mqtt5Client","software.amazon.awssdk.crt.mqtt5.PublishReturn"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.NegotiatedSettings", + "fields":[{"name":"assignedClientID"}, {"name":"maximumPacketSizeToServer"}, {"name":"maximumQOS"}, {"name":"receiveMaximumFromServer"}, {"name":"rejoinedSession"}, {"name":"retainAvailable"}, {"name":"serverKeepAlive"}, {"name":"sessionExpiryInterval"}, {"name":"sharedSubscriptionsAvailable"}, {"name":"subscriptionIdentifiersAvailable"}, {"name":"topicAliasMaximumToClient"}, {"name":"topicAliasMaximumToServer"}, {"name":"wildcardSubscriptionsAvailable"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"nativeSetQOS","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.OnAttemptingConnectReturn", + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.OnConnectionFailureReturn", + "methods":[{"name":"","parameterTypes":["int","software.amazon.awssdk.crt.mqtt5.packets.ConnAckPacket"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.OnConnectionSuccessReturn", + "methods":[{"name":"","parameterTypes":["software.amazon.awssdk.crt.mqtt5.packets.ConnAckPacket","software.amazon.awssdk.crt.mqtt5.NegotiatedSettings"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.OnDisconnectionReturn", + "methods":[{"name":"","parameterTypes":["int","software.amazon.awssdk.crt.mqtt5.packets.DisconnectPacket"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.OnStoppedReturn", + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.PublishResult", + "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["software.amazon.awssdk.crt.mqtt5.packets.PubAckPacket"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.PublishReturn", + "methods":[{"name":"","parameterTypes":["software.amazon.awssdk.crt.mqtt5.packets.PublishPacket"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.QOS", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.TopicAliasingOptions", + "fields":[{"name":"inboundBehavior"}, {"name":"inboundCacheMaxSize"}, {"name":"outboundBehavior"}, {"name":"outboundCacheMaxSize"}] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.TopicAliasingOptions$InboundTopicAliasBehaviorType", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.TopicAliasingOptions$OutboundTopicAliasBehaviorType", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.ConnAckPacket", + "fields":[{"name":"assignedClientIdentifier"}, {"name":"maximumPacketSize"}, {"name":"maximumQOS"}, {"name":"reasonCode"}, {"name":"reasonString"}, {"name":"receiveMaximum"}, {"name":"responseInformation"}, {"name":"retainAvailable"}, {"name":"serverKeepAlive"}, {"name":"serverReference"}, {"name":"sessionExpiryIntervalSeconds"}, {"name":"sessionPresent"}, {"name":"sharedSubscriptionsAvailable"}, {"name":"subscriptionIdentifiersAvailable"}, {"name":"topicAliasMaximum"}, {"name":"userProperties"}, {"name":"wildcardSubscriptionsAvailable"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"nativeAddMaximumQOS","parameterTypes":["int"] }, {"name":"nativeAddReasonCode","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.ConnAckPacket$ConnectReasonCode", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.ConnectPacket", + "fields":[{"name":"clientId"}, {"name":"keepAliveIntervalSeconds"}, {"name":"maximumPacketSizeBytes"}, {"name":"password"}, {"name":"receiveMaximum"}, {"name":"requestProblemInformation"}, {"name":"requestResponseInformation"}, {"name":"sessionExpiryIntervalSeconds"}, {"name":"userProperties"}, {"name":"username"}, {"name":"will"}, {"name":"willDelayIntervalSeconds"}] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.DisconnectPacket", + "fields":[{"name":"reasonCode"}, {"name":"reasonString"}, {"name":"serverReference"}, {"name":"sessionExpiryIntervalSeconds"}, {"name":"userProperties"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"getReasonCode","parameterTypes":[] }, {"name":"nativeAddDisconnectReasonCode","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.DisconnectPacket$DisconnectReasonCode", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.PubAckPacket", + "fields":[{"name":"reasonCode"}, {"name":"reasonString"}, {"name":"userProperties"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"nativeAddReasonCode","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.PubAckPacket$PubAckReasonCode", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.PublishPacket", + "fields":[{"name":"contentType"}, {"name":"correlationData"}, {"name":"messageExpiryIntervalSeconds"}, {"name":"packetQOS"}, {"name":"payload"}, {"name":"payloadFormat"}, {"name":"responseTopic"}, {"name":"retain"}, {"name":"subscriptionIdentifiers"}, {"name":"topic"}, {"name":"topicAlias"}, {"name":"userProperties"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"getPayloadFormat","parameterTypes":[] }, {"name":"getQOS","parameterTypes":[] }, {"name":"nativeSetPayloadFormatIndicator","parameterTypes":["int"] }, {"name":"nativeSetQOS","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.PublishPacket$PayloadFormatIndicator", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.SubAckPacket", + "fields":[{"name":"reasonCodes"}, {"name":"reasonString"}, {"name":"userProperties"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"nativeAddSubackCode","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.SubAckPacket$SubAckReasonCode", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.SubscribePacket", + "fields":[{"name":"subscriptionIdentifier"}, {"name":"subscriptions"}, {"name":"userProperties"}] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.SubscribePacket$RetainHandlingType", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.SubscribePacket$Subscription", + "fields":[{"name":"noLocal"}, {"name":"retainAsPublished"}], + "methods":[{"name":"getNoLocal","parameterTypes":[] }, {"name":"getQOS","parameterTypes":[] }, {"name":"getRetainAsPublished","parameterTypes":[] }, {"name":"getRetainHandlingType","parameterTypes":[] }, {"name":"getTopicFilter","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.UnsubAckPacket", + "fields":[{"name":"reasonCodes"}, {"name":"reasonString"}, {"name":"userProperties"}], + "methods":[{"name":"","parameterTypes":[] }, {"name":"nativeAddUnsubackCode","parameterTypes":["int"] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.UnsubAckPacket$UnsubAckReasonCode", + "methods":[{"name":"getEnumValueFromInteger","parameterTypes":["int"] }, {"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.UnsubscribePacket", + "fields":[{"name":"subscriptions"}, {"name":"userProperties"}] + }, + { + "name":"software.amazon.awssdk.crt.mqtt5.packets.UserProperty", + "fields":[{"name":"key"}, {"name":"value"}], + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String"] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.ResumeToken", + "fields":[{"name":"nativeType"}, {"name":"numPartsCompleted"}, {"name":"partSize"}, {"name":"totalNumParts"}, {"name":"uploadId"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3Client", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3ExpressCredentialsProperties", + "fields":[{"name":"hostValue"}, {"name":"region"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3ExpressCredentialsProvider", + "methods":[{"name":"destroyProvider","parameterTypes":[] }, {"name":"getS3ExpressCredentials","parameterTypes":["software.amazon.awssdk.crt.s3.S3ExpressCredentialsProperties","software.amazon.awssdk.crt.auth.credentials.Credentials","long"] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3ExpressCredentialsProviderFactory", + "methods":[{"name":"createS3ExpressCredentialsProvider","parameterTypes":["software.amazon.awssdk.crt.s3.S3Client"] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3MetaRequest", + "methods":[{"name":"onShutdownComplete","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3MetaRequestProgress", + "fields":[{"name":"bytesTransferred"}, {"name":"contentLength"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.http.HttpProxyOptions$HttpProxyAuthorizationType", + "methods":[{"name":"getValue","parameterTypes":[] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3MetaRequestResponseHandlerNativeAdapter", + "methods":[{"name":"onFinished","parameterTypes":["int","int","byte[]","int","boolean","java.lang.Throwable","java.nio.ByteBuffer"] }, {"name":"onProgress","parameterTypes":["software.amazon.awssdk.crt.s3.S3MetaRequestProgress"] }, {"name":"onResponseBody","parameterTypes":["byte[]","long","long"] }, {"name":"onResponseHeaders","parameterTypes":["int","java.nio.ByteBuffer"] }] + }, + { + "name":"software.amazon.awssdk.crt.s3.S3TcpKeepAliveOptions", + "fields":[{"name":"keepAliveIntervalSec"}, {"name":"keepAliveMaxFailedProbes"}, {"name":"keepAliveTimeoutSec"}], + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"sun.management.VMManagementImpl", + "fields":[{"name":"compTimeMonitoringSupport"}, {"name":"currentThreadCpuTimeSupport"}, {"name":"objectMonitorUsageSupport"}, {"name":"otherThreadCpuTimeSupport"}, {"name":"remoteDiagnosticCommandsSupport"}, {"name":"synchronizerUsageSupport"}, {"name":"threadAllocatedMemorySupport"}, {"name":"threadContentionMonitoringSupport"}] + } +] diff --git a/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/native-image.properties b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/native-image.properties new file mode 100644 index 000000000..28b958f66 --- /dev/null +++ b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/native-image.properties @@ -0,0 +1 @@ +Args=-H:ClassInitialization=org.slf4j:build_time \ No newline at end of file diff --git a/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/reflect-config.json b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/reflect-config.json new file mode 100644 index 000000000..a1ebe604a --- /dev/null +++ b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/reflect-config.json @@ -0,0 +1,41 @@ +[ + { + "name":"java.lang.Object", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true + }, + { + "name":"java.lang.Throwable", + "methods":[{"name":"getSuppressed","parameterTypes":[] }] + }, + { + "name":"org.hamcrest.core.Every", + "queryAllDeclaredMethods":true + }, + { + "name":"java.util.concurrent.atomic.AtomicBoolean", + "fields":[{"name":"value"}] + }, + { + "name":"java.util.concurrent.atomic.AtomicReference", + "fields":[{"name":"value"}] + }, + { + "name":"software.amazon.awssdk.crt.CRT" + }, + { + "name":"software.amazon.awssdk.crt.CrtResource" + }, + { + "name":"sun.security.provider.NativePRNG", + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"sun.security.provider.SHA", + "methods":[{"name":"","parameterTypes":[] }] + }, + { + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] + } +] diff --git a/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/resource-config.json b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/resource-config.json new file mode 100644 index 000000000..4ba5991fd --- /dev/null +++ b/src/main/resources/META-INF/native-image/software.amazon.awssdk/crt/aws-crt/resource-config.json @@ -0,0 +1,10 @@ +{ + "resources": { + "includes": [ + {"pattern":".*libaws-crt-jni.dylib"}, + {"pattern":".*libaws-crt-jni.so"}, + {"pattern":".*aws-crt-jni.dll"} + ] + }, + "bundles": [] +} \ No newline at end of file diff --git a/src/native/java_class_ids.c b/src/native/java_class_ids.c index adfc305bf..af0b627c7 100644 --- a/src/native/java_class_ids.c +++ b/src/native/java_class_ids.c @@ -967,18 +967,23 @@ static void s_cache_s3_meta_request_resume_token(JNIEnv *env) { AWS_FATAL_ASSERT(cls); s3_meta_request_resume_token_properties.s3_meta_request_resume_token_class = (*env)->NewGlobalRef(env, cls); - s3_meta_request_resume_token_properties.s3_meta_request_resume_token_constructor_method_id = - (*env)->GetMethodID(env, s3_meta_request_progress_properties.s3_meta_request_progress_class, "", "()V"); + s3_meta_request_resume_token_properties.s3_meta_request_resume_token_constructor_method_id = (*env)->GetMethodID( + env, s3_meta_request_resume_token_properties.s3_meta_request_resume_token_class, "", "()V"); + AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.s3_meta_request_resume_token_constructor_method_id); s3_meta_request_resume_token_properties.native_type_field_id = (*env)->GetFieldID(env, cls, "nativeType", "I"); AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.native_type_field_id); s3_meta_request_resume_token_properties.part_size_field_id = (*env)->GetFieldID(env, cls, "partSize", "J"); + AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.part_size_field_id); s3_meta_request_resume_token_properties.total_num_parts_field_id = (*env)->GetFieldID(env, cls, "totalNumParts", "J"); + AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.total_num_parts_field_id); s3_meta_request_resume_token_properties.num_parts_completed_field_id = (*env)->GetFieldID(env, cls, "numPartsCompleted", "J"); + AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.num_parts_completed_field_id); s3_meta_request_resume_token_properties.upload_id_field_id = (*env)->GetFieldID(env, cls, "uploadId", "Ljava/lang/String;"); + AWS_FATAL_ASSERT(s3_meta_request_resume_token_properties.upload_id_field_id); } struct java_aws_mqtt5_connack_packet_properties mqtt5_connack_packet_properties; diff --git a/src/test/java/software/amazon/awssdk/crt/test/CrtTestFixture.java b/src/test/java/software/amazon/awssdk/crt/test/CrtTestFixture.java index 0e49c8643..15ba8f8fa 100644 --- a/src/test/java/software/amazon/awssdk/crt/test/CrtTestFixture.java +++ b/src/test/java/software/amazon/awssdk/crt/test/CrtTestFixture.java @@ -308,4 +308,8 @@ protected void skipIfAndroid() { Assume.assumeFalse(platform.getOSIdentifier().contains("android")); } } + + protected void skipIfNativeImage() { + Assume.assumeFalse(System.getProperty("org.graalvm.nativeimage.imagecode") != null); + } } diff --git a/src/test/java/software/amazon/awssdk/crt/test/Http2StreamManagerTest.java b/src/test/java/software/amazon/awssdk/crt/test/Http2StreamManagerTest.java index e030d4d08..9f1978035 100644 --- a/src/test/java/software/amazon/awssdk/crt/test/Http2StreamManagerTest.java +++ b/src/test/java/software/amazon/awssdk/crt/test/Http2StreamManagerTest.java @@ -4,6 +4,14 @@ */ package software.amazon.awssdk.crt.test; +import org.junit.Assert; +import org.junit.Test; +import software.amazon.awssdk.crt.CRT; +import software.amazon.awssdk.crt.CrtResource; +import software.amazon.awssdk.crt.Log; +import software.amazon.awssdk.crt.http.*; +import software.amazon.awssdk.crt.io.*; + import java.net.URI; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -11,20 +19,6 @@ import java.util.List; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.Test; -import software.amazon.awssdk.crt.CRT; -import software.amazon.awssdk.crt.CrtResource; -import software.amazon.awssdk.crt.CrtRuntimeException; -import software.amazon.awssdk.crt.http.*; -import software.amazon.awssdk.crt.io.ClientBootstrap; -import software.amazon.awssdk.crt.io.EventLoopGroup; -import software.amazon.awssdk.crt.io.HostResolver; -import software.amazon.awssdk.crt.io.SocketOptions; -import software.amazon.awssdk.crt.io.TlsContext; -import software.amazon.awssdk.crt.io.TlsContextOptions; -import software.amazon.awssdk.crt.Log; public class Http2StreamManagerTest extends HttpClientTestFixture { private final static Charset UTF8 = StandardCharsets.UTF_8; @@ -195,6 +189,7 @@ public void testSanitizer() throws Exception { @Test public void testSerialRequests() throws Exception { skipIfAndroid(); + skipIfNativeImage(); skipIfNetworkUnavailable(); testParallelRequestsWithLeakCheck(1, NUM_REQUESTS / NUM_THREADS); } @@ -202,6 +197,7 @@ public void testSerialRequests() throws Exception { @Test public void testMaxParallelRequests() throws Exception { skipIfAndroid(); + skipIfNativeImage(); skipIfNetworkUnavailable(); testParallelRequestsWithLeakCheck(NUM_THREADS, NUM_REQUESTS); } diff --git a/src/test/java/software/amazon/awssdk/crt/test/HttpClientConnectionTest.java b/src/test/java/software/amazon/awssdk/crt/test/HttpClientConnectionTest.java index 7f89f272b..be636991c 100644 --- a/src/test/java/software/amazon/awssdk/crt/test/HttpClientConnectionTest.java +++ b/src/test/java/software/amazon/awssdk/crt/test/HttpClientConnectionTest.java @@ -78,7 +78,7 @@ private void testConnectionWithAllCiphers(URI uri, boolean expectConnected, Stri SocketOptions socketOptions = new SocketOptions(); TlsContext tlsCtx = new TlsContext(tlsOpts)) { - socketOptions.connectTimeoutMs = 10000; + socketOptions.connectTimeoutMs = 6000000; resp = testConnection(uri, bootstrap, socketOptions, tlsCtx); } }