Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7f7546f
#345: Add Jar Launcher
kaklakariada Jan 19, 2025
a6a114d
Fix starting stream consumer
kaklakariada Jan 26, 2025
ec4ba39
Merge remote-tracking branch 'origin/main' into kaklakariada/issue345
kaklakariada Jun 29, 2025
bf77419
Add builder for JarLauncher
kaklakariada Jul 3, 2025
42740d6
Convert test to integration test
kaklakariada Jul 3, 2025
e79f0f3
Test with latest Java 24
kaklakariada Jul 3, 2025
1976464
Remove ExitGuard annotations
kaklakariada Jul 3, 2025
ee88f30
Adapt tests to Java > 21
kaklakariada Jul 5, 2025
ff7b6bd
Fix integration tests
kaklakariada Jul 5, 2025
4368244
Fix integration tests
kaklakariada Jul 6, 2025
b45e034
Improve test assertions
kaklakariada Jul 7, 2025
03a2870
Enable broken tests
kaklakariada Jul 7, 2025
887aaca
Simplify JarLauncher API
kaklakariada Aug 3, 2025
b8ddf25
Fix sonar warnings
kaklakariada Aug 3, 2025
7723ac3
Merge branch 'main' into kaklakariada/issue345
kaklakariada Nov 9, 2025
6bf24e9
Adapt integration test under windows
kaklakariada Nov 9, 2025
515b381
Fix mockito agent warning
kaklakariada Nov 9, 2025
a739ccc
Define ossindex credentials
kaklakariada Nov 9, 2025
87a916f
Upgrade dependencies
kaklakariada Nov 9, 2025
4fdeeae
Upgrade test dependencies
kaklakariada Nov 9, 2025
dfc1e17
Fix ossindex credentials
kaklakariada Nov 9, 2025
b4054f1
Add debug output for failing test
kaklakariada Nov 9, 2025
0eb1cc7
Add helpful output to assertion message
kaklakariada Nov 9, 2025
1cc04a9
Fix integration test for windows
kaklakariada Nov 9, 2025
545e206
Implement review findings
kaklakariada Nov 16, 2025
b944622
Fix vscode setup
kaklakariada Nov 16, 2025
40efb83
Get aggregated dependency update PRs
kaklakariada Nov 16, 2025
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
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ jobs:
include:
- os: ubuntu-latest
java: 21
- os: ubuntu-latest
java: 24

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-os-${{ matrix.os }}-java-${{ matrix.java }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ public CliException(final String message)
{
super(message);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static void main(final String[] args)

/**
* Auxiliary entry point to the command line application that allows
* injection of a
* injection of a {@link DirectoryService}.
*
* @param args
* command line arguments.
Expand All @@ -63,6 +63,7 @@ public static void main(final String[] args, final DirectoryService directorySer
}
}

@SuppressWarnings("java:S1166") // Exceptions are reported to the user
private static CliArguments parseCommandLineArguments(final String[] args,
final DirectoryService directoryService)
{
Expand Down

This file was deleted.

9 changes: 8 additions & 1 deletion doc/developer_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,20 @@ By default, OFT is built with Java 17.

To build and test with a later version, add argument `-Djava.version=17` to the Maven command.


#### Speedup Build

By default, Maven builds the OFT modules sequentially.

To speed up the build and build modules in parallel, add argument `-T 1C` to the Maven command.

#### Run Single Integration Test

Specify test class via system property `it.test` and module via command line option `-projects`:

```sh
mvn -Dit.test=CliStarterIT failsafe:integration-test -projects product
```

### Run Requirements Tracing

```sh
Expand Down
12 changes: 12 additions & 0 deletions parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,18 @@
<version>1.4.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.exasol</groupId>
<artifactId>maven-project-version-getter</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.itsallcode</groupId>
<artifactId>simple-process</artifactId>
<version>0.2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<profiles>
Expand Down
12 changes: 11 additions & 1 deletion product/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@
<artifactId>openfasttrace-testutil</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.exasol</groupId>
<artifactId>maven-project-version-getter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.itsallcode</groupId>
<artifactId>simple-process</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>openfasttrace-${revision}</finalName>
Expand Down Expand Up @@ -117,7 +127,7 @@
<configuration>
<compilerArgs>
<arg>-Xlint:all</arg>
<!-- Suppress warning "bad path element "/Users/chp/private/git/openfasttrace/product/target/classes": no such file or directory" -->
<!-- Suppress warning "bad path element "openfasttrace/product/target/classes": no such file or directory" -->
<arg>-Xlint:-path</arg>
<arg>-Werror</arg>
</compilerArgs>
Expand Down
112 changes: 112 additions & 0 deletions product/src/test/java/org/itsallcode/openfasttrace/cli/CliExitIT.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package org.itsallcode.openfasttrace.cli;

import static java.util.Collections.emptyList;
import static org.hamcrest.Matchers.*;

import java.nio.file.Path;
import java.util.*;

import org.itsallcode.openfasttrace.core.cli.ExitStatus;
import org.itsallcode.openfasttrace.core.cli.commands.TraceCommand;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

class CliExitIT
{
private static final String TEST_RESOURCES_MARKDOWN = "../core/src/test/resources/markdown";
private static final String SAMPLE_DESIGN = TEST_RESOURCES_MARKDOWN + "/sample_design.md";
private static final String SAMPLE_SYSTEM_REQUIREMENTS = TEST_RESOURCES_MARKDOWN
+ "/sample_system_requirements.md";

@Test
void testRunWithoutArguments()
{
jarLauncher()
.args(emptyList())
.expectedExitCode(ExitStatus.CLI_ERROR.getCode())
.expectStdOut(emptyString())
.expectStdErr(equalTo("oft: Missing command\nAdd one of 'help','convert','trace'\n\n"))
.verify();
}

@Test
void testRunWithUnsupportedCommand()
{
jarLauncher()
.args(List.of("unsupported"))
.expectedExitCode(ExitStatus.CLI_ERROR.getCode())
.expectStdOut(emptyString())
.expectStdErr(equalTo(
"oft: 'unsupported' is not an OFT command.\nChoose one of 'help','convert','trace'.\n\n"))
.verify();
}

@Test
void testRunWithHelpCommand()
{
jarLauncher()
.args(List.of("help"))
.expectedExitCode(ExitStatus.OK.getCode())
.expectStdOut(startsWith("""
OpenFastTrace

Usage:
oft command"""))
.expectStdErr(emptyString())
.verify();
}

@Test
void testRunWithUnsupportedReporter(@TempDir final Path emptyDir)
{
jarLauncher()
.args(List.of("trace", "-o", "unknown", emptyDir.toString()))
.expectedExitCode(ExitStatus.FAILURE.getCode())
.expectStdOut(emptyString())
.expectStdErr(startsWith(
"Exception in thread \"main\" org.itsallcode.openfasttrace.api.exporter.ExporterException: Found no matching reporter for output format 'unknown'"))
.verify();
}

@Test
void testCliExitCode_Ok()
{
assertExitStatusForTracedFiles(ExitStatus.OK, SAMPLE_SYSTEM_REQUIREMENTS, SAMPLE_DESIGN);
}

private void assertExitStatusForTracedFiles(final ExitStatus expectedStatus, final String... files)
{
final List<String> args = new ArrayList<>();
args.add(TraceCommand.COMMAND_NAME);
args.addAll(Arrays.asList(files));
jarLauncher()
.args(args)
.expectedExitCode(expectedStatus.getCode())
.expectStdErr(emptyString())
.expectStdOut(not(emptyString()))
.verify();
}

private JarLauncher.Builder jarLauncher()
{
return JarLauncher.builder()
.currentWorkingDir();
}

@Test
void testCliExitCode_Failure()
{
assertExitStatusForTracedFiles(ExitStatus.FAILURE, SAMPLE_SYSTEM_REQUIREMENTS);
}

@Test
void testCliExitCode_CliError()
{
jarLauncher()
.args(List.of("--zzzz"))
.expectedExitCode(ExitStatus.CLI_ERROR.getCode())
.expectStdOut(emptyString())
.expectStdErr(equalTo("oft: Unexpected parameter '--zzzz' is not allowed\n"))
.verify();
}
}
Loading
Loading