feat: add integration tests.
This commit is contained in:
parent
9d778e2d08
commit
fc55e9e731
18
integrationtest/docker-compose.yml
Normal file
18
integrationtest/docker-compose.yml
Normal 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
121
integrationtest/loader.go
Normal 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
42
integrationtest/readme.md
Normal 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
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue
Block a user