etcdb/e2e/e2e.go
2022-12-05 11:12:52 +01:00

74 lines
1.4 KiB
Go

package main
import (
"context"
"flag"
"log"
"novit.tech/go/etcdb"
"novit.tech/go/etcdb/leader"
)
var (
Normal = etcdb.ClientSpec{
URLs: "http://127.0.0.1:2379",
Prefix: "etcdbl/",
}
Secure = etcdb.ClientSpec{
URLs: "http://127.0.0.1:2379",
Prefix: "etcdbs/",
}
data = etcdb.Encrypted(Secure.Sub("encset/"))
myInt = etcdb.SingletonSpec[int]{Spec: data, Key: "my-int"}
myStrings = etcdb.SetSpec[string]{Spec: data.Sub("my-strings")}
data2 = etcdb.Encrypted(Secure.Sub("encset/"))
myStrings2 = etcdb.SetSpec[string]{Spec: data2.Sub("my-strings")}
myLeader = leader.Spec{
Etcd: &Normal,
Election: "my-leader",
OnLeader: onLeader,
}
)
func main() {
flag.Parse()
Normal.MustConnect()
Secure.MustConnect()
myLeader.RunProcess()
}
func onLeader(ctx context.Context) {
if err := data.Unlock(ctx, []byte("uifee6ooB")); err != nil {
log.Print("failed to unlock: ", err)
}
data.AddKey(ctx, []byte("xish1yaiG"))
if err := data2.Unlock(ctx, []byte("xish1yaiG")); err != nil {
log.Print("failed to unlock 2nd set: ", err)
}
v := "value"
if true {
d1 := myStrings.In(ctx)
err := d1.Put("key", v)
log.Printf("d1[key] => err=%v %q", err, v)
}
if true {
d2 := myStrings2.In(ctx)
v, ok, err := d2.Get("key")
log.Printf("d2[key] => ok=%v err=%v value=%q", ok, err, v)
}
<-ctx.Done()
log.Print("leader context done")
}