Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: enabling e2e tests #23

Merged
merged 12 commits into from
Jan 15, 2024
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tests
README.md
thorest.png
CODE_OF_CONDUCT.md
51 changes: 49 additions & 2 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ current development landscape.
```bash
make test
```
- **Note:**: Please refer to the [README](https://github.com/vechain/thor/blob/master/README.md) for information on how to start the node and interact with the
- **Note:**: Please refer to the [README](https://github.com/vechain/thor/blob/master/README.md) for information on
how to start the node and interact with the
API.
5. Make your changes and commit them with a clear and concise commit message.
6. Push your changes to your forked repository:
Expand All @@ -57,8 +58,54 @@ current development landscape.

- We follow the [Effective Go](https://golang.org/doc/effective_go) guidelines. Please make sure your code is idiomatic
and follows the guidelines.

### Code Linting

- We employ `golangci-lint` for code linting in our development process. It ensures that code adheres to established standards, and any changes that do not pass the linting checks will trigger an error during the Continuous Integration (CI) process.
- You can run it locally by installing the `golangci-lint` binary and running `make lint` in the root directory of the repository.

## Testing

### Unit Tests

```bash
make test
```

### Unit Tests with Coverage

```bash
make test-coverage
```

### E2E Tests

Our E2E tests are written in TypeScript, utilizing hardhat contract solidity development tools. Before running the E2E
tests, ensure you have the following prerequisites installed:

- [Docker](https://docs.docker.com/get-docker/)
- [Node.js](https://nodejs.org/en/download/)
- [Yarn](https://classic.yarnpkg.com/en/docs/install/)
- [Git](https://git-scm.com/downloads)


The E2E tests are located in the tests/thor-e2e-tests directory as a submodule. If you haven't initialized the submodule yet, run:

```bash
git submodule update --init --recursive
```

To run the E2E tests, build the Docker image first:

```bash
docker build -t vechain/thor-e2e .
export THOR_IMAGE=vechain/thor-e2e
```

Then, you can run the tests:

```bash
cd tests/thor-e2e-tests
yarn install
yarn test
```
91 changes: 91 additions & 0 deletions .github/workflows/test-e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: E2E Tests

on:
pull_request:
branches:
- master
push:
branches:
- master

jobs:
build-docker-image:
name: Build Docker image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and export
uses: docker/build-push-action@v5
with:
context: .
tags: vechain/thor:${{ github.sha }}
outputs: type=docker,dest=/tmp/vechain-thor.tar

- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: vechain-thor-image
path: /tmp/vechain-thor.tar
retention-days: 7

run-tests:
runs-on: ubuntu-latest
needs: build-docker-image
env:
THOR_IMAGE: vechain/thor:${{ github.sha }}
name: Run E2E Tests
steps:

- name: Checkout
uses: actions/checkout@v4
with:
submodules: true

- name: Download artifact
uses: actions/download-artifact@v3
with:
name: vechain-thor-image
path: /tmp

- name: Setup Node JS
uses: actions/setup-node@v4
with:
node-version: '18.x'

- name: Load image
run: |
docker load --input /tmp/vechain-thor.tar
docker image ls -a

- name: Run Tests
working-directory: ./tests/thor-e2e-tests
run: |
export THOR_IMAGE=vechain/thor:${{ github.sha }}
yarn install
yarn test

- name: Publish Results
uses: dorny/test-reporter@v1
id: test-reporter
if: success() || failure()
with:
name: E2E Test Results
only-summary: 'false'
list-suites: 'all'
list-tests: 'failed'
fail-on-error: 'true'
reporter: "jest-junit"
path: |
./tests/thor-e2e-tests/junit.xml

- name: Echo Report URL
run: |
echo ${{steps.test-reporter.outputs.url_html}}
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "tests/thor-e2e-tests"]
path = tests/thor-e2e-tests
url = https://github.com/vechain/thor-e2e-tests.git
1 change: 1 addition & 0 deletions tests/thor-e2e-tests
Submodule thor-e2e-tests added at c33c98