feat: add integration tests.

This commit is contained in:
Fernandez Ludovic 2019-04-20 21:30:30 +02:00
parent 9d778e2d08
commit fc55e9e731
3 changed files with 181 additions and 0 deletions

View File

@ -0,0 +1,18 @@
version: '3'
services:
consul-kv:
image: consul
ports:
- "8500:8500"
zookeeper-kv:
image: zookeeper
ports:
- "2181:2181"
etcd-kv:
image: quay.io/coreos/etcd:v3.3.12
command: etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2380
ports:
- "2379:2379"

121
integrationtest/loader.go Normal file
View File

@ -0,0 +1,121 @@
package main
import (
"bytes"
"compress/gzip"
"io/ioutil"
"log"
"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() {
log.SetFlags(log.Lshortfile)
source := "./acme.json"
err := loadData(source)
if err != nil {
log.Fatal(err)
}
}
func loadData(source string) error {
content, err := readFile(source)
if err != nil {
return err
}
// Consul
err = putData(store.CONSUL, []string{"localhost:8500"}, content)
if err != nil {
return err
}
// ETCD v3
err = putData(store.ETCDV3, []string{"localhost:2379"}, content)
if err != nil {
return err
}
// Zookeeper
err = putData(store.ZK, []string{"localhost:2181"}, content)
if err != nil {
return err
}
// BoltDB
err = putData(store.BOLTDB, []string{"/tmp/test-traefik-certs-dumper.db"}, content)
if err != nil {
return err
}
return nil
}
func putData(backend store.Backend, addrs []string, content []byte) error {
storeConfig := &store.Config{
ConnectionTimeout: 3 * time.Second,
Bucket: "traefik",
}
switch backend {
case store.CONSUL:
consul.Register()
case store.ETCDV3:
etcdv3.Register()
case store.ZK:
zookeeper.Register()
case store.BOLTDB:
boltdb.Register()
}
kvStore, err := valkeyrie.NewStore(backend, addrs, storeConfig)
if err != nil {
return err
}
if err := kvStore.Put(storeKey, content, nil); err != nil {
return err
}
log.Printf("Successfully updated %s.\n", backend)
return nil
}
func readFile(source string) ([]byte, error) {
content, err := ioutil.ReadFile(source)
if err != nil {
return nil, err
}
var b bytes.Buffer
gz := gzip.NewWriter(&b)
defer func() {
if errC := gz.Close(); errC != nil {
log.Println(errC)
}
}()
if _, err = gz.Write(content); err != nil {
return nil, err
}
if err = gz.Flush(); err != nil {
return nil, err
}
if err := gz.Close(); err != nil {
return nil, err
}
return b.Bytes(), nil
}

42
integrationtest/readme.md Normal file
View File

@ -0,0 +1,42 @@
# Integration testing
## Preparation
- Create valid ACME file `./acme.json`
- Start backends using docker
```bash
docker-compose -f integrationtest/docker-compose.yml up
```
- Initialize backends
```bash
go run integrationtest/loader.go
```
## Run certs dumper without watching
```bash
# http://localhost:8500/ui/
traefik-certs-dumper kv consul --endpoints localhost:8500
traefik-certs-dumper kv etcd --endpoints localhost:2379
traefik-certs-dumper kv boltdb --endpoints /tmp/test-traefik-certs-dumper.db
traefik-certs-dumper kv zookeeper --endpoints localhost:2181
```
## Run certs dumper with watching
While watching is enabled, run `loader.go` again for KV backends or manipulate `/tmp/acme.json` for file backend that change events are triggered.
```bash
traefik-certs-dumper kv consul --watch --endpoints localhost:8500
traefik-certs-dumper kv etcd --watch --endpoints localhost:2379
traefik-certs-dumper kv zookeeper --watch --endpoints localhost:2181
```