[ 
https://issues.apache.org/jira/browse/GEODE-8728?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17388876#comment-17388876
 ] 

ASF subversion and git services commented on GEODE-8728:
--------------------------------------------------------

Commit cb2f9874ca9e8840afaff932e1ef53b93552d967 in geode's branch 
refs/heads/develop from Dale Emery
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=cb2f987 ]

GEODE-8728: Isolate tests without Docker (#6720)

* GEODE-8728: Isolate tests without Docker

This commit changes Geode's build system to run test worker processes
outside of Docker. It replaces the Dockerized test plugin with a new
plugin that assigns each test worker process a distinct range of ports.

BUILD SYSTEM

Changed `multi-process-test.gradle` to mark relevant test tasks as
isolated tests. The `IsolatedTestPlugin` applies itself to test tasks
marked this way.

DOCKERIZED TEST PLUGIN

Removed the dockerized test plugin.

SPECIFY PORT RANGES VIA SYSTEM PROPERTIES

Added `AvailablePort.lowerBound` and `AvailablePort.upperBound` system
properties to specify the range of non-membership ports considered by
the "get random port" methods of `AvaiablePort` and
`AvailablePortHelper`.

Changed `AvailablePort` and `AvailablePortHelper` to use the membership
port range specified by Geode's existing `membership-port-range` system
property, if defined.

Changed `ProcessManager`to forward the test worker JVM's port range
system properties to each child VM it creates.

ISOLATED TEST PLUGIN

Added the `IsolatedTestPlugin`, which overrides Gradle's built-in test
worker process launcher with a custom mechanism:

- `PortRange`: Defines a range of ports.
- `PortRangeContext`: Defines the membership and non-membership port
  ranges for a process. Configures each `ProcessBuilder` to set the port
  range system properties for the process being launched.
- `CompletableProcess`: Wraps a regular Java `Process` to execute an
  action on termination.
- `PortRangeProcessLauncher`: Assigns each test worker process a
  distinct port range context. Launches test worker processes. Wraps
  each test worker `Process` in a `CompletableProcess` that releases its
  port range context when the process terminates.

SPECIFIC TESTS

Changed several tests in `DistributedSystemDUnitTest` and
`InternalDistributedSystemJUnitTest` to clear the port range system
properties added by the `IsolatedTestPlugin`. These tests verify that
the system applies Geode's default port ranges. For these tests to work,
those system properties must not be defined.

Disabled a `NetstatDUnitTest` test that executes `lsof`. When this test
runs CI outside of a Docker container, in the presence of dozens of
tests and potentially hundreds of Geode members, the output of `lsof` is
enormous. The `NetstatFunction` attempts to collect all of the output in
memory, which results in an out of memory exception.

Co-authored-by: Dale Emery <dem...@vmware.com>

* Spotless

Co-authored-by: Dale Emery <dem...@vmware.com>

> Configure Gradle to run parallel tests in isolation without Docker [PERMANENT]
> ------------------------------------------------------------------------------
>
>                 Key: GEODE-8728
>                 URL: https://issues.apache.org/jira/browse/GEODE-8728
>             Project: Geode
>          Issue Type: Test
>          Components: tests
>    Affects Versions: 1.14.0
>            Reporter: Dale Emery
>            Assignee: Dale Emery
>            Priority: Major
>              Labels: GeodeOperationAPI, pull-request-available
>
> For tests to behave well when run in parallel, each must refrain from using 
> ports and test files that are in use by other tests.
> Geode's Gradle build isolates concurrently executing tests by running each 
> test class in a Docker container. To do this, the build applies an open 
> source "Gradle Dockerized Test" plugin that is obsolete and appears to be 
> unmaintained.
> This ticket removes the obsolete plugin and replaces it with a small amount 
> of custom Gradle code and a few minor changes to Geode:
>  - Configure Gradle to assign each concurrently executing test JVM a unique 
> working directory and a distinct range of ports.
>  - Change Geode's "available port" feature to allocate ports only from the 
> ranges assigned by Gradle.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to