The purpose of this guide is to get you up to speed with developing for Greengrass.
- Install JDK 8 and set up JAVA_HOME
Note: JDK 8 is required because we want to be able to run Greengrass on devices where only JDK8 is available. Greengrass is often run on more modern JDKs.
- Install Maven
- (Optional) Configure passwordless sudo access for testing
To begin developing with Greengrass you will need to clone the repositories.
- You will need permission to download from GitHub using SSH.
- Go to GitHub and then click on your picture -> Settings -> SSH and GPG keys
- Add an SSH key to your account. You can create a new key, or just use your existing key located
at
~/.ssh/id_rsa.pub
- Copy and paste the key, ensuring that there are no extraneous new lines
- Use
git clone ssh://[email protected]/aws-greengrass/<repository-name>.git
to clone the repository to your current directory - Repeat (2) for all the repositories that you want
- Open IntelliJ and go to File -> New -> Project from Existing Sources
- Then open the Nucleus or any other module and import it as a Maven project
- Once that's imported, go to File -> New -> Module from Existing Sources for each of the remaining modules you want to develop on. For each one, import it as a Maven project again.
- You should now have all the projects properly configured to begin working
- Once all projects are in, go to the Maven pane (usually on the right-hand side) and run
install
target for each of the projects
To build, simply run mvn -U -ntp install -DskipTests
. This will build the Nucleus artifacts while skipping any
testing.
Once built, in order to run the nucleus, you can create a run configuration in your IDE or just use the command line. See details in Greengrass easy setup.
The config.yaml
file contains keys for platforms, launchers, and services. Detailed config schema is
in README_CONFIG_SCHEMA.
JUnit 5 is used for both unit and integration testing. Both can be run locally without network access nor AWS credentials.
Run only unit tests: mvn test
Run only integration tests: mvn surefire:test@integration-tests -Dsurefire.argLine=""
Run both: mvn verify
End-To-End (E2E) tests differ from our integration tests in that they require AWS credentials and network access. In order to run these tests, first you must put AWS credentials into your environment. Once you have credentials with the following access, you can then use our E2E tests.
iot:*
greengrass:*
s3:*
iam:*
sts:*
To run only the E2E tests, run the following commands:
mvn -ntp generate-test-sources test-compile -DskipTests
mvn surefire:test@integration-tests -Dgroups="E2E" -DexcludedGroups="" -Dsurefire.argLine=""
These commands re-build all tests with test resources, and execute all integration tests tagged with "E2E". It will not run any other tests.
mvn verify
does not run the E2E tests by default since they take longer and require additional resources.
To run E2E tests in parallel, append -DforkCount=1C -DreuseForks=false
to the test command above. This enables Maven
to run test classes in parallel with the number of forks up to the number of available CPU cores.
Currently, tests cases within the same class should not run in parallel, due to usages of global resources.
For new tests which are non-intrusive to test environment, annotate with @Tag("E2E")
. For those changing the
underlying test environment, e.g. MQTT connection test, annotate with @Tag("E2E-INTRUSIVE")
.
UATs are defined under uat module. UATs use aws-greengrass-testing-standalone
as the test framework to run the
tests. aws-greengrass-testing-standalone
is pulled as maven dependency from GG maven repo. You can add/update UATs at
uat source. The uat module generates a UAT artifact (nucleus-uat-artifact.jar) which is an
executable jar meant to run the UATs.
UAT runs require the credentials for the AWS account you want to use. Ensure credentials are available in the environment. Command to run UATs locally from the project root is
java -Dggc.archive=target/aws.greengrass.nucleus.zip -Dtags="stable" -jar uat/target/nucleus-uat-artifact.jar
You can supply additional parameters as well. More information on parameters can be found by running following command
java -jar uat/target/nucleus-uat-artifact.jar -help