This repository uses git-lfs
for test data artifacts, among other things; you'll need to install it:
# Ubuntu
apt-get install git-lfs
# macOS
brew install git-lfs
# Archlinux
pacman -S git-lfs
# Windows
Download from https://git-lfs.github.com/
Next, clone the cachecash repo:
git clone git@github.com:cachecashproject/go-cachecash.git "$(go env GOPATH)/src/github.com/cachecashproject/go-cachecash"
And initialize git-lfs in that repo:
cd "$(go env GOPATH)/src/github.com/cachecashproject/go-cachecash"
git lfs install
git lfs fetch
git lfs checkout
The easiest way to get cachecash up and running is starting the test network with docker-compose. The first step is creating required secrets according to the template files. Then you can build all images:
docker-compose build
Next, bring up the network:
docker-compose up
It's going to take 1-2 minutes until everything is initialized, this includes the postgres initialization, the caches
announcing themselves to the bootstrap service, the publisher requesting a list of all caches from the bootstrap service
and finally the publisher and the caches negotiating an escrow, and a distributed tracing backend store. After the escrow
is setup you can download from the caches using cachecash-curl
or typescript-cachecash:
In this case we're going to use the cachecash-curl
program at this publisher to see it fetch data. The resulting file
(here, output.bin
) should exactly match the original artifact (here, testdata/content/file0.bin
).
The -logLevel
option can be changed to control output verbosity for each program.
make cachecash-curl && ./bin/cachecash-curl -o output.bin -logLevel=debug -trace http://localhost:14268 cachecash://localhost:7070/file0.bin
diff output.bin testdata/content/file0.bin
You will need a working Go toolchain. We tend to stay on the latest stable version.
You will also need some extra code generation tools:
make dev-setup
To generate source from proto files:
make gen
To generate documentation from the proto files:
make gen-docs
To get the base image we use for building our software, type make pull-base-image
to receive it. It will be used for all operations around
building and running the software in our development environment.
To build the image yourself:
$ make base-image
If you have write access to our repositories on docker hub, you can also push an updated image:
$ make push-base-image
This is recommended whenever your changes land in the master
branch, but
not before then.
# Remove cached results. (Should not normally be necessary, but can be useful while working on the test suite.)
go clean -testcache
# Run unit and integration tests that do not have external dependencies.
go test -v -race ./...
To run tests that use postgres, you must launch it first; you can use this command to launch your postgres container:
docker run --name db-hostname -p 5432:5432 -d -e POSTGRES_DB=dbname postgres:11
# Run a test that has external dependencies, including those automatically
# generated by the ORM system.
PSQL_USER=postgres PSQL_SSLMODE=disable PSQL_HOST=localhost PSQL_DBNAME=dbname \
go test -v -race -tags="external_test sqlboiler_test" ./path/to/test/...
CACHECASH_INSECURE can be set for any binary to disable TLS checking against the bootstrap/publisher/observability endpoints. Protocol cryptography is still secure.
There are fuzzing targets that can be used with go-fuzz.
# install dependencies
go get -u github.com/dvyukov/go-fuzz/go-fuzz github.com/dvyukov/go-fuzz/go-fuzz-build
# start fuzzing
make fuzz