A simple project with 3 microservices all running in the same process for easy debugging (using protobuf as interface but without using gRPC as a transport layer).
HTTP requests are sent to PublicApi then forwarded for execution by VirtualMachine which relies on StateStorage to read/write state. This process involves a single node only.
The project is thoroughly tested with unit tests (100% coverage), component tests per microservice (defining its spec), E2E tests (defining the full system spec) and E2E stress tests (running the system under load).
-
Make sure Go is installed (version 1.10 or later).
Verify with
go version -
Make sure Go workspace bin is in your path.
Install with
export PATH=$PATH:`go env GOPATH`/binVerify with
echo $PATH -
Make sure Git is installed (version 2 or later).
Verify with
git --version
-
Make sure Ginkgo is installed.
Install with
go get github.com/onsi/ginkgo/ginkgoVerify with
ginkgo version
- Clone the repo to your Go workspace:
cd `go env GOPATH`
go get github.com/orbs-network/go-scaffold
cd src/github.com/orbs-network/go-scaffold
git checkout master
-
Install dependencies with
go get -t ./... -
Build with
go install
- To run the pre-built binary (should be in path):
go-scaffold
- To rebuild from source and run (this will take you to project root):
cd `go env GOPATH`
cd src/github.com/orbs-network/go-scaffold
go run *.go
-
Run all tests from project root with
ginkgo ./... -
Run everything except stress with
ginkgo --skip=Stress ./... -
Another alternative runner with minimal UI and result caching:
-
Run all tests with
go test ./...Note: E2E is flaky here for some reason
-
Run everything except stress with
go test -short ./...
-
-
Check unit test coverage with:
go test -cover `go list ./... | grep -v /stress | grep -v /spec | grep -v /types/`
End to end tests (server only) checking compliance to spec
- Run the suite from project root with
ginkgo -v ./e2e/spec/
End to end tests (server only) under extreme random load
- Run the suite from project root with
ginkgo -v ./e2e/stress/
Component test checking a single service compliance to spec
-
For StateStorage, run the suite from project root with
ginkgo -v ./services/statestorage/spec -
For VirtualMachine, run the suite from project root with
ginkgo -v ./services/virtualmachine/spec -
For PublicApi, run the suite from project root with
ginkgo -v ./services/publicapi/spec