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 #657

Closed
Closed
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
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
49 changes: 48 additions & 1 deletion .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 Down Expand Up @@ -62,3 +63,49 @@ current development landscape.

- 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
```
2 changes: 1 addition & 1 deletion .github/workflows/test-docker-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Build and push
- name: Test Build
uses: docker/build-push-action@v4
with:
context: .
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/test-e2e-results.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: 'E2E Test Report'

on:
workflow_run:
workflows: ['E2E Tests']
types:
- completed

permissions:
contents: read
actions: read
checks: write

jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: dorny/test-reporter@v1
id: test-reporter
with:
artifact: test-results
name: E2E Test Report
path: '*.xml'
reporter: jest-junit

- name: Echo Report URL
run: |
echo ${{steps.test-reporter.outputs.url_html}}
79 changes: 79 additions & 0 deletions .github/workflows/test-e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
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

- uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: e2e-test-results
path: ./tests/thor-e2e-tests/junit.xml
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