This is an automated email from the ASF dual-hosted git repository.
xiazcy pushed a commit to branch 3.5-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/3.5-dev by this push:
new 33b60d9e34 Dev Environments: Dockerize Testing for JavaScript and .NET
& Updates for Go (#1788)
33b60d9e34 is described below
commit 33b60d9e34493bc04b7df45d0bd2c35080146238
Author: Yang Xia <[email protected]>
AuthorDate: Mon Sep 12 15:29:48 2022 -0700
Dev Environments: Dockerize Testing for JavaScript and .NET & Updates for
Go (#1788)
Dockerize test environment for js and .net drivers. Docker compose is now
used to set up server and running all tests for js, .net and go.
Co-authored-by: Simon Zhao <[email protected]>
Co-authored-by: Simon Zhao <[email protected]>
Co-authored-by: Valentyn Kahamlyk <[email protected]>
---
.github/workflows/build-test.yml | 98 ++++-
docker/gremlin-server/docker-entrypoint.sh | 9 +-
.../gremlin-server-integration-secure.yaml | 7 +
.../gremlin-server/gremlin-server-integration.yaml | 14 +-
.../gremlin-test-server}/Dockerfile | 15 +-
.../gremlin-test-server}/wait-for-server.sh | 0
{gremlin-go => gremlin-dotnet}/docker-compose.yml | 47 ++-
.../Gremlin.Net.IntegrationTest/ConfigProvider.cs | 11 +-
.../Gremlin.Net.IntegrationTest/appsettings.json | 3 +-
.../Gremlin.Net.Template.IntegrationTest.csproj | 9 +-
.../ServiceTests.cs | 6 +-
.../appsettings.json | 3 +-
gremlin-dotnet/test/pom.xml | 315 ++++----------
gremlin-go/docker-compose.yml | 31 +-
gremlin-go/docker/docker-entrypoint.sh | 43 --
gremlin-go/docker/generate-all.groovy | 79 ----
.../docker/gremlin-server-integration-secure.yaml | 76 ----
gremlin-go/docker/gremlin-server-integration.yaml | 68 ----
gremlin-go/pom.xml | 24 +-
gremlin-go/run.sh | 8 +-
gremlin-javascript/pom.xml | 451 +++++----------------
.../gremlin-javascript}/docker-compose.yml | 50 +--
.../javascript/gremlin-javascript/package.json | 3 +
.../javascript/gremlin-javascript/test/helper.js | 11 +-
.../test/integration/sasl-authentication-tests.js | 7 +-
gremlin-server/conf/tinkergraph-service.properties | 20 +
gremlin-server/pom.xml | 18 +
.../src/test/scripts/generate-all.groovy | 5 +
28 files changed, 489 insertions(+), 942 deletions(-)
diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index a7df2c999e..c05d9e9eab 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -78,6 +78,39 @@ jobs:
run: |
mvn clean install -pl
-:gremlin-javascript,-:gremlin-python,-gremlin-dotnet,-:gremlin-dotnet-source,-:gremlin-dotnet-tests,-:gremlint
-q -DskipTests -Dci
mvn verify -pl :gremlin-server -DskipTests
-DskipIntegrationTests=false -DincludeNeo4j -DtestUnified=true
+ cache-gremlin-server-docker-image:
+ name: cache gremlin-server docker image
+ timeout-minutes: 10
+ needs: smoke
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 11
+ uses: actions/setup-java@v3
+ with:
+ java-version: '11'
+ distribution: 'temurin'
+ - name: Generate Gremlin Server Base
+ working-directory: .
+ run: |
+ mvn clean install -pl gremlin-server -DskipTests
-DskipIntegrationTests=true -Dci -am
+ - name: Save Docker image
+ working-directory: ./gremlin-server
+ run: docker save --output gremlin-server.tar tinkerpop/gremlin-server
+ - uses: actions/cache@v3
+ id: gremlin-server-test-docker-image
+ with:
+ path: |
+ ./gremlin-server/*
+ ~/.m2/repository/org/apache/tinkerpop/*
+ key: ${{ github.sha }}
+ # Disabled until Linux containers are supported on Windows runners:
https://github.com/actions/virtual-environments/issues/252
+# - name: Upload Docker image for Windows
+# uses: actions/upload-artifact@v3
+# with:
+# name: ${{ github.sha }}
+# path: ./gremlin-server/gremlin-server.tar
+# retention-days: 1
spark-core:
name: spark core
timeout-minutes: 45
@@ -145,11 +178,13 @@ jobs:
javascript:
name: javascript
timeout-minutes: 15
- needs: smoke
+ needs: cache-gremlin-server-docker-image
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest]
+ # Windows Disabled until Linux containers are supported on Windows
runners: https://github.com/actions/virtual-environments/issues/252
+ # os: [ubuntu-latest, windows-latest]
+ os: [ubuntu-latest]
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
@@ -157,10 +192,29 @@ jobs:
with:
java-version: '11'
distribution: 'temurin'
+ - name: Get Cached Server Base Image
+ if: matrix.os == 'ubuntu-latest'
+ uses: actions/cache@v3
+ id: gremlin-server-test-docker-image
+ with:
+ path: |
+ ./gremlin-server/*
+ ~/.m2/repository/org/apache/tinkerpop/*
+ key: ${{ github.sha }}
+# - name: Download Server Base Image
+# if: matrix.os == 'windows-latest'
+# uses: actions/download-artifact@v3
+# with:
+# name: ${{ github.sha }}
+# path: ./gremlin-server
+ - name: Load Docker Image
+ working-directory: ./gremlin-server
+ run: docker load --input gremlin-server.tar
- name: Build with Maven
run: |
+ touch gremlin-javascript/.glv
mvn clean install -pl
-:gremlin-python,-gremlin-dotnet,-:gremlin-dotnet-source,-:gremlin-dotnet-tests
-q -DskipTests -Dci
- mvn verify -pl :gremlin-javascript,:gremlint -DincludeNeo4j
+ mvn verify -pl :gremlin-javascript,:gremlint
python:
name: python
timeout-minutes: 20
@@ -190,11 +244,8 @@ jobs:
dotnet:
name: .NET
timeout-minutes: 20
- needs: smoke
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- os: [ubuntu-latest, windows-latest]
+ needs: cache-gremlin-server-docker-image
+ runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK11
@@ -206,12 +257,23 @@ jobs:
uses: actions/setup-dotnet@v2
with:
dotnet-version: '6.0.x'
+ - name: Get Cached Server Base Image
+ uses: actions/cache@v3
+ id: gremlin-server-test-docker-image
+ with:
+ path: |
+ ./gremlin-server/*
+ ~/.m2/repository/org/apache/tinkerpop/*
+ key: ${{ github.sha }}
+ - name: Load Docker Image
+ working-directory: ./gremlin-server
+ run: docker load --input gremlin-server.tar
- name: Build with Maven
run: |
touch gremlin-dotnet/src/.glv
touch gremlin-dotnet/test/.glv
mvn clean install -pl
-:gremlin-javascript,-:gremlin-python,-:gremlint -q -DskipTests -Dci
- mvn verify -pl :gremlin-dotnet,:gremlin-dotnet-tests -P
gremlin-dotnet -DincludeNeo4j
+ mvn verify -pl :gremlin-dotnet,:gremlin-dotnet-tests -P
gremlin-dotnet
neo4j-gremlin:
name: neo4j-gremlin
timeout-minutes: 20
@@ -231,7 +293,7 @@ jobs:
go:
name: go
timeout-minutes: 20
- needs: smoke
+ needs: cache-gremlin-server-docker-image
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -240,14 +302,22 @@ jobs:
uses: actions/setup-go@v3
with:
go-version: '1.17'
- - name: Generate Gremlin Server Base Image
- working-directory: .
- run: |
- mvn clean install -pl gremlin-server -DskipTests
-DskipIntegrationTests=true -Dci -am
+ - name: Get Cached Server Base Image
+ uses: actions/cache@v3
+ id: gremlin-server-test-docker-image
+ with:
+ path: |
+ ./gremlin-server/*
+ ~/.m2/repository/org/apache/tinkerpop/*
+ key: ${{ github.sha }}
+ - name: Load Docker Image
+ working-directory: ./gremlin-server
+ run: docker load --input gremlin-server.tar
- name: Build with Maven
working-directory: .
run: |
touch gremlin-go/.glv
+ mvn clean install -pl
-:gremlin-python,-:gremlin-javascript,-:gremlin-dotnet,-:gremlin-dotnet-source,-:gremlin-dotnet-tests
-q -DskipTests -Dci
mvn verify -pl :gremlin-go
- name: Upload to Codecov
uses: codecov/codecov-action@v3
diff --git a/docker/gremlin-server/docker-entrypoint.sh
b/docker/gremlin-server/docker-entrypoint.sh
index 775daa5c17..51290265ca 100644
--- a/docker/gremlin-server/docker-entrypoint.sh
+++ b/docker/gremlin-server/docker-entrypoint.sh
@@ -62,6 +62,9 @@ cp *.yaml ${TINKERPOP_HOME}/conf/
java -version
+dos2unix /opt/gremlin-server/bin/gremlin-server.sh
+dos2unix /opt/gremlin-server/bin/gremlin-server.conf
+
# dynamically installs Neo4j libraries so that we can test variants with
transactions,
# but only only port 45940 is configured with the neo4j graph as the
neo4j-empty.properties
# is statically pointing at a temp directory and that space can only be
accessed by one
@@ -71,16 +74,16 @@ if [ ! -z "${INCLUDE_NEO4J}" ]; then
/opt/gremlin-server/bin/gremlin-server.sh install org.apache.tinkerpop
neo4j-gremlin ${GREMLIN_SERVER_VERSION}
fi
-/opt/gremlin-server/bin/gremlin-server.sh conf/gremlin-server-integration.yaml
&
+/opt/gremlin-server/bin/gremlin-server.sh
${TINKERPOP_HOME}/conf/gremlin-server-integration.yaml &
-/opt/gremlin-server/bin/gremlin-server.sh
conf/gremlin-server-integration-secure.yaml &
+/opt/gremlin-server/bin/gremlin-server.sh
${TINKERPOP_HOME}/conf/gremlin-server-integration-secure.yaml &
java -cp
/opt/gremlin-test/gremlin-test-${GREMLIN_SERVER_VERSION}-jar-with-dependencies.jar
\
-Dlog4j.configuration="file:/opt/gremlin-server/conf/log4j-server.properties" \
org.apache.tinkerpop.gremlin.server.KdcFixture /opt/gremlin-server &
export JAVA_OPTIONS="-Xms512m -Xmx4096m
-Djava.security.krb5.conf=/opt/gremlin-server/target/kdc/krb5.conf"
-exec /opt/gremlin-server/bin/gremlin-server.sh
conf/gremlin-server-integration-krb5.yaml
+/opt/gremlin-server/bin/gremlin-server.sh
${TINKERPOP_HOME}/conf/gremlin-server-integration-krb5.yaml
#######################################################################
diff --git a/docker/gremlin-server/gremlin-server-integration-secure.yaml
b/docker/gremlin-server/gremlin-server-integration-secure.yaml
index 4d808411f5..15b1b3e647 100644
--- a/docker/gremlin-server/gremlin-server-integration-secure.yaml
+++ b/docker/gremlin-server/gremlin-server-integration-secure.yaml
@@ -65,3 +65,10 @@ authentication: {
authenticator: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
config: {
credentialsDb: conf/tinkergraph-credentials.properties}}
+ssl: {
+ enabled: true,
+ sslEnabledProtocols: [TLSv1.2],
+ # You must configure a keyStore!
+ keyStore: /opt/test/resources/server-key.jks,
+ keyStorePassword: changeit
+}
diff --git a/docker/gremlin-server/gremlin-server-integration.yaml
b/docker/gremlin-server/gremlin-server-integration.yaml
index 35c515969f..be33ee90d3 100644
--- a/docker/gremlin-server/gremlin-server-integration.yaml
+++ b/docker/gremlin-server/gremlin-server-integration.yaml
@@ -18,13 +18,15 @@
host: 0.0.0.0
port: 45940
evaluationTimeout: 30000
+channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
graphs: {
- graph: conf/tinkergraph-empty.properties,
- classic: conf/tinkergraph-empty.properties,
- modern: conf/tinkergraph-empty.properties,
- crew: conf/tinkergraph-empty.properties,
- grateful: conf/tinkergraph-empty.properties,
- sink: conf/tinkergraph-empty.properties
+ graph: conf/tinkergraph-service.properties,
+ immutable: conf/tinkergraph-service.properties,
+ classic: conf/tinkergraph-service.properties,
+ modern: conf/tinkergraph-service.properties,
+ crew: conf/tinkergraph-service.properties,
+ grateful: conf/tinkergraph-service.properties,
+ sink: conf/tinkergraph-service.properties
}
scriptEngines: {
gremlin-lang : {},
diff --git a/gremlin-go/Dockerfile b/docker/gremlin-test-server/Dockerfile
similarity index 74%
rename from gremlin-go/Dockerfile
rename to docker/gremlin-test-server/Dockerfile
index 17911a5b2d..85956cbead 100644
--- a/gremlin-go/Dockerfile
+++ b/docker/gremlin-test-server/Dockerfile
@@ -18,25 +18,24 @@
ARG GREMLIN_SERVER
FROM tinkerpop/gremlin-server:$GREMLIN_SERVER
+LABEL maintainer="[email protected]"
+
USER root
RUN mkdir -p /opt
WORKDIR /opt
COPY gremlin-server/src/test /opt/test/
-COPY gremlin-go/docker/generate-all.groovy /opt/test/scripts/
-COPY gremlin-go/docker/docker-entrypoint.sh gremlin-go/docker/*.yaml /opt/
+COPY docker/gremlin-server/docker-entrypoint.sh docker/gremlin-server/*.yaml
/opt/
RUN chmod 755 /opt/docker-entrypoint.sh
# Installing dos2unix to avoid errors in running the entrypoint script on
Windows machines where their
# carriage return is \r\n instead of the \n needed for linux/unix containers
RUN apk update && apk add dos2unix
-RUN dos2unix /opt/docker-entrypoint.sh
-RUN dos2unix /opt/gremlin-server/bin/gremlin-server.conf
-RUN dos2unix /opt/gremlin-server/bin/gremlin-server.sh && apk del dos2unix
+RUN dos2unix /opt/docker-entrypoint.sh
/opt/gremlin-server/bin/gremlin-server.sh && apk del dos2unix
ARG GREMLIN_SERVER
-ENV GREMLIN_SERVER_VER=$GREMLIN_SERVER
+ENV GREMLIN_SERVER_VERSION=$GREMLIN_SERVER
-EXPOSE 45940 45941
+EXPOSE 45940-45942 4588
-ENTRYPOINT ["bash", "/opt/docker-entrypoint.sh"]
+ENTRYPOINT ["/opt/docker-entrypoint.sh", "-n"]
CMD []
diff --git a/gremlin-go/wait-for-server.sh
b/docker/gremlin-test-server/wait-for-server.sh
similarity index 100%
rename from gremlin-go/wait-for-server.sh
rename to docker/gremlin-test-server/wait-for-server.sh
diff --git a/gremlin-go/docker-compose.yml b/gremlin-dotnet/docker-compose.yml
similarity index 51%
copy from gremlin-go/docker-compose.yml
copy to gremlin-dotnet/docker-compose.yml
index a02236950f..9da192dad5 100644
--- a/gremlin-go/docker-compose.yml
+++ b/gremlin-dotnet/docker-compose.yml
@@ -15,44 +15,47 @@
# specific language governing permissions and limitations
# under the License.
-version: "3.7"
+version: "3.8"
services:
- gremlin-test-server:
- container_name: gremlin-test-server
- image: tinkerpop:gremlin-test-server-${GREMLIN_SERVER}
+ gremlin-server-test-dotnet:
+ container_name: gremlin-server-test-dotnet
+ image: tinkerpop/gremlin-server-test:${GREMLIN_SERVER}
build:
context: ../
- dockerfile: gremlin-go/Dockerfile
+ dockerfile: docker/gremlin-test-server/Dockerfile
args:
- GREMLIN_SERVER=${GREMLIN_SERVER}
ports:
- "45940:45940"
- "45941:45941"
+ - "45942:45942"
+ - "4588:4588"
volumes:
- ${HOME}/.groovy:/root/.groovy
- ${HOME}/.m2:/root/.m2
+ - ${ABS_PROJECT_HOME}/gremlin-test/target:/opt/gremlin-test
+ healthcheck:
+ test: [ "CMD-SHELL", "apk add curl && curl -f
http://localhost:45940?gremlin=100-1" ]
+ interval: 30s
+ timeout: 10s
+ retries: 30
+ start_period: 30s
- gremlin-go-integration-tests:
- container_name: gremlin-go-integration-tests
- image: golang:1.17
+ gremlin-dotnet-integration-tests:
+ container_name: gremlin-dotnet-integration-tests
+ image: mcr.microsoft.com/dotnet/sdk:6.0
volumes:
- - .:/go_app
- - ../gremlin-test/features:/gremlin-test
+ - .:/gremlin-dotnet
+ - ../gremlin-test/features:/gremlin-test/features
+ - ../docker/gremlin-test-server:/gremlin-dotnet/gremlin-test-server
environment:
- - CUCUMBER_FEATURE_FOLDER=/gremlin-test
- - GREMLIN_SERVER_URL=ws://gremlin-test-server:45940/gremlin
- - GREMLIN_SERVER_BASIC_AUTH_URL=wss://gremlin-test-server:45941/gremlin
- - RUN_INTEGRATION_TESTS=true
- - RUN_INTEGRATION_WITH_ALIAS_TESTS=true
- - RUN_BASIC_AUTH_INTEGRATION_TESTS=true
+ - DOCKER_ENVIRONMENT=true
- TEST_TRANSACTIONS=true
- working_dir: /go_app
+ working_dir: /gremlin-dotnet
command: >
- bash -c "apt-get update && apt-get install dos2unix && dos2unix
./wait-for-server.sh
- && ./wait-for-server.sh gremlin-test-server 45940 300
- && go install
github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
- && go test -v -json ./... -race -covermode=atomic
-coverprofile=\"coverage.out\" -coverpkg=./... | gotestfmt"
+ bash -c "dotnet test ./Gremlin.Net.sln -c Release"
depends_on:
- - gremlin-test-server
+ gremlin-server-test-dotnet:
+ condition: service_healthy
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/ConfigProvider.cs
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/ConfigProvider.cs
index b7afe74e93..6b84584f12 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/ConfigProvider.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/ConfigProvider.cs
@@ -21,6 +21,7 @@
#endregion
+using System;
using System.IO;
using Microsoft.Extensions.Configuration;
@@ -41,7 +42,13 @@ namespace Gremlin.Net.IntegrationTest
var builder = new ConfigurationBuilder()
.AddJsonFile(configFile, false, false);
- return builder.Build();
+ IConfiguration config = builder.Build();
+ if
(Convert.ToBoolean(Environment.GetEnvironmentVariable("DOCKER_ENVIRONMENT")))
+ {
+ config["TestServerIpAddress"] =
config["TestServerIpAddressDocker"];
+ }
+
+ return config;
}
}
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
index 1adda9ac9b..5d095ff188 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
@@ -1,5 +1,6 @@
{
"TestServerIpAddress": "localhost",
+ "TestServerIpAddressDocker": "gremlin-server-test-dotnet",
"TestServerPort": 45940,
"TestSecureServerPort": 45941
-}
\ No newline at end of file
+}
diff --git
a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
index c3552d732b..81e4e02204 100644
---
a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
+++
b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/Gremlin.Net.Template.IntegrationTest.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
@@ -12,6 +12,13 @@
<ItemGroup>
<ProjectReference
Include="..\..\src\Gremlin.Net.Template\Gremlin.Net.Template.csproj" />
+ <ProjectReference
Include="..\Gremlin.Net.IntegrationTest\Gremlin.Net.IntegrationTest.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Update="appsettings.json">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
</ItemGroup>
</Project>
diff --git
a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
index 696b51d4c5..1faa0b8cc7 100644
--- a/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/ServiceTests.cs
@@ -21,9 +21,11 @@
#endregion
+using System;
using System.Collections.Generic;
using Gremlin.Net.Driver;
using Gremlin.Net.Driver.Remote;
+using Gremlin.Net.IntegrationTest;
using Xunit;
using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
@@ -32,8 +34,8 @@ namespace Gremlin.Net.Template.IntegrationTest
{
public class ServiceTests
{
- private const string TestHost = "localhost";
- private const int TestPort = 45940;
+ private static readonly string TestHost =
ConfigProvider.Configuration["TestServerIpAddress"];
+ private static readonly int TestPort =
Convert.ToInt32(ConfigProvider.Configuration["TestServerPort"]);
private const string TestTraversalSource = "gmodern";
[Fact]
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/appsettings.json
similarity index 61%
copy from gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
copy to
gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/appsettings.json
index 1adda9ac9b..5d095ff188 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
+++ b/gremlin-dotnet/test/Gremlin.Net.Template.IntegrationTest/appsettings.json
@@ -1,5 +1,6 @@
{
"TestServerIpAddress": "localhost",
+ "TestServerIpAddressDocker": "gremlin-server-test-dotnet",
"TestServerPort": 45940,
"TestSecureServerPort": 45941
-}
\ No newline at end of file
+}
diff --git a/gremlin-dotnet/test/pom.xml b/gremlin-dotnet/test/pom.xml
index da60446e46..9009d9784c 100644
--- a/gremlin-dotnet/test/pom.xml
+++ b/gremlin-dotnet/test/pom.xml
@@ -25,28 +25,37 @@ limitations under the License.
</parent>
<artifactId>gremlin-dotnet-tests</artifactId>
<name>Apache TinkerPop :: Gremlin.Net - Tests</name>
- <packaging>${packaging.type}</packaging>
<properties>
<!-- provides a way to convert maven.test.skip value to skipTests for
use in skipping dotnet tests -->
<maven.test.skip>false</maven.test.skip>
<skipTests>${maven.test.skip}</skipTests>
- <!-- this path only works when maven is started from the direct parent
directory, this should be fixed -->
-
<gremlin.server.dir>${project.parent.parent.basedir}/gremlin-server</gremlin.server.dir>
-
<tinkerpop.root.dir>${project.parent.parent.basedir}</tinkerpop.root.dir>
</properties>
<build>
<plugins>
- <!-- Override the execution from gremlin-dotnet to disable code
generation from happening a second time -->
+ <!--
+ there is no point to building/deploying the jvm stuff - there is
no java source really - just poms
+ -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <configuration>
+ <skipSource>true</skipSource>
+ </configuration>
+ </plugin>
<plugin>
- <groupId>org.codehaus.gmavenplus</groupId>
- <artifactId>gmavenplus-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-dsl</id>
- <phase/>
- </execution>
- </executions>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
</plugin>
<!--
there is no point to building/deploying the jvm stuff - there is
no java source really - just poms
@@ -62,16 +71,7 @@ limitations under the License.
</build>
<profiles>
- <profile>
- <id>gremlin-dotnet-standard</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <packaging.type>pom</packaging.type>
- </properties>
- </profile>
- <!-- activates the building of .NET components and requires that the
.NET SDK be installed on the system -->
+ <!-- Test gremlin-dotnet in Docker -->
<profile>
<id>gremlin-dotnet</id>
<activation>
@@ -80,34 +80,71 @@ limitations under the License.
<exists>.glv</exists>
</file>
</activation>
- <properties>
- <packaging.type>dotnet-integration-test</packaging.type>
- </properties>
<build>
- <directory>${basedir}/target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.eobjects.build</groupId>
- <artifactId>dotnet-maven-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <skip>${skipTests}</skip>
- <!--
- transaction testing is disabled unless the
-DincludeNeo4j flag enables the include-neo4j
- maven profile which is a standard profile we use
to add neo4j to testing explicitly - for
- dotnet we set this TEST_TRANSACTIONS environment
variable that can be accessed in tests to
- determine if we skip transaction oriented tests or
not. without neo4j we can't test Tx()
- so this is disabled by default and enabled in the
include-neo4j profile below
- -->
- <environment>
- <TEST_TRANSACTIONS>false</TEST_TRANSACTIONS>
- </environment>
- </configuration>
+ <artifactId>exec-maven-plugin</artifactId>
+ <groupId>org.codehaus.mojo</groupId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <id>run-tests</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <environmentVariables>
+
<GREMLIN_SERVER>${project.version}</GREMLIN_SERVER>
+
<ABS_PROJECT_HOME>${project.basedir}/../</ABS_PROJECT_HOME>
+ <!-- setting this env variable is
needed to be cross-platform compatible -->
+ <HOME>${user.home}</HOME>
+ </environmentVariables>
+ <executable>docker-compose</executable>
+ <arguments>
+ <argument>up</argument>
+ <argument>--build</argument>
+ <argument>--exit-code-from</argument>
+
<argument>gremlin-dotnet-integration-tests</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>shutdown-container</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <!-- don't need to set env variables for
container tear down -->
+ <executable>docker-compose</executable>
+ <arguments>
+ <argument>down</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>remove-dangling-images</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <executable>docker</executable>
+ <arguments>
+ <argument>image</argument>
+ <argument>prune</argument>
+ <argument>--filter</argument>
+
<argument>[email protected]</argument>
+ <argument>-f</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
@@ -161,192 +198,10 @@ limitations under the License.
</scripts>
</configuration>
</execution>
- <execution>
- <id>gremlin-server-start</id>
- <phase>pre-integration-test</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <properties>
- <property>
- <name>skipTests</name>
- <value>${skipTests}</value>
- </property>
- <property>
- <name>gremlinServerDir</name>
-
<value>${gremlin.server.dir}</value>
- </property>
- <property>
- <name>settingsFile</name>
-
<value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
- </property>
- <property>
- <name>executionName</name>
- <value>${project.name}</value>
- </property>
- <property>
- <name>projectBaseDir</name>
- <value>${project.basedir}</value>
- </property>
- <property>
- <name>tinkerpopRootDir</name>
-
<value>${tinkerpop.root.dir}</value>
- </property>
- </properties>
- <scripts>
-
<script>${gremlin.server.dir}/src/test/scripts/test-server-start.groovy</script>
- </scripts>
- </configuration>
- </execution>
- <execution>
- <id>gremlin-server-stop</id>
- <phase>post-integration-test</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <properties>
- <property>
- <name>skipTests</name>
- <value>${skipTests}</value>
- </property>
- <property>
- <name>executionName</name>
- <value>${project.name}</value>
- </property>
- </properties>
- <scripts>
-
<script>${gremlin.server.dir}/src/test/scripts/test-server-stop.groovy</script>
- </scripts>
- </configuration>
- </execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
- <!--
- This profile will include neo4j for purposes of transactional
testing within Gremlin Server.
- Tests that require neo4j specifically will be "ignored" if this
profile is not turned on.
- -->
- <profile>
- <id>include-neo4j</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- <property>
- <name>includeNeo4j</name>
- </property>
- </activation>
- <properties>
- <packaging.type>dotnet-integration-test</packaging.type>
- </properties>
- <build>
- <plugins>
- <!-- with neo4j present we can enable transaction testing
-->
- <plugin>
- <groupId>org.eobjects.build</groupId>
- <artifactId>dotnet-maven-plugin</artifactId>
- <configuration>
- <environment>
- <TEST_TRANSACTIONS>true</TEST_TRANSACTIONS>
- </environment>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.gmavenplus</groupId>
- <artifactId>gmavenplus-plugin</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.neo4j</groupId>
-
<artifactId>neo4j-tinkerpop-api-impl</artifactId>
- <version>0.9-3.4.0</version>
- <exclusions>
- <exclusion>
- <groupId>org.neo4j</groupId>
- <artifactId>neo4j-kernel</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-text</artifactId>
- </exclusion>
- <exclusion>
-
<groupId>com.github.ben-manes.caffeine</groupId>
- <artifactId>caffeine</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-nop</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- </exclusion>
- <exclusion>
-
<groupId>io.dropwizard.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.ow2.asm</groupId>
- <artifactId>asm</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <version>2.11.8</version>
- </dependency>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- <version>2.11.8</version>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- <version>5.5.0</version>
- </dependency>
- <dependency>
- <groupId>io.dropwizard.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- <version>4.2.11</version>
- </dependency>
- <dependency>
- <groupId>org.neo4j</groupId>
- <artifactId>neo4j-kernel</artifactId>
- <version>3.4.11</version>
- <exclusions>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
- </profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
diff --git a/gremlin-go/docker-compose.yml b/gremlin-go/docker-compose.yml
index a02236950f..83048a9904 100644
--- a/gremlin-go/docker-compose.yml
+++ b/gremlin-go/docker-compose.yml
@@ -15,24 +15,33 @@
# specific language governing permissions and limitations
# under the License.
-version: "3.7"
+version: "3.8"
services:
- gremlin-test-server:
- container_name: gremlin-test-server
- image: tinkerpop:gremlin-test-server-${GREMLIN_SERVER}
+ gremlin-server-test:
+ container_name: gremlin-server-test
+ image: tinkerpop/gremlin-server-test:${GREMLIN_SERVER}
build:
context: ../
- dockerfile: gremlin-go/Dockerfile
+ dockerfile: docker/gremlin-test-server/Dockerfile
args:
- GREMLIN_SERVER=${GREMLIN_SERVER}
ports:
- "45940:45940"
- "45941:45941"
+ - "45942:45942"
+ - "4588:4588"
volumes:
- ${HOME}/.groovy:/root/.groovy
- ${HOME}/.m2:/root/.m2
+ - ${ABS_PROJECT_HOME}/gremlin-test/target:/opt/gremlin-test
+ healthcheck:
+ test: [ "CMD-SHELL", "apk add curl && curl -f
http://localhost:45940?gremlin=100-1" ]
+ interval: 30s
+ timeout: 10s
+ retries: 30
+ start_period: 30s
gremlin-go-integration-tests:
container_name: gremlin-go-integration-tests
@@ -40,19 +49,19 @@ services:
volumes:
- .:/go_app
- ../gremlin-test/features:/gremlin-test
+ - ../docker/gremlin-test-server:/go_app/gremlin-test-server
environment:
- CUCUMBER_FEATURE_FOLDER=/gremlin-test
- - GREMLIN_SERVER_URL=ws://gremlin-test-server:45940/gremlin
- - GREMLIN_SERVER_BASIC_AUTH_URL=wss://gremlin-test-server:45941/gremlin
+ - GREMLIN_SERVER_URL=ws://gremlin-server-test:45940/gremlin
+ - GREMLIN_SERVER_BASIC_AUTH_URL=wss://gremlin-server-test:45941/gremlin
- RUN_INTEGRATION_TESTS=true
- RUN_INTEGRATION_WITH_ALIAS_TESTS=true
- RUN_BASIC_AUTH_INTEGRATION_TESTS=true
- TEST_TRANSACTIONS=true
working_dir: /go_app
command: >
- bash -c "apt-get update && apt-get install dos2unix && dos2unix
./wait-for-server.sh
- && ./wait-for-server.sh gremlin-test-server 45940 300
- && go install
github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
+ bash -c "go install
github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
&& go test -v -json ./... -race -covermode=atomic
-coverprofile=\"coverage.out\" -coverpkg=./... | gotestfmt"
depends_on:
- - gremlin-test-server
+ gremlin-server-test:
+ condition: service_healthy
diff --git a/gremlin-go/docker/docker-entrypoint.sh
b/gremlin-go/docker/docker-entrypoint.sh
deleted file mode 100644
index 87b3d16d62..0000000000
--- a/gremlin-go/docker/docker-entrypoint.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-#
-# 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
-#
-# 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.
-#
-
-TINKERPOP_HOME=/opt/gremlin-server
-cp /opt/test/scripts/* ${TINKERPOP_HOME}/scripts
-
-IP=$(hostname -i)
-
-echo
"#############################################################################"
-echo IP is $IP
-echo
-echo Available Gremlin Server instances:
-echo "ws://${IP}:45940/gremlin with anonymous access"
-echo "wss://${IP}:45941/gremlin with basic authentication (stephen/password)"
-echo Installing Neo4j to the environment: transactions are testable on port
45940
-echo
"#############################################################################"
-
-cp *.yaml ${TINKERPOP_HOME}/conf/
-
-java -version
-
-/opt/gremlin-server/bin/gremlin-server.sh install org.apache.tinkerpop
neo4j-gremlin "$GREMLIN_SERVER_VER"
-
-/opt/gremlin-server/bin/gremlin-server.sh conf/gremlin-server-integration.yaml
&
-
-/opt/gremlin-server/bin/gremlin-server.sh
conf/gremlin-server-integration-secure.yaml
diff --git a/gremlin-go/docker/generate-all.groovy
b/gremlin-go/docker/generate-all.groovy
deleted file mode 100644
index c4c31d64ca..0000000000
--- a/gremlin-go/docker/generate-all.groovy
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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
- *
- * 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.
- */
-
-// An example of an initialization script that can be configured to run in
Gremlin Server.
-// Functions defined here will go into global cache and will not be removed
from there
-// unless there is a reset of the ScriptEngine.
-def addItUp(x, y) { x + y }
-
-// an init script that returns a Map allows explicit setting of global
bindings.
-def globals = [:]
-
-// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
-// Note that the name of the key in the "global" map is unimportant.
-globals << [hook : [
- onStartUp: { ctx ->
- // a wild bit of trickery here. the process tests use an INTEGER id
manager when LoadGraphWith is used. this
- // closure provides a way to to manually override the various id managers
for TinkerGraph - the graph on which
- // all of these remote tests are executed - so that the tests will pass
nicely. an alternative might have been
- // to have a special test TinkerGraph config for setting up the id manager
properly, but based on how we do
- // things now, that test config would have been mixed in with release
artifacts and there would have been ugly
- // exclusions to make packaging work properly.
- allowSetOfIdManager = { graph, idManagerFieldName ->
- java.lang.reflect.Field idManagerField =
graph.class.getDeclaredField(idManagerFieldName)
- idManagerField.setAccessible(true)
- java.lang.reflect.Field modifiersField =
java.lang.reflect.Field.class.getDeclaredField("modifiers")
- modifiersField.setAccessible(true)
- modifiersField.setInt(idManagerField, modifiersField.getModifiers() &
~java.lang.reflect.Modifier.FINAL)
-
- idManagerField.set(graph, TinkerGraph.DefaultIdManager.INTEGER)
- }
-
- [classic, modern, crew, sink, grateful, immutable].each{
- allowSetOfIdManager(it, "vertexIdManager")
- allowSetOfIdManager(it, "edgeIdManager")
- allowSetOfIdManager(it, "vertexPropertyIdManager")
- }
- TinkerFactory.generateClassic(classic)
- TinkerFactory.generateModern(modern)
- TinkerFactory.generateTheCrew(crew)
- TinkerFactory.generateGratefulDead(grateful)
- TinkerFactory.generateKitchenSink(sink)
- TinkerFactory.generateModern(immutable)
- }
-] as LifeCycleHook]
-
-// add default TraversalSource instances for each graph instance
-globals << [gclassic :
traversal().withEmbedded(classic).withStrategies(ReferenceElementStrategy)]
-globals << [gmodern :
traversal().withEmbedded(modern).withStrategies(ReferenceElementStrategy)]
-globals << [gimmutable :
traversal().withEmbedded(immutable).withStrategies(ReferenceElementStrategy)]
-globals << [g :
traversal().withEmbedded(graph).withStrategies(ReferenceElementStrategy)]
-globals << [gcrew :
traversal().withEmbedded(crew).withStrategies(ReferenceElementStrategy)]
-globals << [ggraph :
traversal().withEmbedded(graph).withStrategies(ReferenceElementStrategy)]
-globals << [ggrateful :
traversal().withEmbedded(grateful).withStrategies(ReferenceElementStrategy)]
-globals << [gsink :
traversal().withEmbedded(sink).withStrategies(ReferenceElementStrategy)]
-
-// dynamically detect existence of gtx as it may or may not be present
depending on the -DincludeNeo4j
-// and the configuration of the particular server instance. with
docker/gremlin-server.sh the neo4j
-// "tx" configuration is already present and will therefore be enabled.
-def dynamicGtx =
context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE)["tx"]
-if (dynamicGtx != null)
- globals << [gtx :
traversal().withEmbedded(dynamicGtx).withStrategies(ReferenceElementStrategy)]
-
-globals
diff --git a/gremlin-go/docker/gremlin-server-integration-secure.yaml
b/gremlin-go/docker/gremlin-server-integration-secure.yaml
deleted file mode 100644
index c7b997c1a3..0000000000
--- a/gremlin-go/docker/gremlin-server-integration-secure.yaml
+++ /dev/null
@@ -1,76 +0,0 @@
-# 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
-#
-# 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.
-
-host: 0.0.0.0
-port: 45941
-evaluationTimeout: 30000
-channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
-graphs: {
- graph: scripts/tinkergraph-empty.properties,
- immutable: scripts/tinkergraph-empty.properties,
- classic: scripts/tinkergraph-empty.properties,
- modern: scripts/tinkergraph-empty.properties,
- crew: scripts/tinkergraph-empty.properties,
- grateful: scripts/tinkergraph-empty.properties,
- sink: scripts/tinkergraph-empty.properties}
-scriptEngines: {
- gremlin-lang : {},
- gremlin-groovy: {
- plugins: {
org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
-
org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
-
org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCompilerGremlinPlugin:
{expectedCompilationTime: 30000},
- org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin:
{classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
- org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin:
{files: [scripts/generate-all.groovy]}}}}
-serializers:
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: {
ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: {
ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: {
serializeResultToString: true}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: {
serializeResultToString: true}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0,
config: { ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 }
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config:
{ serializeResultToString: true }}
-processors:
- - { className:
org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: {
sessionTimeout: 28800000 }}
- - { className:
org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: {}}
-metrics: {
- slf4jReporter: {enabled: true, interval: 180000}}
-gremlinPool: 8
-strictTransactionManagement: false
-idleConnectionTimeout: 0
-keepAliveInterval: 0
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 1000000
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-writeBufferLowWaterMark: 32768
-writeBufferHighWaterMark: 65536
-authentication: {
- authenticator: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
- config: {
- credentialsDb: conf/tinkergraph-credentials.properties}}
-ssl: {
- enabled: true,
- sslEnabledProtocols: [TLSv1.2],
- # You must configure a keyStore!
- keyStore: /opt/test/resources/server-key.jks,
- keyStorePassword: changeit
-}
diff --git a/gremlin-go/docker/gremlin-server-integration.yaml
b/gremlin-go/docker/gremlin-server-integration.yaml
deleted file mode 100644
index da9f5374af..0000000000
--- a/gremlin-go/docker/gremlin-server-integration.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-# 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
-#
-# 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.
-
-host: 0.0.0.0
-port: 45940
-evaluationTimeout: 30000
-channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
-graphs: {
- graph: scripts/tinkergraph-empty.properties,
- immutable: scripts/tinkergraph-empty.properties,
- classic: scripts/tinkergraph-empty.properties,
- modern: scripts/tinkergraph-empty.properties,
- crew: scripts/tinkergraph-empty.properties,
- grateful: scripts/tinkergraph-empty.properties,
- sink: scripts/tinkergraph-empty.properties,
- tx: scripts/neo4j-empty.properties
-}
-scriptEngines: {
- gremlin-lang : {},
- gremlin-groovy: {
- plugins: {
org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
-
org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
- org.apache.tinkerpop.gremlin.neo4j.jsr223.Neo4jGremlinPlugin:
{},
-
org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCompilerGremlinPlugin:
{expectedCompilationTime: 30000},
- org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin:
{classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
- org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin:
{files: [scripts/generate-all.groovy]}}}}
-serializers:
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: {
ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: {
ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0],
custom:
[groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: {
serializeResultToString: true}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: {
serializeResultToString: true}}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config:
{ ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0,
config: { ioRegistries:
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 }
- - { className:
org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config:
{ serializeResultToString: true }}
-processors:
- - { className:
org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: {
sessionTimeout: 28800000 }}
- - { className:
org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: {}}
-metrics: {
- slf4jReporter: {enabled: true, interval: 180000}}
-gremlinPool: 8
-strictTransactionManagement: false
-idleConnectionTimeout: 0
-keepAliveInterval: 0
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 1000000
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-writeBufferLowWaterMark: 32768
-writeBufferHighWaterMark: 65536
diff --git a/gremlin-go/pom.xml b/gremlin-go/pom.xml
index 026f5be282..35010f5688 100644
--- a/gremlin-go/pom.xml
+++ b/gremlin-go/pom.xml
@@ -97,6 +97,7 @@ limitations under the License.
<skip>${skipTests}</skip>
<environmentVariables>
<GREMLIN_SERVER>${project.version}</GREMLIN_SERVER>
+
<ABS_PROJECT_HOME>${project.basedir}</ABS_PROJECT_HOME>
<!-- setting this env variable is
needed to be cross-platform compatible -->
<HOME>${user.home}</HOME>
</environmentVariables>
@@ -117,16 +118,31 @@ limitations under the License.
</goals>
<configuration>
<skip>${skipTests}</skip>
- <environmentVariables>
-
<GREMLIN_SERVER>${project.version}</GREMLIN_SERVER>
- <HOME>${user.home}</HOME>
- </environmentVariables>
+ <!-- don't need to set env variables for
container tear down -->
<executable>docker-compose</executable>
<arguments>
<argument>down</argument>
</arguments>
</configuration>
</execution>
+ <execution>
+ <id>remove-dangling-images</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <executable>docker</executable>
+ <arguments>
+ <argument>image</argument>
+ <argument>prune</argument>
+ <argument>--filter</argument>
+
<argument>[email protected]</argument>
+ <argument>-f</argument>
+ </arguments>
+ </configuration>
+ </execution>
</executions>
</plugin>
<plugin>
diff --git a/gremlin-go/run.sh b/gremlin-go/run.sh
index 8d2315b48f..e37b768711 100755
--- a/gremlin-go/run.sh
+++ b/gremlin-go/run.sh
@@ -42,10 +42,14 @@ fi
# Parses current gremlin server version from project pom.xml file using perl
regex
GREMLIN_SERVER_VERSION=$(grep tinkerpop -A2 pom.xml | grep -Po
'(?<=<version>)([0-9]+\.?){3}(-SNAPSHOT)?(?=<)')
export GREMLIN_SERVER="${1:-$GREMLIN_SERVER_VERSION}"
-echo "$GREMLIN_SERVER"
+echo "Running server version: $GREMLIN_SERVER"
-# Passes current gremlin server version into docker compose as environment
variable & removes all service containers
+ABS_PROJECT_HOME=$(dirname $(realpath "$0"))/..
+export ABS_PROJECT_HOME
+
+# Passes current gremlin server version into docker compose as environment
variable
docker-compose up --build --exit-code-from gremlin-go-integration-tests
EXIT_CODE=$?
+# Removes all service containers
docker-compose down
exit $EXIT_CODE
diff --git a/gremlin-javascript/pom.xml b/gremlin-javascript/pom.xml
index bbf9466db6..8b2e05e383 100644
--- a/gremlin-javascript/pom.xml
+++ b/gremlin-javascript/pom.xml
@@ -28,262 +28,11 @@ limitations under the License.
<properties>
<maven.test.skip>false</maven.test.skip>
<skipTests>${maven.test.skip}</skipTests>
-
<gremlin.server.dir>${project.parent.basedir}/gremlin-server</gremlin.server.dir>
- <tinkerpop.root.dir>${project.parent.basedir}</tinkerpop.root.dir>
<npm.version>6.14.6</npm.version>
<node.version>v10.22.0</node.version>
</properties>
<build>
- <directory>${basedir}/target</directory>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>com.github.eirslett</groupId>
- <artifactId>frontend-maven-plugin</artifactId>
- <version>1.12.1</version>
- </plugin>
- </plugins>
- </pluginManagement>
<plugins>
- <plugin>
- <!--
- Use gmavenplus-plugin to:
- - Generate js sources
- - Start and stop gremlin server for integration tests
- -->
- <groupId>org.codehaus.gmavenplus</groupId>
- <artifactId>gmavenplus-plugin</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>gremlin-server</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>gremlin-test</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>neo4j-gremlin</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>${commons.io.version}</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j.version}</version>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.codehaus.groovy</groupId>
- <artifactId>groovy-all</artifactId>
- <version>${groovy.version}</version>
- <type>pom</type>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
- <executions>
- <execution>
- <id>generate-radish-support</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <properties>
- <property>
- <name>projectBaseDir</name>
- <value>${project.basedir}/../</value>
- </property>
- </properties>
- <scripts>
-
<script>${project.basedir}/build/generate.groovy</script>
- </scripts>
- </configuration>
- </execution>
- <execution>
- <id>update-version</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <scripts>
- <script>
- def mavenVersion = "${project.version}"
- def versionForJs =
mavenVersion.replace("-SNAPSHOT", "-alpha1")
- def platformAgnosticBaseDirPath =
project.basedir.getAbsolutePath().replace("\\", "/")
- def file = new
File(platformAgnosticBaseDirPath +
"/src/main/javascript/gremlin-javascript/package.json")
-
file.write(file.getText("UTF-8").replaceFirst(/"version": "(.*)",/,
"\"version\": \"" + versionForJs + "\","))
- </script>
- </scripts>
- </configuration>
- </execution>
- <execution>
- <id>gremlin-server-start</id>
- <phase>pre-integration-test</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <properties>
- <property>
- <name>skipTests</name>
- <value>${skipTests}</value>
- </property>
- <property>
- <name>gremlinServerDir</name>
- <value>${gremlin.server.dir}</value>
- </property>
- <property>
- <name>settingsFile</name>
-
<value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
- </property>
- <property>
- <name>executionName</name>
- <value>${project.name}</value>
- </property>
- <property>
- <name>projectBaseDir</name>
- <value>${project.basedir}</value>
- </property>
- <property>
- <name>tinkerpopRootDir</name>
- <value>${tinkerpop.root.dir}</value>
- </property>
- </properties>
- <scripts>
-
<script>${gremlin.server.dir}/src/test/scripts/test-server-start.groovy</script>
- </scripts>
- </configuration>
- </execution>
- <execution>
- <id>gremlin-server-stop</id>
- <phase>post-integration-test</phase>
- <goals>
- <goal>execute</goal>
- </goals>
- <configuration>
- <properties>
- <property>
- <name>skipTests</name>
- <value>${skipTests}</value>
- </property>
- <property>
- <name>executionName</name>
- <value>${project.name}</value>
- </property>
- </properties>
- <scripts>
-
<script>${gremlin.server.dir}/src/test/scripts/test-server-stop.groovy</script>
- </scripts>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-clean-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>clean</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>com.github.eirslett</groupId>
- <artifactId>frontend-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>install node and npm</id>
- <phase>validate</phase>
- <goals>
- <goal>install-node-and-npm</goal>
- </goals>
- </execution>
- <execution>
- <id>npm install</id>
- <phase>validate</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <arguments>install</arguments>
- </configuration>
- </execution>
- <execution>
- <id>npm lint</id>
- <phase>validate</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <skip>${skipTests}</skip>
- <arguments>run lint</arguments>
- <failOnError>true</failOnError>
- </configuration>
- </execution>
- <execution>
- <id>grunt jsdoc</id>
- <goals>
- <goal>grunt</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <arguments>jsdoc</arguments>
- </configuration>
- </execution>
- <execution>
- <id>npm test</id>
- <phase>integration-test</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <skip>${skipTests}</skip>
- <arguments>test --exit</arguments>
- <failOnError>true</failOnError>
- </configuration>
- </execution>
- <execution>
- <id>npm test gherkin features</id>
- <phase>integration-test</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <skip>${skipTests}</skip>
- <arguments>run-script features</arguments>
- <failOnError>true</failOnError>
- </configuration>
- </execution>
- </executions>
- <configuration>
-
<workingDirectory>src/main/javascript/gremlin-javascript</workingDirectory>
- <nodeVersion>${node.version}</nodeVersion>
- <npmVersion>${npm.version}</npmVersion>
-
- <!--
- transaction testing is disabled unless the -DincludeNeo4j
flag enables the include-neo4j
- maven profile which is a standard profile we use to add
neo4j to testing explicitly - for
- npm we set this TEST_TRANSACTIONS environment variable
that can be accessed in tests to
- determine if we skip transaction oriented tests or not.
without neo4j we can't test tx()
- so this is disabled by default and enabled in the
include-neo4j profile below
- -->
- <environmentVariables>
- <TEST_TRANSACTIONS>false</TEST_TRANSACTIONS>
- </environmentVariables>
- </configuration>
- </plugin>
<!--
there is no point to building/deploying the jvm stuff - there is
no java source really - just poms
-->
@@ -318,126 +67,142 @@ limitations under the License.
</plugins>
</build>
<profiles>
- <!--
- This profile will include neo4j for purposes of transactional
testing within Gremlin Server.
- Tests that require neo4j specifically will be "ignored" if this
profile is not turned on.
- -->
+ <!-- Test gremlin-javascript in Docker -->
<profile>
- <id>include-neo4j</id>
+ <id>glv-js</id>
<activation>
- <activeByDefault>false</activeByDefault>
- <property>
- <name>includeNeo4j</name>
- </property>
+ <activeByDefault>true</activeByDefault>
</activation>
<build>
+ <finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
- <!-- with neo4j present we can enable transaction testing
-->
<plugin>
- <groupId>com.github.eirslett</groupId>
- <artifactId>frontend-maven-plugin</artifactId>
- <configuration>
- <environmentVariables combine.children="override">
- <TEST_TRANSACTIONS>true</TEST_TRANSACTIONS>
- </environmentVariables>
- </configuration>
+ <artifactId>exec-maven-plugin</artifactId>
+ <groupId>org.codehaus.mojo</groupId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <id>run-tests</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <environmentVariables>
+
<GREMLIN_SERVER>${project.version}</GREMLIN_SERVER>
+
<ABS_PROJECT_HOME>${project.basedir}/../</ABS_PROJECT_HOME>
+ <!-- setting this env variable is
needed to be cross-platform compatible -->
+ <HOME>${user.home}</HOME>
+ </environmentVariables>
+ <executable>docker-compose</executable>
+ <arguments>
+ <argument>up</argument>
+ <argument>--build</argument>
+ <argument>--exit-code-from</argument>
+
<argument>gremlin-js-integration-tests</argument>
+ </arguments>
+
<workingDirectory>./src/main/javascript/gremlin-javascript</workingDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>shutdown-container</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <!-- don't need to set env variables for
container tear down -->
+ <executable>docker-compose</executable>
+ <arguments>
+ <argument>down</argument>
+ </arguments>
+
<workingDirectory>./src/main/javascript/gremlin-javascript</workingDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>remove-dangling-images</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipTests}</skip>
+ <executable>docker</executable>
+ <arguments>
+ <argument>image</argument>
+ <argument>prune</argument>
+ <argument>--filter</argument>
+
<argument>[email protected]</argument>
+ <argument>-f</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<dependencies>
<dependency>
- <groupId>org.neo4j</groupId>
-
<artifactId>neo4j-tinkerpop-api-impl</artifactId>
- <version>0.9-3.4.0</version>
- <exclusions>
- <exclusion>
- <groupId>org.neo4j</groupId>
- <artifactId>neo4j-kernel</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-text</artifactId>
- </exclusion>
- <exclusion>
-
<groupId>com.github.ben-manes.caffeine</groupId>
- <artifactId>caffeine</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-nop</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- </exclusion>
- <exclusion>
-
<groupId>io.dropwizard.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.ow2.asm</groupId>
- <artifactId>asm</artifactId>
- </exclusion>
- </exclusions>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>gremlin-server</artifactId>
+ <version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <version>2.11.8</version>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>gremlin-test</artifactId>
+ <version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-reflect</artifactId>
- <version>2.11.8</version>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>neo4j-gremlin</artifactId>
+ <version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- <version>5.5.0</version>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons.io.version}</version>
</dependency>
<dependency>
- <groupId>io.dropwizard.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- <version>4.2.11</version>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>${log4j.version}</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
- <groupId>org.neo4j</groupId>
- <artifactId>neo4j-kernel</artifactId>
- <version>3.4.11</version>
- <exclusions>
- <exclusion>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- </exclusion>
- </exclusions>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>${groovy.version}</version>
+ <type>pom</type>
+ <scope>runtime</scope>
</dependency>
</dependencies>
+ <executions>
+ <execution>
+ <id>generate-radish-support</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <properties>
+ <property>
+ <name>projectBaseDir</name>
+
<value>${project.basedir}/../</value>
+ </property>
+ </properties>
+ <scripts>
+
<script>${project.basedir}/build/generate.groovy</script>
+ </scripts>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
</profile>
-
<!--
Provides a way to deploy the gremlin-javascript GLV to npm. This
cannot be part of the standard maven execution
because npm does not have a staging environment like sonatype for
releases. As soon as the release is
diff --git a/gremlin-go/docker-compose.yml
b/gremlin-javascript/src/main/javascript/gremlin-javascript/docker-compose.yml
similarity index 51%
copy from gremlin-go/docker-compose.yml
copy to
gremlin-javascript/src/main/javascript/gremlin-javascript/docker-compose.yml
index a02236950f..24b7e17fc4 100644
--- a/gremlin-go/docker-compose.yml
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/docker-compose.yml
@@ -15,44 +15,48 @@
# specific language governing permissions and limitations
# under the License.
-version: "3.7"
+version: "3.8"
services:
- gremlin-test-server:
- container_name: gremlin-test-server
- image: tinkerpop:gremlin-test-server-${GREMLIN_SERVER}
+ gremlin-server-test-js:
+ container_name: gremlin-server-test-js
+ image: tinkerpop/gremlin-server-test:${GREMLIN_SERVER}
build:
- context: ../
- dockerfile: gremlin-go/Dockerfile
+ context: ../../../../../
+ dockerfile: docker/gremlin-test-server/Dockerfile
args:
- GREMLIN_SERVER=${GREMLIN_SERVER}
ports:
- "45940:45940"
- "45941:45941"
+ - "45942:45942"
+ - "4588:4588"
volumes:
- ${HOME}/.groovy:/root/.groovy
- ${HOME}/.m2:/root/.m2
+ - ${ABS_PROJECT_HOME}/gremlin-test/target:/opt/gremlin-test
+ healthcheck:
+ test: [ "CMD-SHELL", "apk add curl && curl -f
http://localhost:45940?gremlin=100-1" ]
+ interval: 30s
+ timeout: 10s
+ retries: 30
+ start_period: 30s
- gremlin-go-integration-tests:
- container_name: gremlin-go-integration-tests
- image: golang:1.17
+ gremlin-js-integration-tests:
+ container_name: gremlin-js-integration-tests
+ image: node:16
volumes:
- - .:/go_app
- - ../gremlin-test/features:/gremlin-test
+ - .:/js_app
+ - ../../../../../gremlin-test/features:/gremlin-test
+ - ../../../../../docker/gremlin-test-server:/js_app/gremlin-test-server
environment:
- - CUCUMBER_FEATURE_FOLDER=/gremlin-test
- - GREMLIN_SERVER_URL=ws://gremlin-test-server:45940/gremlin
- - GREMLIN_SERVER_BASIC_AUTH_URL=wss://gremlin-test-server:45941/gremlin
- - RUN_INTEGRATION_TESTS=true
- - RUN_INTEGRATION_WITH_ALIAS_TESTS=true
- - RUN_BASIC_AUTH_INTEGRATION_TESTS=true
+ - DOCKER_ENVIRONMENT=true
- TEST_TRANSACTIONS=true
- working_dir: /go_app
+ working_dir: /js_app
command: >
- bash -c "apt-get update && apt-get install dos2unix && dos2unix
./wait-for-server.sh
- && ./wait-for-server.sh gremlin-test-server 45940 300
- && go install
github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
- && go test -v -json ./... -race -covermode=atomic
-coverprofile=\"coverage.out\" -coverpkg=./... | gotestfmt"
+ bash -c "npm config set cache /tmp --global
+ && npm ci && npm run test && npm run features-docker"
depends_on:
- - gremlin-test-server
+ gremlin-server-test-js:
+ condition: service_healthy
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/package.json
b/gremlin-javascript/src/main/javascript/gremlin-javascript/package.json
index f349cb6073..793899f996 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/package.json
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/package.json
@@ -49,6 +49,9 @@
"features": "npm run features-graphson30 && npm run features-graphbinary",
"features-graphson30": "cross-env
CLIENT_MIMETYPE='application/vnd.gremlin-v3.0+json' cucumber-js --require
test/cucumber ../../../../../gremlin-test/features/",
"features-graphbinary": "cross-env
CLIENT_MIMETYPE='application/vnd.graphbinary-v1.0' cucumber-js --require
test/cucumber ../../../../../gremlin-test/features/",
+ "features-docker": "npm run features-graphson30-docker && npm run
features-graphbinary-docker",
+ "features-graphson30-docker": "cross-env
CLIENT_MIMETYPE='application/vnd.gremlin-v3.0+json' cucumber-js --require
test/cucumber ../gremlin-test/",
+ "features-graphbinary-docker": "cross-env
CLIENT_MIMETYPE='application/vnd.graphbinary-v1.0' cucumber-js --require
test/cucumber ../gremlin-test/",
"lint": "eslint --ext .js ."
},
"engines": {
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
index 0350c9e63a..296f7c3c84 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
@@ -27,8 +27,15 @@ const DriverRemoteConnection =
require('../lib/driver/driver-remote-connection')
const Client = require('../lib/driver/client');
const PlainTextSaslAuthenticator =
require('../lib/driver/auth/plain-text-sasl-authenticator');
-const serverUrl = 'ws://localhost:45940/gremlin';
-const serverAuthUrl = 'wss://localhost:45941/gremlin';
+let serverUrl;
+let serverAuthUrl;
+if (process.env.DOCKER_ENVIRONMENT === 'true') {
+ serverUrl = 'ws://gremlin-server-test-js:45940/gremlin';
+ serverAuthUrl = 'wss://gremlin-server-test-js:45941/gremlin';
+} else {
+ serverUrl = 'ws://localhost:45940/gremlin';
+ serverAuthUrl = 'wss://localhost:45941/gremlin';
+}
/** @returns {DriverRemoteConnection} */
exports.getConnection = function getConnection(traversalSource) {
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/sasl-authentication-tests.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/sasl-authentication-tests.js
index b3ecf06a30..1fa5850cc2 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/sasl-authentication-tests.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/sasl-authentication-tests.js
@@ -28,7 +28,12 @@ const DriverRemoteConnection =
require('../../lib/driver/driver-remote-connectio
const PlainTextSaslAuthenticator =
require('../../lib/driver/auth/plain-text-sasl-authenticator');
let connection;
-const badServerAuthUrl = 'ws://localhost:45941/gremlin';
+let badServerAuthUrl;
+if (process.env.DOCKER_ENVIRONMENT === 'true') {
+ badServerAuthUrl = 'ws://gremlin-server-test-js:45941/gremlin';
+} else {
+ badServerAuthUrl = 'ws://localhost:45941/gremlin';
+}
describe('DriverRemoteConnection', function () {
context('with PlainTextSaslAuthenticator', function () {
diff --git a/gremlin-server/conf/tinkergraph-service.properties
b/gremlin-server/conf/tinkergraph-service.properties
new file mode 100644
index 0000000000..211b9e4f03
--- /dev/null
+++ b/gremlin-server/conf/tinkergraph-service.properties
@@ -0,0 +1,20 @@
+# 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
+#
+# 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.
+gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
+gremlin.tinkergraph.vertexIdManager=INTEGER
+gremlin.tinkergraph.edgeIdManager=INTEGER
+gremlin.tinkergraph.vertexPropertyIdManager=INTEGER
\ No newline at end of file
diff --git a/gremlin-server/pom.xml b/gremlin-server/pom.xml
index a1c9a7ef6d..d6ef175d01 100644
--- a/gremlin-server/pom.xml
+++ b/gremlin-server/pom.xml
@@ -186,6 +186,24 @@ limitations under the License.
</arguments>
</configuration>
</execution>
+ <execution>
+ <id>remove-dangling-images</id>
+ <phase>install</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <skip>${skipImageBuild}</skip>
+ <executable>docker</executable>
+ <arguments>
+ <argument>image</argument>
+ <argument>prune</argument>
+ <argument>--filter</argument>
+
<argument>[email protected]</argument>
+ <argument>-f</argument>
+ </arguments>
+ </configuration>
+ </execution>
</executions>
</plugin>
</plugins>
diff --git a/gremlin-server/src/test/scripts/generate-all.groovy
b/gremlin-server/src/test/scripts/generate-all.groovy
index 464f673743..bbecf60023 100644
--- a/gremlin-server/src/test/scripts/generate-all.groovy
+++ b/gremlin-server/src/test/scripts/generate-all.groovy
@@ -75,4 +75,9 @@ def dynamicGtx =
context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE)["t
if (dynamicGtx != null)
globals << [gtx :
traversal().withEmbedded(dynamicGtx).withStrategies(ReferenceElementStrategy)]
+// dynamically detect existence of gimmutable as it is only used in gremlin-go
testing suite
+def dynamicGimmutable =
context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE)["immutable"]
+if (dynamicGimmutable != null)
+ globals << [gimmutable :
traversal().withEmbedded(dynamicGimmutable).withStrategies(ReferenceElementStrategy)]
+
globals