#
# 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.
#

benchmarks:
  baseline_branch: ''
  baseline_version: '1.10.0'
  benchmark_branch: develop
  flavors:
  - title: '_base'
    flag: ''
    options: ''
  - title: '_with_ssl'
    flag: '-PwithSsl'
    options: '--tests=*GetBenchmark --tests=*PutBenchmark'
  - title: '_with_security_manager'
    flag: '-PwithSecurityManager'
    options: '--tests=Partitioned*'

build_test:
  ARTIFACT_SLUG: build
  CALL_STACK_TIMEOUT: '600'
  CPUS: '8'
  DUNIT_PARALLEL_FORKS: '4'
  EXECUTE_TEST_TIMEOUT: 20m
  GRADLE_TASK: build
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  RAM: '16'
  name: Build

examples_test:
  ARTIFACT_SLUG: examples
  CALL_STACK_TIMEOUT: '1800'
  CPUS: '8'
  DUNIT_PARALLEL_FORKS: '4'
  EXECUTE_TEST_TIMEOUT: 30m
  GRADLE_TASK: runAll
  PARALLEL_DUNIT: 'false'
  RAM: '16'
  name: TestExamples

java_build_version:
  name: OpenJDK8
  version: 8

java_test_versions:
- name: OpenJDK8
  version: 8
- name: OpenJDK11
  version: 11

metadata:
  initial_version: 1.11.0

publish_artifacts:
  CPUS: '8'
  EXECUTE_TEST_TIMEOUT: 10m
  RAM: '16'
  name: PublishArtifacts

repository:
  project: geode

tests:
- ARTIFACT_SLUG: unittestfiles
  CALL_STACK_TIMEOUT: '1200'
  CPUS: '8'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 30m
  GRADLE_TASK: test
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'true'
  PLATFORM: linux
  RAM: '16'
  name: Unit
- ARTIFACT_SLUG: acceptancetestfiles
  CALL_STACK_TIMEOUT: '4500'
  CPUS: '8'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 1h30m
  GRADLE_TASK: acceptanceTest
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  PLATFORM: linux
  RAM: '12'
  name: Acceptance
- ARTIFACT_SLUG: distributedtestfiles
  CALL_STACK_TIMEOUT: '9900'
  CPUS: '96'
  DUNIT_PARALLEL_FORKS: '24'
  EXECUTE_TEST_TIMEOUT: 3h00m
  GRADLE_TASK: distributedTest
  PARALLEL_DUNIT: 'true'
  PLATFORM: linux
  RAM: '250'
  name: Distributed
- ARTIFACT_SLUG: integrationtestfiles
  CALL_STACK_TIMEOUT: '1500'
  CPUS: '96'
  DUNIT_PARALLEL_FORKS: '48'
  EXECUTE_TEST_TIMEOUT: 40m
  GRADLE_TASK: integrationTest
  PARALLEL_DUNIT: 'true'
  PLATFORM: linux
  RAM: '90'
  name: Integration
- ARTIFACT_SLUG: upgradetestfiles
  CALL_STACK_TIMEOUT: '3000'
  CPUS: '96'
  DUNIT_PARALLEL_FORKS: '48'
  EXECUTE_TEST_TIMEOUT: 1h
  GRADLE_TASK: upgradeTest
  PARALLEL_DUNIT: 'true'
  PLATFORM: linux
  RAM: '210'
  name: Upgrade
- ARTIFACT_SLUG: stressnewtestfiles
  CALL_STACK_TIMEOUT: '7200'
  CPUS: '96'
  DUNIT_PARALLEL_FORKS: '24'
  EXECUTE_TEST_TIMEOUT: 2h15m
  GRADLE_TASK: repeatTest
  PARALLEL_DUNIT: 'true'
  PARALLEL_GRADLE: 'false'
  PLATFORM: linux
  RAM: '280'
  name: StressNew
- ARTIFACT_SLUG: windows-acceptancetestfiles
  CPUS: '16'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 6h
  GRADLE_TASK: :geode-assembly:acceptanceTest
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  PLATFORM: windows
  RAM: '64'
  name: WindowsAcceptance
- ARTIFACT_SLUG: windows-gfshdistributedtest
  CPUS: '16'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 6h
  GRADLE_TASK: distributedTest
  GRADLE_TASK_OPTIONS: -PtestCategory=org.apache.geode.test.junit.categories.GfshTest
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  PLATFORM: windows
  RAM: '64'
  name: WindowsGfshDistributed
- ARTIFACT_SLUG: windows-integrationtestfiles
  CPUS: '16'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 6h
  GRADLE_TASK: integrationTest
  GRADLE_TASK_OPTIONS: -x geode-core:integrationTest
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  PLATFORM: windows
  RAM: '64'
  name: WindowsIntegration
- ARTIFACT_SLUG: windows-coreintegrationtestfiles
  CPUS: '16'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 6h
  GRADLE_TASK: geode-core:integrationTest
  PARALLEL_DUNIT: 'false'
  PARALLEL_GRADLE: 'false'
  PLATFORM: windows
  RAM: '64'
  name: WindowsCoreIntegration
- ARTIFACT_SLUG: windows-unittestfiles
  CPUS: '16'
  DUNIT_PARALLEL_FORKS: '0'
  EXECUTE_TEST_TIMEOUT: 6h
  GRADLE_TASK: test
  PARALLEL_DUNIT: 'false'
  PLATFORM: windows
  RAM: '64'
  name: WindowsUnit
