Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Integration tests

on:
push:
branches: ["**"]

concurrency:
group: integration-test-${{ github.ref }}
cancel-in-progress: true

env:
split-total: 4

jobs:
generate-split-index-json:
name: Generate split indexes
runs-on: ubuntu-latest
outputs:
json: ${{ steps.generate.outputs.split-index-json }}
steps:
- name: Checkout split-tests-java-action
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

- name: Generate split index list
id: generate
uses: ./generate-split-index-json
with:
split-total: ${{ env.split-total }}

integration-test:
name: "Test #${{ matrix.split-index }}"
runs-on: ubuntu-latest
needs:
- generate-split-index-json
permissions:
contents: read
checks: write
strategy:
fail-fast: false
matrix:
split-index: ${{ fromjson(needs.generate-split-index-json.outputs.json) }}
env:
DOWNLOAD_JAR: false
JAR_PATH: split-tests-java/build/libs/split-tests-java.jar
steps:
- name: Checkout split-tests-java-action
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

- name: Checkout split-tests-java
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
repository: Donnerbart/split-tests-java
path: split-tests-java

- name: Set up JDK 21
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4
with:
distribution: temurin
java-version: 21

- name: Set up Gradle
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4

- name: Compile split-tests-java
working-directory: split-tests-java
run: ./gradlew shadowJar

- name: Split tests
id: split-tests
uses: ./
with:
split-index: ${{ matrix.split-index }}
split-total: ${{ env.split-total }}
glob: '**/integration-test/tests/*Test.java'
exclude-glob: '**/NoClassNameTest.java'
junit-glob: '**/integration-test/reports/*.xml'
format: 'list'
new-test-time: 'average'
calculate-optimal-total-split: true
debug: true

- name: Assert split tests
env:
SPLIT_INDEX: ${{ matrix.split-index }}
ACTUAL: ${{ steps.split-tests.outputs.test-suite }}
run: |
case "$SPLIT_INDEX" in
"0")
EXPECTED="de.donnerbart.example.SlowestTest"
;;
"1")
EXPECTED="NoPackageTest de.donnerbart.example.ThirdPartyLibraryTest"
;;
"2")
EXPECTED="de.donnerbart.example.NoTimingOneTest de.donnerbart.example.WhitespaceClassDefinitionTest"
;;
"3")
EXPECTED="de.donnerbart.example.NoTimingTwoTest de.donnerbart.example.SlowTest de.donnerbart.example.FastTest"
;;
*)
echo "Unexpected split index"
exit 1
;;
esac
echo "Expected: $EXPECTED"
echo "Actual: $ACTUAL"
if [ "$ACTUAL" != "$EXPECTED" ]; then
echo "The split tests are not matching"
exit 1
fi
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[![Integration tests](https://github.com/Donnerbart/split-tests-java-action/actions/workflows/integration-test.yml/badge.svg)](https://github.com/Donnerbart/split-tests-java-action/actions/workflows/integration-test.yml)
[![Release](https://github.com/Donnerbart/split-tests-java-action/actions/workflows/release.yml/badge.svg)](https://github.com/Donnerbart/split-tests-java-action/actions/workflows/release.yml)

# @donnerbart/split-tests-java-action

Divides a test suite into groups with equal execution time, based on prior test timings.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="de.donnerbart.example.DeletedTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2025-01-01T00:00:00" hostname="example" time="2.374">
<properties/>
<testcase name="testDeletedMethod()"
classname="de.donnerbart.example.DeletedTest" time="2.374"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="de.donnerbart.example.FastTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2025-01-01T00:00:00" hostname="example" time="2.374">
<properties/>
<testcase name="testFastMethod()"
classname="de.donnerbart.example.FastTest" time="2.374"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="de.donnerbart.example.SlowTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2025-01-01T00:00:00" hostname="example" time="12.386">
<properties/>
<testcase name="testFastMethod()"
classname="de.donnerbart.example.SlowTest" time="12.386"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="de.donnerbart.example.SlowestTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2025-01-01T00:00:00" hostname="example" time="153.457">
<properties/>
<testcase name="testFastMethod()"
classname="de.donnerbart.example.SlowestTest" time="153.457"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
6 changes: 6 additions & 0 deletions integration-test/tests/AbstractTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package de.donnerbart.example;

abstract class AbstractTest {

abstract void implementableMethod();
}
6 changes: 6 additions & 0 deletions integration-test/tests/BaseTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package de.donnerbart.example;

abstract class BaseTest {

abstract void implementableMethod();
}
12 changes: 12 additions & 0 deletions integration-test/tests/DisabledTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

@Disabled("This test should be skipped")
class DisabledTest {

@Test
void testDisabled() {
}
}
10 changes: 10 additions & 0 deletions integration-test/tests/FastTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Test;

class FastTest {

@Test
void testFastMethod() {
}
}
12 changes: 12 additions & 0 deletions integration-test/tests/IgnoreTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package de.donnerbart.example;

import org.junit.Ignore;
import org.junit.Test;

@Ignore("This test should be skipped")
class IgnoreTest {

@Test
void testIgnored() {
}
}
6 changes: 6 additions & 0 deletions integration-test/tests/InterfaceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package de.donnerbart.example;

interface BaseTest {

void implementableMethod();
}
4 changes: 4 additions & 0 deletions integration-test/tests/NoClassNameTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package de.donnerbart.example;

record NoClassNameTest(String foo) {
}
2 changes: 2 additions & 0 deletions integration-test/tests/NoPackageTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class NoPackageTest {
}
10 changes: 10 additions & 0 deletions integration-test/tests/NoTimingOneTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Test;

class NoTimingOneTest {

@Test
void testNoTimingMethod() {
}
}
10 changes: 10 additions & 0 deletions integration-test/tests/NoTimingTwoTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Test;

class NoTimingTwoTest {

@Test
void testNoTimingMethod() {
}
}
10 changes: 10 additions & 0 deletions integration-test/tests/SlowTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Test;

class SlowTest {

@Test
void testSlowMethod() {
}
}
10 changes: 10 additions & 0 deletions integration-test/tests/SlowestTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.donnerbart.example;

import org.junit.jupiter.api.Test;

class SlowestTest {

@Test
void testSlowestMethod() {
}
}
12 changes: 12 additions & 0 deletions integration-test/tests/ThirdPartyLibraryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package de.donnerbart.example;

import com.example.test.Util;
import org.junit.jupiter.api.Test;

class ThirdPartyLibraryTest {

@Test
void testThirdPartyLibraryMethod() {
Util.test();
}
}
14 changes: 14 additions & 0 deletions integration-test/tests/WhitespaceClassDefinitionTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//@formatter:off
package de.donnerbart.example
;

import org.junit.jupiter.api.Test;

class WhitespaceClassDefinitionTest
extends FastTest {

@Test
void testFastMethod() {
}
}
//@formatter:on
Loading