diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 0000000..c2539d0 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,60 @@ +# GitHub Actions Workflows + +This directory contains the GitHub Actions workflows for the project. + +## Workflows + +### 1. tests.yml +- **Trigger**: Push to master branch or pull requests to master +- **Purpose**: Run all tests (unit and integration) on multiple Tarantool versions +- **Runs on**: Ubuntu latest + +### 2. release.yml +- **Trigger**: Creation of tags matching semantic versioning pattern (e.g., `1.4.1`, `2.0.1`) +- **Purpose**: Automatically release to Maven Central and create GitHub Release +- **Runs on**: Ubuntu latest +- **Requires secrets**: + - `OSSRH_USERNAME` - Sonatype OSSRH username + - `OSSRH_TOKEN` - Sonatype OSSRH password or token + - `MAVEN_GPG_PRIVATE_KEY` - GPG private key for signing artifacts + - `MAVEN_GPG_PASSPHRASE` - Passphrase for the GPG key + - `TARANTOOL_REGISTRY_PASSWORD` - Password for Tarantool private registry + +### 3. snapshot.yml +- **Trigger**: Push to master branch (except commits starting with "Release") +- **Purpose**: Automatically deploy snapshot versions to Maven Central +- **Runs on**: Ubuntu latest +- **Requires secrets**: + - `OSSRH_USERNAME` - Sonatype OSSRH username + - `OSSRH_TOKEN` - Sonatype OSSRH password or token + - `TARANTOOL_REGISTRY_PASSWORD` - Password for Tarantool private registry + +## Setup Instructions + +To enable automatic releases, you need to configure the following secrets in your GitHub repository settings: + +1. Go to Settings → Secrets and variables → Actions +2. Add the following secrets: + - `OSSRH_USERNAME` - Your Sonatype OSSRH username + - `OSSRH_TOKEN` - Your Sonatype OSSRH token/password + - `MAVEN_GPG_PRIVATE_KEY` - Your GPG private key (export with `gpg --export-secret-keys --armor KEY_ID`) + - `MAVEN_GPG_PASSPHRASE` - Passphrase for your GPG key + - `TARANTOOL_REGISTRY_PASSWORD` - Password for the Tarantool private registry + +## Release Process + +### Automatic Release +1. Create and push a new tag with semantic versioning format (e.g., `git tag 1.4.1 && git push origin 1.4.1`) +2. The release workflow will automatically: + - Build and test the project + - Sign the artifacts with GPG + - Deploy to Maven Central + - Create a GitHub Release + +### Automatic Snapshot Deployment +1. Push changes to the master branch +2. The snapshot workflow will automatically: + - Build and test the project + - Deploy snapshot version to Maven Central + +Note: Commits with messages starting with "Release" are excluded from snapshot deployment to avoid duplicate deployments during the release process. diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml new file mode 100644 index 0000000..0ac35be --- /dev/null +++ b/.github/workflows/prepare_release.yml @@ -0,0 +1,45 @@ +name: Prepare Release to Maven Central + +on: + workflow_dispatch: + inputs: + releaseVersion: + description: 'Release and tag version' + required: true + default: "v1.5.0" + developmentVersion: + description: 'Version to use for new working copy' + required: true + default: '2.0.0-SNAPSHOT' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + with: + ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Set up JDK 8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + + - name: Configure Git user + run: | + git config user.email "actions@github.com" + git config user.name "GitHub Actions" + + - name: Run release release.yml + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ github.token }} + RELEASE_VERSION: ${{ github.event.inputs.releaseVersion }} + DEVELOPMENT_VERSION: ${{ github.event.inputs.developmentVersion }} + run: | + ./mvnw release:prepare -DskipTests -Darguments=-DskipTests \ + -DreleaseVersion="$RELEASE_VERSION" -Dtag="$RELEASE_VERSION" \ + -DdevelopmentVersion="$DEVELOPMENT_VERSION" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..30c2391 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +name: Publish Release to Maven Central + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Set up JDK 8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + server-id: central + server-username: MAVEN_USERNAME + server-password: MAVEN_TOKEN + gpg-private-key: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + + - name: Publish to Maven Central + run: | + ./mvnw -B clean deploy -PsonatypeRelease -DskipTests + env: + MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }} + MAVEN_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml new file mode 100644 index 0000000..dda789f --- /dev/null +++ b/.github/workflows/snapshot.yml @@ -0,0 +1,33 @@ +name: Publish Snapshot to Maven Central + +on: + push: + branches: + - master + tags: + - 'v[0-9]+.[0-9]+.[0-9]+\-dev.[0-9]+' + +jobs: + publish-snapshot: + if: "!contains(github.event.head_commit.message, '[maven-release-plugin]')" + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Set up JDK 8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + server-id: central-portal-snapshots + server-username: MAVEN_USERNAME + server-password: MAVEN_TOKEN + + - name: Publish Snapshot to Maven Central + run: | + ./mvnw -B clean deploy -PsonatypeSnapshot -DskipTests + env: + MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }} + MAVEN_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..a741430 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,147 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +env: + TARANTOOL_REGISTRY: "registry.ps.tarantool.io/" + TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX: "registry.ps.tarantool.io/" + +jobs: + tests-cartridge-container: + if: "!contains(github.event.head_commit.message, '[maven-release-plugin]')" + runs-on: ubuntu-latest + timeout-minutes: 25 + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 1.8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + + - name: Docker login to private registry + run: docker login "$TARANTOOL_REGISTRY" -u admin -p "${{ secrets.TARANTOOL_REGISTRY_PASSWORD }}" + + - name: Build + run: ./mvnw -B clean package --file pom.xml + + - name: Run unit tests + run: ./mvnw -B test -P unit -Djacoco.destFile=target/jacoco-cartridge-container.exec --file pom.xml + + - name: Run integration tests + env: + TARANTOOL_SERVER_USER: root + TARANTOOL_SERVER_GROUP: root + TARANTOOL_VERSION: "2.11.2-ubuntu20.04" + run: ./mvnw -B test -P integration -Djacoco.destFile=target/jacoco-cartridge-container.exec --file pom.xml + + - name: Print system images + run: docker images + + - name: Upload jacoco exec results + uses: actions/upload-artifact@v4 + with: + name: tests-cartridge-container-jacoco + path: "**/jacoco-cartridge-container.exec" + retention-days: 5 + overwrite: true + + tests-tarantool-container: + if: "!contains(github.event.head_commit.message, '[maven-release-plugin]')" + runs-on: ubuntu-latest + timeout-minutes: 25 + strategy: + matrix: + tarantool-version: [ "1.x-centos7", "2.11.2-ubuntu20.04", "3.0.1-old" ] + fail-fast: false + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 1.8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + + - name: Docker login to private registry + run: docker login "$TARANTOOL_REGISTRY" -u admin -p "${{ secrets.TARANTOOL_REGISTRY_PASSWORD }}" + + - name: Build and run integration matrix tests + env: + TARANTOOL_VERSION: ${{ matrix.tarantool-version }} + TARANTOOL_SERVER_USER: root + TARANTOOL_SERVER_GROUP: root + run: ./mvnw -B test -P tarantool-container -Djacoco.destFile=target/jacoco-tarantool-container.exec --file pom.xml + + - name: Print system images + run: docker images + + - name: Upload jacoco exec results + uses: actions/upload-artifact@v4 + with: + name: tests-tarantool-container-jacoco + path: "**/jacoco-tarantool-container.exec" + retention-days: 5 + overwrite: true + + merge-jacoco-report: + if: "!contains(github.event.head_commit.message, '[maven-release-plugin]')" + name: Jacoco Merge Results + needs: + - tests-cartridge-container + - tests-tarantool-container + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 1.8 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: '8' + cache: 'maven' + + - uses: actions/download-artifact@v4 + with: + name: tests-cartridge-container-jacoco + path: . + + - uses: actions/download-artifact@v4 + with: + name: tests-tarantool-container-jacoco + path: . + + - name: merge results + run: | + ./mvnw package jacoco:merge jacoco:report -DskipTests -Darguments=-DskipTests + + - name: Upload jacoco coverage despite the check result + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: coverage-results-report + path: target/site/jacoco + if-no-files-found: error + overwrite: true + + - name: Jacoco Report to PR + id: jacoco + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: target/site/jacoco/jacoco.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 40 + min-coverage-changed-files: 60 + update-comment: true diff --git a/.github/workflows/ubuntu-master.yml b/.github/workflows/ubuntu-master.yml deleted file mode 100644 index 6b165e3..0000000 --- a/.github/workflows/ubuntu-master.yml +++ /dev/null @@ -1,41 +0,0 @@ -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven - -name: ubuntu-master - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: '8' - cache: 'maven' - - - name: Store docker images - uses: satackey/action-docker-layer-caching@v0.0.11 - continue-on-error: true - - - name: Build with Maven - env: - TARANTOOL_SERVER_USER: root - TARANTOOL_SERVER_GROUP: root - run: mvn -e -B verify --file pom.xml - - - name: Run enterprise tests - env: - TARANTOOL_SERVER_USER: root - TARANTOOL_SERVER_GROUP: root - DOWNLOAD_SDK_URI: ${{ secrets.DOWNLOAD_SDK_URI }} - SDK_VERSION: tarantool-enterprise-sdk-nogc64-2.10.7-0-r563.linux.x86_64 - run: mvn -B test -P enterprise --file pom.xml diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java index b901097..7e9c1e3 100644 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -1,103 +1,72 @@ /* - * Copyright 2007-present the original author or authors. + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; +import java.io.IOException; +import java.io.InputStream; +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.net.URI; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.concurrent.ThreadLocalRandom; - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; +public final class MavenWrapperDownloader { + private static final String WRAPPER_VERSION = "3.3.4"; - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; + private static final boolean VERBOSE = Boolean.parseBoolean(System.getenv("MVNW_VERBOSE")); - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + public static void main(String[] args) { + log("Apache Maven Wrapper Downloader " + WRAPPER_VERSION); - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } + if (args.length != 2) { + System.err.println(" - ERROR wrapperUrl or wrapperJarPath parameter missing"); + System.exit(1); } - System.out.println("- Downloading from: " + url); - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); + log(" - Downloader started"); + final URL wrapperUrl = URI.create(args[0]).toURL(); + final Path baseDir = Paths.get(".").toAbsolutePath().normalize(); + final Path wrapperJarPath = baseDir.resolve(args[1]).normalize(); + if (!wrapperJarPath.startsWith(baseDir)) { + throw new IOException("Invalid path: outside of allowed directory"); + } + downloadFileFromURL(wrapperUrl, wrapperJarPath); + log("Done"); + } catch (IOException e) { + System.err.println("- Error downloading: " + e.getMessage()); + if (VERBOSE) { + e.printStackTrace(); + } System.exit(1); } } - private static void downloadFileFromURL(String urlString, File destination) throws Exception { + private static void downloadFileFromURL(URL wrapperUrl, Path wrapperJarPath) + throws IOException { + log(" - Downloading to: " + wrapperJarPath); if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + final String username = System.getenv("MVNW_USERNAME"); + final char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { @@ -105,13 +74,23 @@ protected PasswordAuthentication getPasswordAuthentication() { } }); } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); + Path temp = wrapperJarPath + .getParent() + .resolve(wrapperJarPath.getFileName() + "." + + Long.toUnsignedString(ThreadLocalRandom.current().nextLong()) + ".tmp"); + try (InputStream inStream = wrapperUrl.openStream()) { + Files.copy(inStream, temp, StandardCopyOption.REPLACE_EXISTING); + Files.move(temp, wrapperJarPath, StandardCopyOption.REPLACE_EXISTING); + } finally { + Files.deleteIfExists(temp); + } + log(" - Downloader complete"); + } + + private static void log(String msg) { + if (VERBOSE) { + System.out.println(msg); + } } } diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar index 2cc7d4a..eebc3c1 100644 Binary files a/.mvn/wrapper/maven-wrapper.jar and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 642d572..7bb2882 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,4 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar +wrapperVersion=3.3.4 +distributionType=source +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e51dab..d2b2926 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,41 @@ ## [Unreleased] +## [1.4.1] - 2025-11-07 +- Bump httpclient from 4.5.14 to httpclient5 5.5.1 +- Bump various maven plugins + +## [1.4.0] - 2025-07-24 +- Bump testcontainers.version from 1.19.3 to 1.21.3 +- Bump jackson-annotations from 2.14.0 to 2.18.4 +- Bump slf4j-api from 2.0.3 to 2.0.17 +- Bump snakeyaml from 2.0 to 2.3 +- Bump httpclient from 4.5.1 to 4.5.14 +- Bump logback-classic from 1.3.4 to 1.3.15 +- Bump junit-jupiter from 5.8.1 to 5.13.3 + +## [1.3.3] - 2024-05-06 +- Add support for environment variable `TARANTOOL_REGISTRY` +- Remove enterprise tests + +## [1.3.2] - 2024-04-25 +- Fix NullPointerException during building docker image when images with null tags exist on a local machine. + +## [1.3.1] - 2024-02-13 + +- Change `TARANTOOL_VERSION` default value from `2.11.2-centos7` to `2.11.2-ubuntu20.04`. It ruins rocks building due to certificate issues on centos. + +## [1.3.0] - 2024-02-02 + +- Change `TARANTOOL_VERSION` semantic. Now it's expected to be a full tag, not prefix of centos version. + ``` + was: ${TARANTOOL_VERSION}-centos7 # TARANTOOL_VERSION == 2.11.2 + now: ${TARANTOOL_VERSION} # TARANTOOL_VERSION could be == 2.11.2-centos7 + ``` + ([#114](https://github.com/tarantool/testcontainers-java-tarantool/pull/114)) +- Support executeCommand for tarantool 3.0+ + + ## [1.2.0] - 2023-12-14 - Remove the default value for `TARANTOOL_CLUSTER_COOKIE` env variable in cartridge container. diff --git a/README.md b/README.md index 6b92125..bbf1af7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TestContainers Tarantool module -[![ubuntu-master](https://github.com/tarantool/testcontainers-java-tarantool/actions/workflows/ubuntu-master.yml/badge.svg)](https://github.com/tarantool/testcontainers-java-tarantool/actions/workflows/ubuntu-master.yml) +[![tests](https://github.com/tarantool/testcontainers-java-tarantool/actions/workflows/tests.yml/badge.svg)](https://github.com/tarantool/testcontainers-java-tarantool/actions/workflows/tests.yml) Testcontainers module for the [Tarantool](https://tarantool.io) database and application server and the [Tarantool Cartridge](https://tarantool.io/cartridge) framework. @@ -14,7 +14,7 @@ Add the Maven dependency: io.tarantool testcontainers-java-tarantool - 1.2.0 + 1.4.1 ``` @@ -167,16 +167,20 @@ public class SomeOtherTest { private static final TarantoolCartridgeContainer container = // Pass the classpath-relative paths of the instances configuration and topology script files new TarantoolCartridgeContainer("cartridge/instances.yml", "cartridge/topology.lua") - // Point out the classpath-relative directory where the application files reside - .withDirectoryBinding("cartridge") - .withRouterHost("localhost") // Optional, "localhost" is default - .withRouterPort(3301) // Binary port, optional, 3301 is default - .withAPIPort(8801) // Cartridge HTTP API port, optional, 8081 is default - .withRouterUsername("admin") // Specify the actual username, default is "admin" - .withRouterPassword("testapp-cluster-cookie") // Specify the actual password, see the "cluster_cookie" parameter - // in the cartridge.cfg({...}) call in your application. - // Usually it can be found in the init.lua module - .withReuse(true); // allows to reuse the container build once for faster testing + // Tarantool URI, optional. Default is "localhost" + .withRouterHost("localhost") + // Binary port, optional. Default is 3301 + .withRouterPort(3301) + // Cartridge HTTP API port, optional, 8081 is default + .withAPIPort(8801) + // Specify the actual username, default is "admin" + .withRouterUsername("admin") + // Specify the actual password, see the "cluster_cookie" parameter + // in the cartridge.cfg({...}) call in your application. + // Usually it can be found in the init.lua module + .withRouterPassword("secret-cluster-cookie") + // allows to reuse the container build once for faster testing + .withReuse(true); // Use the created container in tests public void testFoo() { @@ -193,6 +197,48 @@ public class SomeOtherTest { } ``` +##### Environment variables of cartridge container and build arguments: +###### Build arguments: + +This section describes the Docker image build arguments and environment variables inside the container. It is worth +nothing that almost all build arguments listed here are passed into environment variables of the same name. At the +moment, the following arguments are available to build the image: + +- `CARTRIDGE_SRC_DIR` - directory on the host machine that contains all the .lua scripts needed to initialize and run +cartridge. Defaults is `cartridge`. **Only as a build argument.** +- `TARANTOOL_WORKDIR` - a directory where all data will be stored: snapshots, wal logs and cartridge config files. +Defaults is `/app`. Converts to an environment variable. It is not recommended to override via the `withEnv(...)` method. +- `TARANTOOL_RUNDIR` - a directory where PID and socket files are stored. Defaults is `/tmp/run`. Converts to an +environment variable. It is not recommended to override via the `withEnv(...)` method. +- `TARANTOOL_DATADIR` - a directory containing the instances working directories. Defaults is `/tmp/data`. Converts to +an environment variable. It is not recommended to override via the `withEnv(...)` method. +- `TARANTOOL_LOGDIR` - the directory where log files are stored. Defaults is `/tmp/log`. Converts to an environment +- variable. It is not recommended to override via the `withEnv(...)` method. +- `TARANTOOL_INSTANCES_FILE` - path to the configuration file. Defaults is `./instances.yml`. Converts to an environment +variable. It is not recommended to override via the `withEnv(...)` method. +- `START_DELAY` - the time after which cartridge will actually run after the container has started. Converts to an +environment variable. It is not recommended to override via the `withEnv(...)` method. + +You can set the Docker image build arguments using a map, which is passed as an input argument to the constructor when +creating a container in Java code. See example: https://github.com/tarantool/testcontainers-java-tarantool/blob/355d1e985bd10beca83bc7ca77f919a288709419/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java#L111-L119 + +###### Environment variables: + +To set an environment variable, use the `withEnv(...)` method of testcontainers API. Full list of variables the +environments used in cartridge can be found here [link](https://www.tarantool.io/ru/doc/2.11/book/cartridge/cartridge_api/modules/cartridge/#cfg-opts-box-opts). + +***Note:*** As shown in the previous section, some build arguments are converted to environment variables and used to +cartridge build at the image build stage. + +An example of how to set the `TARANTOOL_CLUSTER_COOKIE` parameter: https://github.com/tarantool/testcontainers-java-tarantool/blob/355d1e985bd10beca83bc7ca77f919a288709419/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java#L57-L82 + +##### Mapping ports + +Often there is a need to connect to a container through a specific port. To achieve this goal it is necessary +to know the mapped port specified in the Java code. To get the mapped port, use the getMappedPort(...)` method of +testcontainers API. See examples: https://github.com/tarantool/testcontainers-java-tarantool/blob/ae580cb59d4621d7c11e5f80c394ec141d4c92b3/src/test/java/org/testcontainers/containers/TarantoolCartridgePortMappingTest.java#L22-L98 + + ## License See [LICENSE](LICENSE). diff --git a/mvnw b/mvnw index 41c0f0c..1ddd97b 100755 --- a/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven Start Up Batch script +# Apache Maven Wrapper startup batch script, version 3.3.4 # # Required ENV vars: # ------------------ @@ -27,284 +27,312 @@ # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir # MAVEN_OPTS - parameters passed to the Java VM when running Maven # e.g. to debug Maven itself, use # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 # MAVEN_SKIP_RC - flag to disable loading of mavenrc files # ---------------------------------------------------------------------------- -if [ -z "$MAVEN_SKIP_RC" ] ; then +if [ -z "$MAVEN_SKIP_RC" ]; then - if [ -f /etc/mavenrc ] ; then + if [ -f /usr/local/etc/mavenrc ]; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ]; then . /etc/mavenrc fi - if [ -f "$HOME/.mavenrc" ] ; then + if [ -f "$HOME/.mavenrc" ]; then . "$HOME/.mavenrc" fi fi # OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; +cygwin=false +darwin=false mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi +case "$(uname)" in +CYGWIN*) cygwin=true ;; +MINGW*) mingw=true ;; +Darwin*) + darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)" + export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home" + export JAVA_HOME fi - ;; + fi + ;; esac -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` +if [ -z "$JAVA_HOME" ]; then + if [ -r /etc/gentoo-release ]; then + JAVA_HOME=$(java-config --jre-home) fi fi -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +if $cygwin; then + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +if $mingw; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] \ + && JAVA_HOME="$( + cd "$JAVA_HOME" || ( + echo "cannot cd into $JAVA_HOME." >&2 + exit 1 + ) + pwd + )" fi if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "$javaExecutable" : '\([^ ]*\)')" = "no" ]; then # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin; then + javaHome="$(dirname "$javaExecutable")" + javaExecutable="$(cd "$javaHome" && pwd -P)/javac" else - javaExecutable="`readlink -f \"$javaExecutable\"`" + javaExecutable="$(readlink -f "$javaExecutable")" fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` + javaHome="$(dirname "$javaExecutable")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') JAVA_HOME="$javaHome" export JAVA_HOME fi fi fi -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +if [ -z "$JAVACMD" ]; then + if [ -n "$JAVA_HOME" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="$( + \unset -f command 2>/dev/null + \command -v java + )" fi fi -if [ ! -x "$JAVACMD" ] ; then +if [ ! -x "$JAVACMD" ]; then echo "Error: JAVA_HOME is not defined correctly." >&2 echo " We cannot execute $JAVACMD" >&2 exit 1 fi -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." +if [ -z "$JAVA_HOME" ]; then + echo "Warning: JAVA_HOME environment variable is not set." >&2 fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" + if [ -z "$1" ]; then + echo "Path not specified to find_maven_basedir" >&2 return 1 fi basedir="$1" wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then + while [ "$wdir" != '/' ]; do + if [ -d "$wdir"/.mvn ]; then basedir=$wdir break fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + wdir=$( + cd "$wdir/.." || exit 1 + pwd + ) fi # end of workaround done - echo "${basedir}" + printf '%s' "$( + cd "$basedir" || exit 1 + pwd + )" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' <"$1" fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then - exit 1; + exit 1 fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar" + fi + while IFS="=" read -r key value; do + case "$key" in wrapperUrl) + wrapperUrl=$(trim "${value-}") + break + ;; + esac + done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget >/dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget ${QUIET:+"$QUIET"} "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wget ${QUIET:+"$QUIET"} --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" + elif command -v curl >/dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl ${QUIET:+"$QUIET"} -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl ${QUIET:+"$QUIET"} --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi fi + fi fi ########################################################################################## # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in wrapperSha256Sum) + wrapperSha256Sum=$(trim "${value-}") + break + ;; + esac +done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c - >/dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c >/dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi fi + MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] \ + && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi # Provide a "standardized" way to retrieve the CLI args that will # work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +# shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 8611571..8366e21 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -18,13 +18,12 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script +@REM Apache Maven Wrapper startup batch script, version 3.3.4 @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @REM @REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @@ -46,8 +45,8 @@ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") @REM Execute a user defined script before this one if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* :skipRcPre @setlocal @@ -60,22 +59,22 @@ set ERROR_CODE=0 @REM ==== START VALIDATION ==== if not "%JAVA_HOME%" == "" goto OkJHome -echo. +echo. >&2 echo Error: JAVA_HOME not found in your environment. >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 -echo. +echo. >&2 goto error :OkJHome if exist "%JAVA_HOME%\bin\java.exe" goto init -echo. +echo. >&2 echo Error: JAVA_HOME is set to an invalid directory. >&2 echo JAVA_HOME = "%JAVA_HOME%" >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 -echo. +echo. >&2 goto error @REM ==== END VALIDATION ==== @@ -120,10 +119,10 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar" -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @@ -134,11 +133,11 @@ if exist %WRAPPER_JAR% ( ) ) else ( if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.3.4/maven-wrapper-3.3.4.jar" ) if "%MVNW_VERBOSE%" == "true" ( echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% + echo Downloading from: %WRAPPER_URL% ) powershell -Command "&{"^ @@ -146,7 +145,7 @@ if exist %WRAPPER_JAR% ( "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ "}" if "%MVNW_VERBOSE%" == "true" ( echo Finished downloading %WRAPPER_JAR% @@ -154,11 +153,36 @@ if exist %WRAPPER_JAR% ( ) @REM End of extension +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash;"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Error 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Error 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Error 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + @REM Provide a "standardized" way to retrieve the CLI args that will @REM work with both Windows and non-Windows executions. set MAVEN_CMD_LINE_ARGS=%* -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end @@ -168,15 +192,15 @@ set ERROR_CODE=1 :end @endlocal & set ERROR_CODE=%ERROR_CODE% -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost @REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" :skipRcPost @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause +if "%MAVEN_BATCH_PAUSE%"=="on" pause -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% -exit /B %ERROR_CODE% +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index b1c100d..a484b1a 100644 --- a/pom.xml +++ b/pom.xml @@ -49,11 +49,11 @@ scm:git:git@github.com:tarantool/testcontainers-java-tarantool.git scm:git:git@github.com:tarantool/testcontainers-java-tarantool.git http://github.com/tarantool/testcontainers-java-tarantool/tree/master - v1.2.0 + HEAD - 1.19.3 + 1.21.3 UTF-8 UTF-8 ${project.basedir}/src/test/resources/logback-test.xml @@ -65,12 +65,12 @@ com.fasterxml.jackson.core jackson-annotations - 2.14.0 + 2.18.4 org.slf4j slf4j-api - 2.0.3 + 2.0.17 @@ -84,7 +84,7 @@ org.yaml snakeyaml - 2.0 + 2.3 org.slf4j @@ -92,17 +92,25 @@ + + org.apache.httpcomponents.client5 + httpclient5 + 5.5.1 + test + + ch.qos.logback logback-classic - 1.3.4 + 1.3.15 test + - org.junit.jupiter - junit-jupiter - 5.8.1 - test + org.junit.jupiter + junit-jupiter + 5.13.3 + test org.testcontainers @@ -125,45 +133,12 @@ org.apache.maven.plugins maven-resources-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 - - 1.8 - true - true - true - true - true - 8 - 8 - - **/package-info.java - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.0.0-M5 - - - **/*Test.java - - - ${logging.config} - ${logging.logLevel} - - false - + 3.3.1 org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.12.0 false true @@ -172,21 +147,10 @@ true - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 - true - - ossrh - https://oss.sonatype.org/ - false - - org.apache.maven.plugins maven-release-plugin - 3.0.0-M1 + 3.1.1 true release @@ -195,21 +159,64 @@ v@{project.version} + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + + prepare-agent + + + true + + + + + + + ${project.build.directory} + + *.exec + + + + + - enterprise + unit + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + 1.8 + true + true + true + true + true + 8 + 8 + + **/package-info.java + + + org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M5 + 3.5.2 - **/*TestEnterprise.java + **/*Test.java ${logging.config} @@ -222,12 +229,101 @@ - release + integration - maven-source-plugin + org.apache.maven.plugins + maven-antrun-plugin 3.2.0 + + + process-test-classes + process-test-classes + + run + + + + + + maven-surefire-plugin + 3.5.2 + + + **/*IT.java + + + **/*TarantoolContainer*IT.java + + + ${logging.config} + ${logging.logLevel} + + false + + + + + + + tarantool-container + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.2 + + + **/*TarantoolContainer*IT.java + + + ${logging.config} + ${logging.logLevel} + + false + + + + + + + sonatypeSnapshot + + + + org.sonatype.central + central-publishing-maven-plugin + 0.9.0 + true + + central-portal-snapshots + io.tarantool.testcontainers-java-tarantool + uploaded + + + + + + + sonatypeRelease + + + + org.sonatype.central + central-publishing-maven-plugin + 0.9.0 + true + + central + io.tarantool.testcontainers-java-tarantool + uploaded + + + + maven-source-plugin + 3.3.1 @@ -259,7 +355,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.12.0 attach-javadocs @@ -272,7 +368,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 + 3.2.8 sign-artifacts @@ -294,14 +390,17 @@ - - - sonatype-nexus-snapshots - https://oss.sonatype.org/content/repositories/snapshots - + - sonatype-nexus-staging - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + Central Portal Snapshots + central-portal-snapshots + https://central.sonatype.com/repository/maven-snapshots/ + + false + + + true + - + diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainer.java b/src/main/java/org/testcontainers/containers/TarantoolContainer.java index e9d9856..0e42d9d 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainer.java @@ -17,9 +17,9 @@ public class TarantoolContainer extends GenericContainer implements TarantoolContainerOperations { - public static final String TARANTOOL_IMAGE = "tarantool/tarantool"; - public static final String DEFAULT_IMAGE_VERSION = "2.10.5"; - public static final String DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION); + public static final String DEFAULT_IMAGE = "tarantool/tarantool"; + public static final String DEFAULT_TAG = "2.11.2-ubuntu20.04"; + public static final String DEFAULT_BASE_IMAGE = String.format("%s:%s", DEFAULT_IMAGE, DEFAULT_TAG); private static final String DEFAULT_HOST = "localhost"; @@ -50,7 +50,7 @@ public class TarantoolContainer extends GenericContainer * Constructor for {@link TarantoolContainer} */ public TarantoolContainer() { - this(DEFAULT_TARANTOOL_BASE_IMAGE); + this(DEFAULT_BASE_IMAGE); setImageNameFromEnv(); } @@ -386,7 +386,11 @@ public T executeCommandDecoded(String command) throws Exception { private void setImageNameFromEnv() { String version = System.getenv("TARANTOOL_VERSION"); if (version != null && !version.trim().isEmpty()) { - setDockerImageName(String.format("%s:%s-centos7", TARANTOOL_IMAGE, version)); + String registry = System.getenv("TARANTOOL_REGISTRY"); + String image = registry == null || registry.isEmpty() ? + DEFAULT_IMAGE : + (registry.endsWith("/") ? registry + DEFAULT_IMAGE : registry + "/" + DEFAULT_IMAGE); + setDockerImageName(String.format("%s:%s", image, version)); } } } diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainerClientHelper.java b/src/main/java/org/testcontainers/containers/TarantoolContainerClientHelper.java index 242b041..3c847bc 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainerClientHelper.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainerClientHelper.java @@ -25,6 +25,8 @@ public final class TarantoolContainerClientHelper { "Executed script %s with exit code %d, stderr: \"%s\", stdout: \"%s\""; private static final String EXECUTE_COMMAND_ERROR_TEMPLATE = "Executed command \"%s\" with exit code %d, stderr: \"%s\", stdout: \"%s\""; + // Generates bash command witch creates executable lua file with connection to required node + // and evaluation of needed lua code private static final String MTLS_COMMAND_TEMPLATE = "echo \" " + " print(require('yaml').encode( " + @@ -35,7 +37,8 @@ public final class TarantoolContainerClientHelper { " ):eval('%s')}) " + " ); " + " os.exit(); " + - "\" | tarantool"; + "\" > container-tmp.lua &&" + + " tarantool container-tmp.lua"; private static final String SSL_COMMAND_TEMPLATE = "echo \" " + " print(require('yaml').encode( " + @@ -45,7 +48,8 @@ public final class TarantoolContainerClientHelper { " ):eval('%s')}) " + " ); " + " os.exit(); " + - "\" | tarantool"; + "\" > container-tmp.lua &&" + + " tarantool container-tmp.lua"; private static final String COMMAND_TEMPLATE = "echo \" " + " print(require('yaml').encode( " + " {require('net.box').connect( " + @@ -54,7 +58,8 @@ public final class TarantoolContainerClientHelper { " ):eval('%s')}) " + " ); " + " os.exit(); " + - "\" | tarantool"; + "\" > container-tmp.lua &&" + + " tarantool container-tmp.lua"; TarantoolContainerClientHelper(TarantoolContainerOperations> container) { this.container = container; diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java b/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java index 6c5a4f3..7438e35 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.BuildImageCmd; @@ -71,6 +72,7 @@ private static boolean hasImage(String tag) { final List images = getDockerClient().listImagesCmd().exec(); return images.stream() .map(Image::getRepoTags) + .filter(Objects::nonNull) .map(Arrays::asList) .flatMap(Collection::stream) .anyMatch(repoTag -> repoTag.equals(tag)); diff --git a/src/main/java/org/testcontainers/containers/TarantoolImageParams.java b/src/main/java/org/testcontainers/containers/TarantoolImageParams.java index 6c0f8a7..3723f8f 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolImageParams.java +++ b/src/main/java/org/testcontainers/containers/TarantoolImageParams.java @@ -2,6 +2,7 @@ import java.io.File; import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** @@ -38,6 +39,17 @@ public TarantoolImageParams(String tag, File dockerfile, Map bui this.buildArgs = buildArgs; } + /** + * Custom constructor for tarantool image parameters + * + * @param tag docker image tag + * @param dockerfile dockerfile for building custom tarantool image + * @param baseImageName default image name for building docker image + */ + public TarantoolImageParams(String tag, File dockerfile, String baseImageName) { + this(tag, dockerfile, extract(baseImageName)); + } + /** * Getter for sdk version * @@ -64,4 +76,22 @@ public File getDockerfile() { Map getBuildArgs() { return buildArgs; } + + /** + * Extract build arguments from environment variables + * + * @param defaultImage default image name for building docker image + * @return map of building arguments + */ + private static Map extract(String defaultImage) { + final Map buildArgs = new HashMap<>(); + String registry = System.getenv("TARANTOOL_REGISTRY"); + if (registry != null && !registry.isEmpty()) { + buildArgs.put("IMAGE", registry.endsWith("/") ? registry + defaultImage : registry + "/" + defaultImage); + } + buildArgs.put("DOWNLOAD_HOST", System.getenv("DOWNLOAD_HOST")); + buildArgs.put("SDK_PATH", System.getenv("SDK_PATH")); + buildArgs.put("CLUSTER_SRC_DIR", "vshard_cluster"); + return buildArgs; + } } diff --git a/src/main/resources/Dockerfile b/src/main/resources/Dockerfile index bac5f19..b4511cb 100644 --- a/src/main/resources/Dockerfile +++ b/src/main/resources/Dockerfile @@ -1,17 +1,17 @@ -ARG TARANTOOL_VERSION=2.11.0 -FROM tarantool/tarantool:${TARANTOOL_VERSION}-centos7 AS cartridge-base +ARG IMAGE="tarantool/tarantool" +ARG TARANTOOL_VERSION="2.11.2-ubuntu20.04" +FROM $IMAGE:$TARANTOOL_VERSION AS cartridge-base -# system preparations because docker mount directory as a root ARG TARANTOOL_SERVER_USER="root" ARG TARANTOOL_SERVER_GROUP="root" USER $TARANTOOL_SERVER_USER:$TARANTOOL_SERVER_GROUP RUN groupadd $TARANTOOL_SERVER_GROUP && useradd -m -s /bin/bash $TARANTOOL_SERVER_USER || true # install dependencies -# a yum bug requires setting ulimit, see https://bugzilla.redhat.com/show_bug.cgi?id=1537564 RUN ulimit -n 1024 && \ - yum -y install cmake make gcc gcc-c++ git unzip cartridge-cli && \ - yum clean all + apt-get -y update && \ + apt-get -y install build-essential cmake make gcc git unzip cartridge-cli && \ + apt-get -y clean RUN cartridge version # build and run @@ -31,6 +31,7 @@ ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR ENV TARANTOOL_LOGDIR=$TARANTOOL_LOGDIR ENV TARANTOOL_INSTANCES_FILE=$TARANTOOL_INSTANCES_FILE ENV TARANTOOL_CLUSTER_COOKIE=$TARANTOOL_CLUSTER_COOKIE +ENV CMAKE_DUMMY_WEBUI="YES" COPY $CARTRIDGE_SRC_DIR $TARANTOOL_WORKDIR WORKDIR $TARANTOOL_WORKDIR diff --git a/src/test/java/org/testcontainers/containers/CartridgeContainerTestUtils.java b/src/test/java/org/testcontainers/containers/CartridgeContainerTestUtils.java index fc36c76..bdfa8b4 100644 --- a/src/test/java/org/testcontainers/containers/CartridgeContainerTestUtils.java +++ b/src/test/java/org/testcontainers/containers/CartridgeContainerTestUtils.java @@ -1,6 +1,9 @@ package org.testcontainers.containers; +import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; @@ -21,4 +24,18 @@ static public void executeProfileReplaceSmokeTest(TarantoolCartridgeContainer co assertEquals(1, result.size()); assertEquals(33, ((List) result.get(0)).get(3)); } + + public static boolean isEnvInStdout(String stdout, Map env) { + Map envMap = Arrays.stream(stdout.split("\n")) + .collect(Collectors.toMap(toKey -> toKey.split("=")[0], + toValue -> { + String[] pair = toValue.split("="); + if (pair.length == 1) { + return "null"; + } + return pair[1]; + })); + + return envMap.entrySet().containsAll(env.entrySet()); + } } diff --git a/src/test/java/org/testcontainers/containers/TarantoolStaticContainerTest.java b/src/test/java/org/testcontainers/containers/StaticTarantoolContainerIT.java similarity index 87% rename from src/test/java/org/testcontainers/containers/TarantoolStaticContainerTest.java rename to src/test/java/org/testcontainers/containers/StaticTarantoolContainerIT.java index 111a98b..875c24d 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolStaticContainerTest.java +++ b/src/test/java/org/testcontainers/containers/StaticTarantoolContainerIT.java @@ -13,10 +13,11 @@ * @author Ivan Dneprov */ @Testcontainers -public class TarantoolStaticContainerTest { +public class StaticTarantoolContainerIT { + protected static final String tarantoolVersion = System.getenv().get("TARANTOOL_VERSION"); @Container - private static final TarantoolContainer container = new TarantoolContainer(); + protected static final TarantoolContainer container = new TarantoolContainer(); @Test public void testExecuteCommand() throws Exception { diff --git a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT.java similarity index 60% rename from src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java rename to src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT.java index 6f1fa38..654c36d 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT.java @@ -1,12 +1,14 @@ package org.testcontainers.containers; import java.time.Duration; +import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.rnorth.ducttape.RetryCountExceededException; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.Container.ExecResult; import org.testcontainers.containers.exceptions.CartridgeTopologyException; import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.junit.jupiter.Container; @@ -16,18 +18,17 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; - /** * @author Alexey Kuzin */ @Testcontainers -public class TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest { +public class TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT { @Container private static final TarantoolCartridgeContainer container = new TarantoolCartridgeContainer( "Dockerfile", - "cartridge", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "cartridge", "cartridge/instances_fixedport.yml", "cartridge/topology_fixedport.lua") .withEnv("TARANTOOL_INSTANCES_FILE", "instances_fixedport.yml") @@ -36,7 +37,7 @@ public class TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest { .withAPIPort(18081) .withRouterPort(13301) .withLogConsumer(new Slf4jLogConsumer( - LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class))); + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT.class))); @Test public void test_StaticClusterContainer_StartsSuccessfully_ifFilesAreCopied() throws Exception { @@ -56,7 +57,7 @@ public void testTarantoolClusterCookieDefault() throws Exception { public void testTarantoolClusterCookieWithEnv() throws Exception { try(TarantoolCartridgeContainer newContainer = new TarantoolCartridgeContainer( "Dockerfile", - "cartridge", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "cartridge", "cartridge/instances.yml", "cartridge/replicasets.yml") .withEnv(TarantoolCartridgeContainer.ENV_TARANTOOL_CLUSTER_COOKIE, "secret") @@ -64,12 +65,16 @@ public void testTarantoolClusterCookieWithEnv() throws Exception { .withRouterPassword("secret") .withStartupTimeout(Duration.ofMinutes(5)) .withLogConsumer(new Slf4jLogConsumer( - LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlTest.class)))) + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlIT.class)))) { newContainer.start(); - Map env = container.getEnvMap(); - assertFalse(env.containsKey(TarantoolCartridgeContainer.ENV_TARANTOOL_CLUSTER_COOKIE)); - List result = container.executeCommandDecoded("return true"); + ExecResult res = newContainer.execInContainer("env"); + assertTrue(CartridgeContainerTestUtils.isEnvInStdout(res.getStdout(), + new HashMap(){{ + put("TARANTOOL_CLUSTER_COOKIE", "secret"); + }})); + + List result = newContainer.executeCommandDecoded("return true"); assertEquals(1, result.size()); assertTrue((boolean) result.get(0)); } @@ -80,12 +85,12 @@ public void test_retryingSetupTopology_shouldWork() { try (TarantoolCartridgeContainer testContainer = new TarantoolCartridgeContainer( "Dockerfile", - "cartridge", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "cartridge", "cartridge/instances.yml", "cartridge/incorrect_topology.lua") .withLogConsumer(new Slf4jLogConsumer( LoggerFactory.getLogger( - TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class))) + TarantoolCartridgeBootstrapFromLuaWithFixedPortsIT.class))) .withStartupTimeout(Duration.ofMinutes(5))) { ContainerLaunchException ex = assertThrows(ContainerLaunchException.class, testContainer::start); Throwable cause = ex.getCause(); @@ -97,4 +102,39 @@ public void test_retryingSetupTopology_shouldWork() { assertEquals("Failed to change the app topology after retry", cause.getMessage()); } } + + + @Test + public void testBuildArgs() throws Exception { + + final Map buildArgs = new HashMap(){{ + put("CARTRIDGE_SRC_DIR", "cartridge"); + put("TARANTOOL_WORKDIR", "/app"); + put("TARANTOOL_RUNDIR", "/tmp/new_run"); + put("TARANTOOL_DATADIR", "/tmp/new_data"); + put("TARANTOOL_LOGDIR", "/tmp/log"); + put("TARANTOOL_INSTANCES_FILE", "./instances.yml"); + put("START_DELAY", "1s"); + }}; + + try(TarantoolCartridgeContainer newContainer = new TarantoolCartridgeContainer( + "Dockerfile", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "build_args_test", + "cartridge/instances.yml", + "cartridge/replicasets.yml", + buildArgs) + .withStartupTimeout(Duration.ofMinutes(5)) + .withLogConsumer(new Slf4jLogConsumer( + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlIT.class))) + ) { + newContainer.start(); + ExecResult res = newContainer.execInContainer("env"); + buildArgs.remove("CARTRIDGE_SRC_DIR", "cartridge"); + assertTrue(CartridgeContainerTestUtils.isEnvInStdout(res.getStdout(), buildArgs)); + + List result = newContainer.executeCommandDecoded("return true"); + assertEquals(1, result.size()); + assertTrue((boolean) result.get(0)); + } + } } diff --git a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlIT.java similarity index 88% rename from src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java rename to src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlIT.java index 013df6b..9d64310 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlIT.java @@ -16,18 +16,18 @@ * @author Ivan Dneprov */ @Testcontainers -public class TarantoolCartridgeBootstrapFromYamlTest { +public class TarantoolCartridgeBootstrapFromYamlIT { @Container private static final TarantoolCartridgeContainer container = new TarantoolCartridgeContainer( "Dockerfile", - "cartridge", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "cartridge", "cartridge/instances.yml", "cartridge/replicasets.yml") .withStartupTimeout(Duration.ofMinutes(5)) .withLogConsumer(new Slf4jLogConsumer( - LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlTest.class))); + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlIT.class))); @Test public void test_StaticClusterContainer_StartsSuccessfully_ifFilesAreCopied() throws Exception { diff --git a/src/test/java/org/testcontainers/containers/TarantoolCartridgePortMappingIT.java b/src/test/java/org/testcontainers/containers/TarantoolCartridgePortMappingIT.java new file mode 100644 index 0000000..a5b6889 --- /dev/null +++ b/src/test/java/org/testcontainers/containers/TarantoolCartridgePortMappingIT.java @@ -0,0 +1,105 @@ +package org.testcontainers.containers; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.Socket; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.Duration; +import java.util.concurrent.ThreadLocalRandom; + +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.junit.jupiter.Container; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TarantoolCartridgePortMappingIT { + + @Container + private final static TarantoolCartridgeContainer container = new TarantoolCartridgeContainer( + "Dockerfile", + System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "") + "mapping-ports-container", + "cartridge/instances.yml", + "cartridge/replicasets.yml") + .withEnv(TarantoolCartridgeContainer.ENV_TARANTOOL_CLUSTER_COOKIE, "secret") + .withRouterUsername("admin") + .withRouterPassword("secret") + .withStartupTimeout(Duration.ofMinutes(5)) + .withLogConsumer(new Slf4jLogConsumer( + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlIT.class))); + + @Test + void portMappingTest() throws IOException, URISyntaxException { + + final int httpPortToFirstRouter = 8081; + final int httpPortToSecondRouter = 8082; + final int portToFirstRouter = 3301; + final int portToSecondRouter = 3302; + final String host = "localhost"; + final String schema = "http"; + + container.addExposedPorts(httpPortToFirstRouter, httpPortToSecondRouter, portToFirstRouter, portToSecondRouter); + container.start(); + + URI firstRouterConnectionURI = new URI(schema, null, host, + container.getMappedPort(httpPortToFirstRouter), null, null, null); + + // send get request to first router via http + ClassicHttpResponse response = sendCurlToRouterHttpAPI(firstRouterConnectionURI); + assertEquals(200, response.getCode()); + + URI secondRouterConnectionURI = new URI(schema, null, host, + container.getMappedPort(httpPortToSecondRouter), null, null, null); + // send get request to second router via http + response = sendCurlToRouterHttpAPI(secondRouterConnectionURI); + assertEquals(200, response.getCode()); + + // connect to first router via socket + URI firstRouterConnectionURIViaSocket = new URI(null, null, host, + container.getMappedPort(portToFirstRouter), null, null, null); + String result = connectToRouterViaSocket(firstRouterConnectionURIViaSocket); + assertFalse(result.isEmpty()); + assertTrue(result.contains("Tarantool")); + + // connect to second router via socket + URI secondRouterConnectionURIViaSocket = new URI(null, null, host, + container.getMappedPort(portToSecondRouter), null, null, null); + result = connectToRouterViaSocket(secondRouterConnectionURIViaSocket); + assertFalse(result.isEmpty()); + assertTrue(result.contains("Tarantool")); + + // Connect to random port + URI randomPortConnectionURIViaSocket = new URI(null, null, host, + ThreadLocalRandom.current().nextInt(49152, 65535), null, null, null); + result = connectToRouterViaSocket(randomPortConnectionURIViaSocket); + assertTrue(result.isEmpty()); + } + + private ClassicHttpResponse sendCurlToRouterHttpAPI(URI uri) throws IOException { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpGet httpGetRequest = new HttpGet(uri); + return httpClient.execute(httpGetRequest); + } + } + + private String connectToRouterViaSocket(URI uri) { + final String returnedString; + + try (Socket socket = new Socket(uri.getHost(), uri.getPort()); + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) { + + returnedString = in.readLine(); + } catch (IOException e) { + return ""; + } + return returnedString; + } +} diff --git a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java b/src/test/java/org/testcontainers/containers/TarantoolContainerIT.java similarity index 85% rename from src/test/java/org/testcontainers/containers/TarantoolContainerTest.java rename to src/test/java/org/testcontainers/containers/TarantoolContainerIT.java index 0f0573f..ef7f797 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolContainerIT.java @@ -12,9 +12,10 @@ * @author Alexey Kuzin * @author Ivan Dneprov */ -class TarantoolContainerTest { +class TarantoolContainerIT { private static final String ENV_TARANTOOL_VERSION = "TARANTOOL_VERSION"; + protected static final String tarantoolVersion = System.getenv(ENV_TARANTOOL_VERSION); private void addEnv(String key, String value) throws NoSuchFieldException, IllegalAccessException { Class classOfMap = System.getenv().getClass(); @@ -73,31 +74,16 @@ public void testContainerWithParameters() throws Exception { @Test public void testContainerWithTrueVersion() throws Exception { - final String version = "2.11.0"; - addEnv(ENV_TARANTOOL_VERSION, version); - List result; try (TarantoolContainer container = new TarantoolContainer()) { container.start(); result = container.executeCommandDecoded("return _TARANTOOL"); } - removeEnv(ENV_TARANTOOL_VERSION, version); assertEquals(1, result.size()); - assertTrue(result.get(0).startsWith(version)); - } - - @Test - public void testContainerWithDefaultVersionVersion() throws Exception { - - List result; - try (TarantoolContainer container = new TarantoolContainer()) { - container.start(); - result = container.executeCommandDecoded("return _TARANTOOL"); + if (tarantoolVersion != null) { + assertTrue(result.get(0).startsWith(String.valueOf(tarantoolVersion.charAt(0)))); } - - assertEquals(1, result.size()); - assertTrue(result.get(0).startsWith(TarantoolContainer.DEFAULT_IMAGE_VERSION)); } @Test diff --git a/src/test/java/org/testcontainers/containers/enterprise/TarantoolMTlsContainerTestEnterprise.java b/src/test/java/org/testcontainers/containers/enterprise/TarantoolMTlsContainerTestEnterprise.java deleted file mode 100644 index 00868bf..0000000 --- a/src/test/java/org/testcontainers/containers/enterprise/TarantoolMTlsContainerTestEnterprise.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.testcontainers.containers.enterprise; - -import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.SslContext; -import org.testcontainers.containers.TarantoolContainer; -import org.testcontainers.containers.TarantoolImageParams; -import org.testcontainers.containers.output.Slf4jLogConsumer; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * @author Ivan Dneprov - */ -public class TarantoolMTlsContainerTestEnterprise { - - private static final Logger log = LoggerFactory.getLogger(TarantoolMTlsContainerTestEnterprise.class); - - private static TarantoolContainer containerWithSsl; - - @BeforeAll - public static void setUp() throws Exception { - final File dockerfile = new File( - TarantoolMTlsContainerTestEnterprise.class.getClassLoader() - .getResource("enterprise/Dockerfile").toURI() - ); - final Map buildArgs = new HashMap<>(); - buildArgs.put("DOWNLOAD_SDK_URI", System.getenv("DOWNLOAD_SDK_URI")); - buildArgs.put("SDK_VERSION", System.getenv("SDK_VERSION")); - - containerWithSsl = new TarantoolContainer( - new TarantoolImageParams("tarantool-enterprise", dockerfile, buildArgs)) - .withScriptFileName("mtls_server.lua") - .withUsername("api_user") - .withPassword("secret") - .withMemtxMemory(256 * 1024 * 1024) - .withDirectoryBinding("enterprise/ssl/mtls") - .withSslContext(SslContext.getSslContext("/app/ca.key", "/app/ca.crt")) - .withLogConsumer(new Slf4jLogConsumer(log)); - - if (!containerWithSsl.isRunning()) { - containerWithSsl.start(); - } - } - - @Test - public void test_clientWithSsl_shouldWork() throws Exception { - List resultList = containerWithSsl.executeCommandDecoded("return box.cfg.listen"); - HashMap result = resultList.get(0); - HashMap params = result.get("params"); - assertEquals("ssl", params.get("transport")); - assertEquals("server.key", params.get("ssl_key_file")); - assertEquals("server.crt", params.get("ssl_cert_file")); - assertEquals("ca.crt", params.get("ssl_ca_file")); - } -} diff --git a/src/test/java/org/testcontainers/containers/enterprise/TarantoolSdkContainerTestEnterprise.java b/src/test/java/org/testcontainers/containers/enterprise/TarantoolSdkContainerTestEnterprise.java deleted file mode 100644 index 60f700d..0000000 --- a/src/test/java/org/testcontainers/containers/enterprise/TarantoolSdkContainerTestEnterprise.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.testcontainers.containers.enterprise; - -import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.testcontainers.containers.TarantoolContainer; -import org.testcontainers.containers.TarantoolImageParams; - -/** - * @author Oleg Kuznetsov - * @author Ivan Dneprov - */ -public class TarantoolSdkContainerTestEnterprise { - - - @Test - void test_should_createTarantoolContainerFromSdk() throws Exception { - final File dockerfile = new File( - TarantoolSdkContainerTestEnterprise.class.getClassLoader().getResource("enterprise/Dockerfile").toURI() - ); - final Map buildArgs = new HashMap<>(); - buildArgs.put("DOWNLOAD_SDK_URI", System.getenv("DOWNLOAD_SDK_URI")); - buildArgs.put("SDK_VERSION", System.getenv("SDK_VERSION")); - - try (final TarantoolContainer tarantoolContainer = new TarantoolContainer( - new TarantoolImageParams("tarantool-enterprise-bundle:latest", dockerfile, buildArgs)) - .withDirectoryBinding("enterprise")) { - - tarantoolContainer.start(); - - List result = tarantoolContainer.executeCommandDecoded("return 'test'"); - List versionAnswer = tarantoolContainer.executeCommandDecoded("return _TARANTOOL"); - - Assertions.assertEquals("test", result.get(0)); - Assertions.assertEquals("2.10.7-0-g2e9b20365-r563-nogc64", versionAnswer.get(0)); - } - } -} diff --git a/src/test/java/org/testcontainers/containers/enterprise/TarantoolSslContainerTestEnterprise.java b/src/test/java/org/testcontainers/containers/enterprise/TarantoolSslContainerTestEnterprise.java deleted file mode 100644 index ce536c7..0000000 --- a/src/test/java/org/testcontainers/containers/enterprise/TarantoolSslContainerTestEnterprise.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.testcontainers.containers.enterprise; - -import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.SslContext; -import org.testcontainers.containers.TarantoolContainer; -import org.testcontainers.containers.TarantoolImageParams; -import org.testcontainers.containers.output.Slf4jLogConsumer; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * @author Ivan Dneprov - */ -public class TarantoolSslContainerTestEnterprise { - - private static final Logger log = LoggerFactory.getLogger(TarantoolSslContainerTestEnterprise.class); - - private static TarantoolContainer containerWithSsl; - - @BeforeAll - public static void setUp() throws Exception { - final File dockerfile = new File( - TarantoolSslContainerTestEnterprise.class.getClassLoader() - .getResource("enterprise/Dockerfile").toURI() - ); - final Map buildArgs = new HashMap<>(); - buildArgs.put("DOWNLOAD_SDK_URI", System.getenv("DOWNLOAD_SDK_URI")); - buildArgs.put("SDK_VERSION", System.getenv("SDK_VERSION")); - - containerWithSsl = new TarantoolContainer( - new TarantoolImageParams("tarantool-enterprise", dockerfile, buildArgs)) - .withScriptFileName("ssl_server.lua") - .withUsername("api_user") - .withPassword("secret") - .withMemtxMemory(256 * 1024 * 1024) - .withDirectoryBinding("enterprise/ssl") - .withSslContext(SslContext.getSslContext()) - .withLogConsumer(new Slf4jLogConsumer(log)); - - if (!containerWithSsl.isRunning()) { - containerWithSsl.start(); - } - } - - @Test - public void test_clientWithSsl_shouldWork() throws Exception { - List resultList = containerWithSsl.executeCommandDecoded("return box.cfg.listen"); - HashMap result = resultList.get(0); - HashMap params = result.get("params"); - assertEquals("ssl", params.get("transport")); - assertEquals("key.pem", params.get("ssl_key_file")); - assertEquals("certificate.crt", params.get("ssl_cert_file")); - } -} diff --git a/src/test/resources/enterprise/Dockerfile b/src/test/resources/enterprise/Dockerfile deleted file mode 100644 index f86d2b8..0000000 --- a/src/test/resources/enterprise/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM centos:7 - -ARG TARANTOOL_WORKDIR="/app" -ARG TARANTOOL_RUNDIR="/tmp/run" -ARG TARANTOOL_DATADIR="/tmp/data" -ARG SDK_TGT_DIR="/sdk" -ARG DOWNLOAD_SDK_URI="" -ARG SDK_VERSION="" -ARG SDK_TGZ=$SDK_VERSION.tar.gz - -ENV DOWNLOAD_SDK_URI=$DOWNLOAD_SDK_URI -ENV SDK_VERSION=$SDK_VERSION -ENV SDK_TGT_DIR=$SDK_TGT_DIR -ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR -ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR -ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR - -RUN curl https://curl.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt && \ - yum -y install wget && \ - wget $DOWNLOAD_SDK_URI/$SDK_TGZ && \ - mkdir ./tmp_sdk && tar -xf $SDK_TGZ -C ./tmp_sdk && \ - mv ./tmp_sdk/tarantool-enterprise $SDK_TGT_DIR && rm $SDK_TGZ && \ - cp $SDK_TGT_DIR/tarantool /usr/bin/tarantool - -WORKDIR $TARANTOOL_WORKDIR diff --git a/src/test/resources/enterprise/server.lua b/src/test/resources/enterprise/server.lua deleted file mode 100644 index cc6580b..0000000 --- a/src/test/resources/enterprise/server.lua +++ /dev/null @@ -1,10 +0,0 @@ -box.cfg { - listen = 3301, - memtx_memory = 128 * 1024 * 1024, -- 128 Mb - -- log = 'file:/tmp/tarantool.log', - log_level = 6, -} --- API user will be able to login with this password -box.schema.user.create('api_user', { password = 'secret', if_not_exists = true }) --- API user will be able to create spaces, add or remove data, execute functions -box.schema.user.grant('api_user', 'read,write,execute', 'universe', nil, { if_not_exists = true }) diff --git a/src/test/resources/enterprise/ssl/certificate.crt b/src/test/resources/enterprise/ssl/certificate.crt deleted file mode 100644 index 62ebf3a..0000000 --- a/src/test/resources/enterprise/ssl/certificate.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDhDCCAmwCCQCbVZGkNwxnRzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC -UlUxDzANBgNVBAgMBk1vc2NvdzEPMA0GA1UEBwwGTW9zY293MQswCQYDVQQKDAJW -SzESMBAGA1UECwwJVGFyYW50b29sMRIwEAYDVQQDDAlUYXJhbnRvb2wxHTAbBgkq -hkiG9w0BCQEWDnRlc3RAdGVzdC50ZXN0MB4XDTIyMDQwNzE2MDU1NFoXDTIzMDQw -NzE2MDU1NFowgYMxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzANBgNV -BAcMBk1vc2NvdzELMAkGA1UECgwCVksxEjAQBgNVBAsMCVRhcmFudG9vbDESMBAG -A1UEAwwJVGFyYW50b29sMR0wGwYJKoZIhvcNAQkBFg50ZXN0QHRlc3QudGVzdDCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM/3KMHSybroxV5nR8tm19kg -uVlWoFzd7IXGcVbeVCdu30wBLeDQ2XvsnjYYMkHUDPWLkVosZO4de0D+vyS2CmgE -zeurAjCrUEs4Sc/Aa+CTSRuI17EkJjPpDQNSCmp3KJfPGGAypYNT7kH2Va+HvNBR -HHsSk3xuyXujX02DwsuUnf5XqYuuZ39S5jRZ3qvmQytmVXrOtSeNyhWz50XISTER -ErczPVfKOIFYEZWj+9cKaTZssYZp95MCbkagKh9ZQ6E/T3TGTMEHrqYuXQC4mHI8 -PEISqnY3Vo4lpe+SBWxpJBOK5YWSTUWdPygyt71xEPkyss+C87bMsdQaY8r4TrkC -AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAj2xf7QdcSbG0nF783TGnqFK7/pBrrdDb -zlT3NReHP70FjxPIK5alMkQBM+kn/+j1RDnjJhQQa5NKadhEHqpaRd7R2Iv9a2h8 -xQ78jB1GGygFnc5rGx3h5kOFSLjQlFcm9HYafTlasKYAjvhM4SiBQU/jgG2bHrIb -KrElFswBsfV2VvmvyYyhwDqrtZzKayS3BMD6fls95W+hUlMtcQXFZCVlIkJj6BVc -okM2tvkM/6ShokidAIkrq34dg4IJf3ZBXrXdiqtznMdaHAqb++Z4w3DY+hB+82qy -rUzOXligeS/xxzhiZRuIiGgMg4WbGAv7yexRgqv2wyJiGZfIfBrEdw== ------END CERTIFICATE----- diff --git a/src/test/resources/enterprise/ssl/gen.sh b/src/test/resources/enterprise/ssl/gen.sh deleted file mode 100644 index f767927..0000000 --- a/src/test/resources/enterprise/ssl/gen.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -HOST=tarantool.io -NEW_KEY_ARG=rsa:4096 -DAYS_ARG=36500 -CYPHER="PBE-SHA1-RC2-40" - -gen_ca() { - local ca="${1}" - openssl req \ - -new \ - -nodes \ - -newkey "${NEW_KEY_ARG}" \ - -keyout "${ca}.key" \ - -days "${DAYS_ARG}" \ - -x509 \ - -subj "/OU=Unknown/O=Unknown/L=Unknown/ST=unknown/C=AU" \ - -out "${ca}.crt" - -} - -gen_cert() { - local cert="${1}" - local ca="${2}" - - openssl req \ - -new \ - -nodes \ - -newkey "${NEW_KEY_ARG}" \ - -subj "/CN=${HOST}/OU=Unknown/O=Unknown/L=Unknown/ST=unknown/C=AU" \ - -keyout "${cert}.key" \ - -out "${cert}.csr" - - openssl x509 \ - -req \ - -days "${DAYS_ARG}" \ - -CAcreateserial \ - -CA "${ca}.crt" \ - -CAkey "${ca}.key" \ - -in "${cert}.csr" \ - -out "${cert}.crt" - - rm -f "${cert}.csr" - rm -f "${ca}.srl" -} - -secure_key() { - local file="${1}" - local pass="${2}" - openssl pkcs8 \ - -topk8 \ - -v1 ${CYPHER} \ - -in ${file}.key \ - -out ${file}.pkcs8.key \ - -passout "pass:${pass}" -} - -gen_ca ca -gen_cert server ca -gen_cert client ca -secure_key client 1q2w3e diff --git a/src/test/resources/enterprise/ssl/key.pem b/src/test/resources/enterprise/ssl/key.pem deleted file mode 100644 index 81493b0..0000000 --- a/src/test/resources/enterprise/ssl/key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDP9yjB0sm66MVe -Z0fLZtfZILlZVqBc3eyFxnFW3lQnbt9MAS3g0Nl77J42GDJB1Az1i5FaLGTuHXtA -/r8ktgpoBM3rqwIwq1BLOEnPwGvgk0kbiNexJCYz6Q0DUgpqdyiXzxhgMqWDU+5B -9lWvh7zQURx7EpN8bsl7o19Ng8LLlJ3+V6mLrmd/UuY0Wd6r5kMrZlV6zrUnjcoV -s+dFyEkxERK3Mz1XyjiBWBGVo/vXCmk2bLGGafeTAm5GoCofWUOhP090xkzBB66m -Ll0AuJhyPDxCEqp2N1aOJaXvkgVsaSQTiuWFkk1FnT8oMre9cRD5MrLPgvO2zLHU -GmPK+E65AgMBAAECggEAVpNrOT1aU+Bhggp2/ftjcnXIE6QXgHG27H4PYv2NhRkI -BqkbA1OOpqN7vcNW8MapWnNu4F5I6kQFsqoawtqx/Fm7rBd2AvLeq2HUgJN3lXdb -YQYX3RvSd5vWmgJGacoPcRt651lORBzlvDojs75LYWHS/H1gPtYUNM9vdmKa7orA -wWL1SITeR3gla0euaPItBUUNEyH4wepqG22ERqk/A7u54KRSvXp0mXRYcoDah6Y/ -nmuWwWfPbqCHgopiT3IBOsqklWIkCzLNx24OhOEXXAfgH5pw85NiPP/ZJN3moNYg -2Tj3VUt9Po3TnmKX+Az8gG4tNQ9R2F4YbnKm2wxFAQKBgQD1B2guaee/wUR16foX -pgOW+9TnDwTpBwHFaymzLHG2Gs3Zb0fR5HAGfV9Oxnde8Jw4bprRa5IZYzwgKgKY -jD9Qa8u+WsYKKOObmyBPTzpJevp0cQ9pxIgR/PSj98LL5Wvitcc82fGQAbA4KK02 -6VnaSfCrW2YDrl4Wk2NBFQACGQKBgQDZRuuD2Cn1dbCPuroQmYE4Pl++ke4mDl7F -xcOL7syu3uBbep/JwMB/ujruhtY9qBdKdLYjIO11xFtdQWhi7sMhhp3hlv8OGhR4 -b2Po3XnNZJ16/gSu4UqgSJ8ZQA8luNNMA0jUFW8Ki15O6vhvFDS/HIcLot+l3Lna -B71+l+CFoQKBgQCCtUDOAZCuqdprTDUtCFJB6HTaDRkBdctsFI5aFgtSqVnF86bM -QJ/B1n9Q9m4XJyMut1G/BTMad+VLAx3/YlEkBVzaXnHmWYmRKF9D72+YYxHXq7gd -I8myTs3x6ejv+6Jhfbaar2g8+amXS5ua/z//QhIwVsFElW97e4Qm45ztgQKBgEBB -JeL+qSHq5QUMTnwcOUedwojD9S6R71sDahnWy/cm+Ch1cg2jEAp103m4rGDddc3S -CA8JbM/3+qDwd+NSAqjGe6g8FD9iXQ1ku6Ig5SVljODTgCULgRs3fr1j4VbherMv -AXmewRDYOFKUUFXhHtwpnpJFX2hYhynAQjzOw1ohAoGBAIGypNhAgnhc2hyeqYC9 -Sg5JA06PFjuvrpymdcO3pfx9K7fHpU+wH17uYmzscMkFd5KrXVtqkziqMNV78hB4 -+x5qgabXlrZj4lVaTJLB5nPWt1VBZXcAwSDw5QAVhZtiXmsqKHgvVzR4hNnOWILq -1sQlocjdaPKH0EEbP84Ae2a7 ------END PRIVATE KEY----- diff --git a/src/test/resources/enterprise/ssl/mtls/ca.crt b/src/test/resources/enterprise/ssl/mtls/ca.crt deleted file mode 100644 index 7000d37..0000000 --- a/src/test/resources/enterprise/ssl/mtls/ca.crt +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIUD0mJoUjJsB4mrsSsBlAorJwmgcUwDQYJKoZIhvcNAQEL -BQAwVTEQMA4GA1UECwwHVW5rbm93bjEQMA4GA1UECgwHVW5rbm93bjEQMA4GA1UE -BwwHVW5rbm93bjEQMA4GA1UECAwHdW5rbm93bjELMAkGA1UEBhMCQVUwIBcNMjIw -NTMxMjEwNTA2WhgPMjEyMjA1MDcyMTA1MDZaMFUxEDAOBgNVBAsMB1Vua25vd24x -EDAOBgNVBAoMB1Vua25vd24xEDAOBgNVBAcMB1Vua25vd24xEDAOBgNVBAgMB3Vu -a25vd24xCzAJBgNVBAYTAkFVMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEAtpV9sxa6KPfTP4r5IJAHML0SlIUX9rSzEwKnbsMuyEKUwmcZVQ1aUWrmTQ0J -UGboOuVMBaNqmWaeqgJBTXns60/MrKSBQmOUwm1/FIBt6KQF2WZZUM13yq+UN5i/ -MHtAzHxSrecHNmzpvL9y48QJFs4ruoCzVsnLz9EmYChQCrFj1JsfLVvSpcDTFgdV -bTHJIBF9rHFKB92qMbhDJjrSmvPKNqyaLnWP0WttNIMtE5djrqwGbHolX5JrFIKr -9LDV2jJiMA7tFVl2cgg+uEcrxqOz421S9VYD0hl5hFF81rpdg/q7MEBHPYD2cCyl -92mxUYqz7r9OdK7KeMlLD/sjL34IXsT4TbcbMLYcfBdBmDRAbaAlON3spU9EPUxd -Yvhd3qKDlOP3oCXDE5MKQujz7gR3XQpX3Zdd5zxdcp/GiE9RivoKstm5/JznN+ns -BaBzw6d4gBTzIPMmiAmUTrnWD5UEhsG/kHzk+K2WXJS8/05CIZThLgILl/vfgrMX -3OBUsw1ePXj2Jmp1HLExtpX8U1NKA8UtU97QRX40eWvMuLGz7sKMS/VZiA9eNkMI -hQhkjMt0JPo9gfMggVMBOjQbLV4Ni4XZeMzurtGOmlD61s7GECySKHy5pYZtXisO -VpKABYTEyTIPPjuwN5W90h+/NI2h8xW2Z9xsE7K0flGtA1cCAwEAAaNTMFEwHQYD -VR0OBBYEFKA+WAfH0GT8G4aM4RTplY4ECcQDMB8GA1UdIwQYMBaAFKA+WAfH0GT8 -G4aM4RTplY4ECcQDMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIB -AG++VdNo894uxESkzjVEC6hSLdcER6EbQOM34H13MzseMIjlv/4ely/Vsh79QEXA -fnAadrdVk/0r3BpBaO/iOLdMquePLBi/IYxfLaY8z2nwaocbMKUVmVjFuOgm+oXq -atyc/yzVG5yyaxoC1jHIgjn81fesI0f17opqda13u+4hXTcdAbpOY7yZY8YmP2o+ -SCCfGco1BBSyKIteHLzQzpG8pZnKM0seAitZ9jD5CF9jw0tzJCWkDIhJ2dgjpigz -Go5WBxY3FMyKQPOIP5a+5AWRV+fVWENdZu9EwEWpLqc/GxQrvhbXhJ/L2ZiYRNd8 -SNTBL7H0Sw65jHRWWSfz7osVntL+LYRPh30sF9LYTpUnp3gr4VTXLo6jaxwhvsIy -CacNhLpgco0sM6RLcHaSxYMUtO3EttDbkcBmIyP1KHEq1mzcVcXSetS7g9efxToh -G7NH1zVP1a8qJF5qKjXgRBASIXke9AHeAOYDI7om7qQtGuqI7nI3eg5E0qUM1gqH -kTKXJcXn/pwCkJL8TvRZWlYNJMG2YEwdA4KFgywHGn3GaM2quNqbZosMF84vlvnp -lrzJbrg2nD/wwQWdljJPVp5WReoPI9t08UqopR2P+zFcDh75X+3SXL8mMRIXMvFU -eTU7QSXhc9Q6l+skY2cRgvYl++fIooebBXpCYY9uDht9 ------END CERTIFICATE----- diff --git a/src/test/resources/enterprise/ssl/mtls/ca.key b/src/test/resources/enterprise/ssl/mtls/ca.key deleted file mode 100644 index 48c1040..0000000 --- a/src/test/resources/enterprise/ssl/mtls/ca.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -YfB9GdaUnR0F648bsknruMJrFjfZFbo= ------END PRIVATE KEY----- diff --git a/src/test/resources/enterprise/ssl/mtls/mtls_server.lua b/src/test/resources/enterprise/ssl/mtls/mtls_server.lua deleted file mode 100644 index 9079bff..0000000 --- a/src/test/resources/enterprise/ssl/mtls/mtls_server.lua +++ /dev/null @@ -1,12 +0,0 @@ -box.cfg { listen = { - uri = 3301, - params = { - transport = 'ssl', - ssl_key_file = 'server.key', - ssl_cert_file = 'server.crt', - ssl_ca_file = 'ca.crt' - } -} } - -box.schema.user.create('api_user', { password = 'secret', if_not_exists = true }) -box.schema.user.grant('api_user', 'read, write, execute', 'universe', nil, { if_not_exists = true }) diff --git a/src/test/resources/enterprise/ssl/mtls/server.crt b/src/test/resources/enterprise/ssl/mtls/server.crt deleted file mode 100644 index fe661cc..0000000 --- a/src/test/resources/enterprise/ssl/mtls/server.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFSjCCAzICFAGDWf+4nbv3f7+QrRbP8Q3YhzOaMA0GCSqGSIb3DQEBCwUAMFUx -EDAOBgNVBAsMB1Vua25vd24xEDAOBgNVBAoMB1Vua25vd24xEDAOBgNVBAcMB1Vu -a25vd24xEDAOBgNVBAgMB3Vua25vd24xCzAJBgNVBAYTAkFVMCAXDTIyMDUzMTIx -MDUwOVoYDzIxMjIwNTA3MjEwNTA5WjBsMRUwEwYDVQQDDAx0YXJhbnRvb2wuaW8x -EDAOBgNVBAsMB1Vua25vd24xEDAOBgNVBAoMB1Vua25vd24xEDAOBgNVBAcMB1Vu -a25vd24xEDAOBgNVBAgMB3Vua25vd24xCzAJBgNVBAYTAkFVMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAy8ClyS3WZlJwycdRM1Nteke6adcgScUz0hVn -yhZJpZo4crReCTtCzOWNstlA5nnzlDT56YbnmzAwDNG6pPP00t2jVUU5wxMJSDGy -SkDk0nxq4Rd20EDV3+GIxJ+aEEPYwMcY4RcGErG+5yrSVbWniDLcvKeMjLjODzUr -vzSuBsRgtMt8Z6vQUaBxIdT3XupLFSZb4k883TkQE8wXjqbLmmOPoQAu1WZVAKEV -uvxXKonYlgC00Rl7HsaEMw8zUL7P1e+qtn6GaXkdI55Lk2y/yk0UKhBWR43mDoTx -VWyWrVnL7rFLt7Doz6F8Q5tiekjz3WpVhm2z7aGMZ/n3FE3etNVbnZg1/wqXjini -VXCgaUKryEYKR1kgPxUJB7EHjSLIGIn1Ix6toMK6ntr+WySMUfSt0A5jsQ3WM1TY -8YOdFuFbeiPpTD9Qq7hDPW1AyGOkh31eecqVwBJQlajRrkZBBZ8EacbR6aDgBfm4 -n3gtoUuZZYf1aW1HzlWjaVp6M5gJCbbvuGjcfpVAbq71PTM6PYHvfe2wlbfJR02V -H7kGUUbE3A1JIGSys44FLaitY3Gy+X/Tj+bEH1uid/Q6ykcCcU/ICDoaXBQ9jbSv -56CfIjoSUY2JXpDG/Ahli/b6pwvP9CkLGTDc0VWpuG4sB3sbzjhYyijDac48/JuJ -HVk1mMcCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEARGdetChBKbDNaxGA+NHAtDGe -2lVISV21j5L1EkWQhrp39bx1YsFmvV+wibYuTDTlk/XSh+MpuRvTmc8xWXIIe30Y -PQXQPCrRd8vNjHt6i0MpW4kCe0QU/PTGOOBpD1VnJuAuebqmLuvdwCHb5uCacbVJ -Gt9voyM3yQQNZ0A3jYcm7Y6PAEL/gxq0+F30+LwvZqaAGO6hqC7WJuiyoE9No9ri -+0vZG0F0l1ZiVWaIi5m38KfYGuhd8tAEKkTUZ2cL0Td/KOavCgJ1D8s4co3wyDZG -qrIVKHYvl8G2YivQdXpMuh32QAog/34zI909pM0E2IzxRl6YBjP9UaAUW6LWWuWZ -1pso3pL/+WynAUC9gsWFcnsv3Ji4ZH24nA7BemBwo5JT/5WTtMTAA4phQDH340x4 -VnHPigcvyu3eh/PDS7ZdiUSGuNcibSTrhn4bluCv5vzzmw+Atp9eccF81LxfERJY -4H94Kw70/8LBLR/7McL/aobJ5mSpAK1nnsRdr1xE46uGpkmK4pgHfD5xkcn9AFxE -vsCnwynYp4RNPfiLUHNzez0T4JWnJqPtSNtR2jTO3iVz04SUbUj/cltXOLzyPfyM -VouEL2VnAmC1WCN5KC6NnzyKVLbQ7EAi4x+61lJWWkRugxrXeaVdNbgQlA1yvAlF -cA8F69eVyPJnFsdWSq0= ------END CERTIFICATE----- diff --git a/src/test/resources/enterprise/ssl/mtls/server.key b/src/test/resources/enterprise/ssl/mtls/server.key deleted file mode 100644 index f6f5117..0000000 --- a/src/test/resources/enterprise/ssl/mtls/server.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -jE5s8iIxjb4IkPziVOzgev4epyIs ------END PRIVATE KEY----- diff --git a/src/test/resources/enterprise/ssl/mtls/trustStoreFile b/src/test/resources/enterprise/ssl/mtls/trustStoreFile deleted file mode 100644 index af02d8b..0000000 Binary files a/src/test/resources/enterprise/ssl/mtls/trustStoreFile and /dev/null differ diff --git a/src/test/resources/enterprise/ssl/ssl_server.lua b/src/test/resources/enterprise/ssl/ssl_server.lua deleted file mode 100644 index 72ca5bf..0000000 --- a/src/test/resources/enterprise/ssl/ssl_server.lua +++ /dev/null @@ -1,11 +0,0 @@ -box.cfg { listen = { - uri = 3301, - params = { - transport = 'ssl', - ssl_key_file = 'key.pem', - ssl_cert_file = 'certificate.crt' - } -} } - -box.schema.user.create('api_user', { password = 'secret', if_not_exists = true }) -box.schema.user.grant('api_user', 'read, write, execute', 'universe', nil, { if_not_exists = true })