# MOA ZS - README
This file gives instructions on how to build, test, and deploy MOA ZS.
See [the technical specification](docs/spec.md) for a more detailed description of MOA ZS and how it can be configured.
## Build Instructions
Compilation and Runtime Requirements:
- OpenJDK 12 (OpenJDK 11 has an unfixed bug [1] that prevents the completion of TLS handshakes.)
- Apache Maven (tested with Apache Maven 3.6.0)
### Run Unit Tests
Command:
mvn test
### Run Integration Tests
Integration tests start with the prefix `IT`.
Run them with the following command:
mvn test -P integration-tests
### Run All Tests
Command:
mvn test -P all-tests
Note that some integration tests (prefix `ITSSL`) rely on a TLS connection and Client Authentication.
[This guide](docs/howto-ssl-client-auth-with-apache.md) explains how to set up TLS and Client Authentication with Apache 2.
### Package to .war
The application can be packaged to a web application archive by running the following command:
mvn package
Find the war file in the `target/` folder.
## Download
You can download a ready-to-deploy web application archive (`.war`) of MOA ZS from .
## Deployment
After obtaining the `war` file, MOA ZS needs to be configured and can then be deployed into a servlet container or as a standalone application.
### Configuration
The folder `src/test/resources/config` serves as a template for configuring MOA ZS.
This folder can be used as-is for deploying MOA ZS in a test or development environment.
You may apply changes to this folder to fit the needs of a productive environment.
See [specification.md](docs/spec.md) and [application.yaml](src/test/resources/config/application.yaml) for more details.
### Deploy as Standalone Application
1. Create a new directory that serves as the application's working directory.
mkdir standalone
1. Copy the `war` file into the applications working directory.
cp target/moa-zs.war standalone/
1. Copy the directory `test/main/resources/config/` into the applications working directory.
cp src/test/resources/config standalone/ -r
If you rename this folder, the application might not find the configuration file `application.yaml`.
Consult [Spring Doc: External Configuration](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files) for further details and alternative ways to configure the application.
1. Start application.
(cd standalone && java -jar moa-zs.war)
1. The app2mzs service is reachable under .
The zuse2app service is reachable under .
### Deploy to Tomcat Container
1. Copy the application package `moa-zs.war` to Tomcat's `webapps` directory.
cp target/moa-zs.war $CATALINA_BASE/webapps/
1. Create a copy of the directory `test/main/resources/config/` (`$MZS_CONFIG` being the path to the configuration folder)
cp test/main/resources/config/ $MZS_CONFIG
1. Ensure that the spring-boot application finds `$MZS_CONFIG/application.yaml`.
Option a) Add the folder `$MZS_CONFIG` to the class path of the web application, e.g. by specifying the `common.loader` property (see [Tomcat's Class Loader How-To](https://tomcat.apache.org/tomcat-9.0-doc/class-loader-howto.html)).
Option b) Set the system property `spring.config.location` to `$MZS_CONFIG/application.yaml`.
In that case, make sure that all paths in `$MZS_CONFIG/application.yaml` are absolute paths.
1. Start tomcat.
1. The app2mzs service is reachable under .
The zuse2app service is reachable under .
## Directory Layout
In this repository you will find the following:
- `src` : MOA ZS source code.
- `docs` : Documentation.
- `curl` : Example requests to check if the service is up and running on localhost.
# Footnotes
[1] https://bugs.openjdk.java.net/browse/JDK-8214098