add instructions for integration tests

This commit is contained in:
Stephan Müller 2019-04-20 10:02:37 +02:00
parent 4ff13d9bc2
commit 2febc40f99
No known key found for this signature in database
GPG Key ID: 4650F39E5B5E1894
3 changed files with 147 additions and 0 deletions

1
.gitignore vendored
View File

@ -6,3 +6,4 @@ dumpcerts.sh
acme.json
acme-backup.json
traefik-certs-dumper
tests/tests

35
tests/README.md Normal file
View File

@ -0,0 +1,35 @@
# Integration testing
## Preperation
1. Create valid ACME file `/tmp/acme.json`
1. Start backends using docker
```console
docker run -d -p 8500:8500 --name consul consul
docker run -d -p 2181:2181 --name zookeeper zookeeper
docker run -d -p 2379:2379 --name etcd quay.io/coreos/etcd:v3.3.12 etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2380
```
1. Build tests
```console
export GO111MODULE=on
go build
```
1. Initialize backends
```console
./tests
```
1. Run certs dumper without watching
```console
../traefik-certs-dumper dump --source.file=/tmp/acme.json
../traefik-certs-dumper dump --source consul --source.kv.endpoints=localhost:8500
../traefik-certs-dumper dump --source etcd --source.kv.endpoints=localhost:2379
../traefik-certs-dumper dump --source boltdb --source.kv.endpoints=/tmp/my.db
../traefik-certs-dumper dump --source zookeeper --source.kv.endpoints=localhost:2181
```
1. Run certs dumper with watching
```console
../traefik-certs-dumper dump --watch --source.file=/tmp/acme.json
../traefik-certs-dumper dump --watch --source consul --source.kv.endpoints=localhost:8500
../traefik-certs-dumper dump --watch --source etcd --source.kv.endpoints=localhost:2379
../traefik-certs-dumper dump --watch --source zookeeper --source.kv.endpoints=localhost:2181
```
While watching is enabled, run `./tests` again for KV backends or manipulate `/tmp/acme.json` for file backend that change events are triggered.

111
tests/test.go Normal file
View File

@ -0,0 +1,111 @@
package main
import (
"bufio"
"bytes"
"compress/gzip"
"fmt"
"io/ioutil"
"os"
"time"
"github.com/abronan/valkeyrie"
"github.com/abronan/valkeyrie/store"
"github.com/abronan/valkeyrie/store/boltdb"
"github.com/abronan/valkeyrie/store/consul"
etcdv3 "github.com/abronan/valkeyrie/store/etcd/v3"
"github.com/abronan/valkeyrie/store/zookeeper"
)
const (
storeKey = "traefik/acme/account/object"
)
func main() {
writeDataToBackends()
}
func writeDataToBackends() {
storeConfig := &store.Config{
ConnectionTimeout: 3 * time.Second,
Bucket: "traefik",
}
consul.Register()
etcdv3.Register()
zookeeper.Register()
boltdb.Register()
consulStore, err := valkeyrie.NewStore(
store.CONSUL,
[]string{"localhost:8500"},
storeConfig,
)
if err != nil {
fmt.Println(err)
return
}
etcdv3Store, err := valkeyrie.NewStore(
store.ETCDV3,
[]string{"localhost:2379"},
storeConfig,
)
if err != nil {
fmt.Println(err)
return
}
zkStore, err := valkeyrie.NewStore(
store.ZK,
[]string{"localhost:2181"},
storeConfig,
)
if err != nil {
fmt.Println(err)
return
}
boltdbStore, err := valkeyrie.NewStore(
store.BOLTDB,
[]string{"/tmp/my.db"},
storeConfig,
)
if err != nil {
fmt.Println(err)
return
}
f, _ := os.Open("/tmp/acme.json")
reader := bufio.NewReader(f)
content, _ := ioutil.ReadAll(reader)
var b bytes.Buffer
gz := gzip.NewWriter(&b)
_, err = gz.Write(content)
if err != nil {
return
}
if err = gz.Flush(); err != nil {
return
}
if err = gz.Close(); err != nil {
return
}
if err := boltdbStore.Put(storeKey, b.Bytes(), nil); err == nil {
fmt.Println("successfully updated boltdb")
}
if err := zkStore.Put(storeKey, b.Bytes(), nil); err == nil {
fmt.Println("successfully updated zookeeper")
}
if err := etcdv3Store.Put(storeKey, b.Bytes(), nil); err == nil {
fmt.Println("successfully updated etcd")
}
if err := consulStore.Put(storeKey, b.Bytes(), nil); err == nil {
fmt.Println("successfully updated consul")
}
}