diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..85376b5eb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +tests +README.md +thorest.png +CODE_OF_CONDUCT.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 653615891..7c11002f0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -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: @@ -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 +``` diff --git a/.github/workflows/test-e2e.yaml b/.github/workflows/test-e2e.yaml new file mode 100644 index 000000000..b9151fabf --- /dev/null +++ b/.github/workflows/test-e2e.yaml @@ -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}} diff --git a/.gitmodules b/.gitmodules index e69de29bb..3441a15eb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tests/thor-e2e-tests"] + path = tests/thor-e2e-tests + url = https://github.com/vechain/thor-e2e-tests.git diff --git a/tests/thor-e2e-tests b/tests/thor-e2e-tests new file mode 160000 index 000000000..c33c98529 --- /dev/null +++ b/tests/thor-e2e-tests @@ -0,0 +1 @@ +Subproject commit c33c985298bb70406cdacbd51fce80e6dd50c3d7