Skip to content

Commit

Permalink
change chainlink-env to env package and adjust all usages
Browse files Browse the repository at this point in the history
  • Loading branch information
Tofel committed Oct 24, 2023
1 parent 3fdf6ef commit 55049e8
Show file tree
Hide file tree
Showing 161 changed files with 504 additions and 1,586 deletions.
31 changes: 18 additions & 13 deletions env/.github/workflows/e2e.yaml → .github/workflows/env-e2e.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
name: Deployments tests (E2E)
name: (k8s package) E2E tests
on:
pull_request:
paths:
- "k8s/**"

concurrency:
group: e2e-tests-chainlink-env-${{ github.ref }}
cancel-in-progress: true

env:
INTERNAL_DOCKER_REPO: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com
ENV_JOB_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-env-tests:ci.${{ github.sha }}
ENV_JOB_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-testing-framework-tests:ci.${{ github.sha }}
BASE_IMAGE_NAME: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/test-base-image:ci.${{ github.sha }}
CHAINLINK_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink
CHAINLINK_VERSION: develop
Expand All @@ -30,29 +32,32 @@ jobs:
uses: smartcontractkit/chainlink-github-actions/docker/build-push@ce87f8986ca18336cc5015df75916c2ec0a7c4b3 # v2.1.2
with:
tags: ${{ env.BASE_IMAGE_NAME }}
file: Dockerfile.base
file: k8s/Dockerfile.base
AWS_REGION: ${{ secrets.QA_AWS_REGION }}
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
- name: Base Image Built
run: |
echo "### chainlink image used for this test run :link:" >>$GITHUB_STEP_SUMMARY
echo "\`${{ env.CHAINLINK_VERSION }}\`" >>$GITHUB_STEP_SUMMARY
echo "### test-base-image image tag for this test run :ship:" >>$GITHUB_STEP_SUMMARY
echo "\`ci.${{ github.sha }}\`" >>$GITHUB_STEP_SUMMARY
# shellcheck disable=SC2086
cat <<EOT >>$GITHUB_STEP_SUMMARY
### chainlink image tag used for this test run :link: => \`${{ env.CHAINLINK_VERSION }}\`
### test-base-image image tag for this test run :ship: => \`ci.${{ github.sha }}\`
EOT
- name: Build Test Runner
uses: smartcontractkit/chainlink-github-actions/docker/build-push@ce87f8986ca18336cc5015df75916c2ec0a7c4b3 # v2.1.2
with:
tags: ${{ env.ENV_JOB_IMAGE }}
file: Dockerfile
file: k8s/Dockerfile
build-args: |
BASE_IMAGE=${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/test-base-image
IMAGE_VERSION=ci.${{ github.sha }}
AWS_REGION: ${{ secrets.QA_AWS_REGION }}
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
- name: Test Image Built
run: |
echo "### chainlink-env-tests image tag for this test run :ship:" >>$GITHUB_STEP_SUMMARY
echo "\`ci.${{ github.sha }}\`" >>$GITHUB_STEP_SUMMARY
# shellcheck disable=SC2086
cat <<EOT >>$GITHUB_STEP_SUMMARY
### chainlink-testing-framework-tests image tag for this test run :ship: -> \`ci.${{ github.sha }}\`
EOT
e2e_tests:
runs-on: ubuntu-latest
environment: integration
Expand All @@ -68,7 +73,7 @@ jobs:
with:
cl_repo: ${{ env.CHAINLINK_IMAGE }}
cl_image_tag: ${{ env.CHAINLINK_VERSION }}
test_command_to_run: unset ENV_JOB_IMAGE && make test_e2e_ci
test_command_to_run: unset ENV_JOB_IMAGE && cd k8s && make test_e2e_ci
test_download_vendor_packages_command: go mod download
artifacts_location: ./e2e/logs
publish_check_name: E2E Test Results
Expand Down Expand Up @@ -101,9 +106,9 @@ jobs:
with:
cl_repo: ${{ env.CHAINLINK_IMAGE }}
cl_image_tag: ${{ env.CHAINLINK_VERSION }}
test_command_to_run: make test_e2e_ci_remote_runner
test_command_to_run: cd k8s && make test_e2e_ci_remote_runner
test_download_vendor_packages_command: go mod download
artifacts_location: ./e2e/logs
artifacts_location: ./k8s/logs
publish_check_name: E2E Remote Runner Test Results
token: ${{ secrets.GITHUB_TOKEN }}
go_mod_path: go.mod
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
name: Publish Test Base Image
name: (k8s package) Publish Test Base Image
on:
push:
tags:
- 'v*'
paths:
- "k8s/**"

jobs:
publish_test_base_image:
if: ${{ false }}
runs-on: ubuntu-latest
environment: integration
permissions:
Expand All @@ -19,6 +22,6 @@ jobs:
uses: smartcontractkit/chainlink-github-actions/docker/build-push@cb4a8f51d77cbf77ea6a765bd1f437ffc7a18730 # v2.0.28
with:
tags: ${{ env.BASE_IMAGE_TAG }}
file: Dockerfile.base
file: k8s/Dockerfile.base
AWS_REGION: ${{ secrets.QA_AWS_REGION }}
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
2 changes: 1 addition & 1 deletion .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Linting and SonarQube Analysis
name: (all packages) Lints
on:
push:
branches:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/static-analysis.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Static Analysis
name: (all packages) Static Analysis
on:
push:
branches: [main]
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Tests
name: (all packages) Unit tests
on:
push:
tags:
Expand Down Expand Up @@ -29,7 +29,9 @@ jobs:
PATH=$PATH:$(go env GOPATH)/bin
export PATH
set -euo pipefail
go test -json -cover -covermode=count -coverprofile=unit-test-coverage.out ./... 2>&1 | tee /tmp/gotest.log | gotestfmt
# disabled, because we want to use a multiline output of go list command
# shellcheck disable=SC2046
go test -json -cover -covermode=count -coverprofile=unit-test-coverage.out $(go list ./... | grep -v /k8s/e2e/ | grep -v /k8s/examples/) 2>&1 | tee /tmp/gotest.log | gotestfmt
- name: Code Coverage
uses: codecov/codecov-action@v3
with:
Expand Down
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,14 @@ docs/Gemfile.lock
dist/

**/remote_runner_config.yaml
logs/
logs/

env/cmd/chaos
env/bin/
# temp manifest for deployment and validation
tmp-manifest-*.yaml
# remote runner binary
remote.test
e2e.test

k3dvolume/
2 changes: 2 additions & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ run:
timeout: 5m
skip-dirs:
- contracts/ethereum
- examples
- imports
linters:
enable:
# defaults
Expand Down
5 changes: 4 additions & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
golang 1.21.3
nodejs 14.20.0
k3d 5.4.6
k3d 5.5.1
act 0.2.30
golangci-lint 1.54.2
actionlint 1.6.17
shellcheck 0.9.0
helm 3.10.3
kubectl 1.25.5
yarn 1.22.19
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ compile_contracts:
python3 ./utils/compile_contracts.py

test_unit: install_gotestfmt
go test -json -cover -covermode=count -coverprofile=unit-test-coverage.out ./client ./gauntlet ./testreporters ./docker/test_env 2>&1 | tee /tmp/gotest.log | gotestfmt
go test -json -cover -covermode=count -coverprofile=unit-test-coverage.out ./client ./gauntlet ./testreporters ./docker/test_env ./k8s/config 2>&1 | tee /tmp/gotest.log | gotestfmt
55 changes: 54 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,59 @@

</div>

The Chainlink Testing Framework is a blockchain development framework written in Go. Its primary purpose is to help chainlink developers create extensive integration, e2e, performance, and chaos tests to ensure the stability of the chainlink project. It can also be helpful to those who just want to use chainlink oracles in their projects to help test their contracts, or even for those that aren't using chainlink. This project makes ample use of the [chainlink-env](https://github.com/smartcontractkit/chainlink-env) package to launch resources and testing apparatus.
The Chainlink Testing Framework is a blockchain development framework written in Go. Its primary purpose is to help chainlink developers create extensive integration, e2e, performance, and chaos tests to ensure the stability of the chainlink project. It can also be helpful to those who just want to use chainlink oracles in their projects to help test their contracts, or even for those that aren't using chainlink.

If you're looking to implement a new chain integration for the testing framework, head over to the [blockchain](./blockchain/) directory for more info.

## k8s package
We have a k8s package we are using in tests, it provides:
- [cdk8s](https://cdk8s.io/) based wrappers
- High-level k8s API
- Automatic port forwarding

You can also use this package to spin up standalone environments.

### Local k8s cluster
Read [here](./k8s/KUBERNETES.md) about how to spin up a local cluster

#### Install
Set up deps, you need to have `node 14.x.x`, [helm](https://helm.sh/docs/intro/install/) and [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable)

Then use
```shell
make install_deps
```

### Running tests in k8s
To read how to run a test in k8s, read [here](./k8s/REMOTE_RUN.md)

### Usage
Create an env in a separate file and run it
```
export CHAINLINK_IMAGE="public.ecr.aws/chainlink/chainlink"
export CHAINLINK_TAG="1.4.0-root"
export CHAINLINK_ENV_USER="Satoshi"
go run k8s/examples/simple/env.go
```
For more features follow [tutorial](./k8s/TUTORIAL.md)

### Development
#### Running standalone example environment
```shell
go run k8s/examples/simple/env.go
```
If you have another env of that type, you can connect by overriding environment name
```
ENV_NAMESPACE="..." go run k8s/examples/chainlink/env.go
```

Add more presets [here](./k8s/presets)

Add more programmatic examples [here](./k8s/examples/)

If you have [chaosmesh]() installed in your cluster you can pull and generated CRD in go like that
```
make chaosmesh
```

If you need to check your system tests coverage, use [that](./k8s/TUTORIAL.md#coverage)
2 changes: 1 addition & 1 deletion blockchain/ethereum.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"go.uber.org/atomic"
"golang.org/x/sync/errgroup"

"github.com/smartcontractkit/chainlink-env/environment"
"github.com/smartcontractkit/chainlink-testing-framework/k8s/environment"

"github.com/smartcontractkit/chainlink-testing-framework/utils"
)
Expand Down
6 changes: 3 additions & 3 deletions client/mockserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import (
"strings"

"github.com/go-resty/resty/v2"

"github.com/rs/zerolog/log"
"github.com/smartcontractkit/chainlink-env/environment"
"github.com/smartcontractkit/chainlink-env/pkg/helm/mockserver"

"github.com/smartcontractkit/chainlink-testing-framework/k8s/environment"
"github.com/smartcontractkit/chainlink-testing-framework/k8s/pkg/helm/mockserver"
)

// MockserverClient mockserver client
Expand Down
4 changes: 2 additions & 2 deletions client/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import (
"strings"

"github.com/jmoiron/sqlx"
"github.com/smartcontractkit/chainlink-env/environment"

// import for side effect of sql packages
_ "github.com/lib/pq"
"github.com/rs/zerolog/log"

"github.com/smartcontractkit/chainlink-testing-framework/k8s/environment"
)

// PostgresConnector sqlx postgres connector
Expand Down
1 change: 0 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,5 @@ Here you'll find some guidelines on writing blockchain tests using this framewor

Some notable packages we use include:

* [chainlink-env](https://github.com/smartcontractkit/chainlink-env)
* [zerolog](https://github.com/rs/zerolog)
* [Kubernetes](https://github.com/kubernetes/kubernetes)
6 changes: 3 additions & 3 deletions docs/setup/code.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ parent: Setup

# Test Setup Code

Now that we've got our config and Kubernetes sorted, we can write a bit of code that will deploy an environment for our test to run. To deploy our simulated geth, mock-server, and Chainlink instances, we rely on another chainlink library, [chainlink-env](https://github.com/smartcontractkit/chainlink-env/). This library handles deploying everything our test needs to the Kubernetes cluster.
Now that we've got our config and Kubernetes sorted, we can write a bit of code that will deploy an environment for our test to run. To deploy our simulated geth, mock-server, and Chainlink instances, we rely on `env` package. This package handles deploying everything our test needs to the Kubernetes cluster.

```go
// We use the chainlink-env library to make and handle deployed resources
import "github.com/smartcontractkit/chainlink-env/environment"
// We use the env package to make and handle deployed resources
import "github.com/smartcontractkit/chainlink-testing-framework/k8s/environment"

// Deploy a testing environment, and receive it as the `env` variable. This is used to connect to resources.
e = environment.New(nil)
Expand Down
12 changes: 0 additions & 12 deletions env/.github/dependabot.yml

This file was deleted.

15 changes: 0 additions & 15 deletions env/.github/workflows/go_test.yaml

This file was deleted.

Loading

0 comments on commit 55049e8

Please sign in to comment.