93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package client_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.veillax.com/Veillax/hhctl/client"
|
|
"git.veillax.com/Veillax/hhctl/internal/fakehh"
|
|
)
|
|
|
|
func TestResourcesRoundTrip(t *testing.T) {
|
|
fs := fakehh.New()
|
|
defer fs.Close()
|
|
c := client.New(fs.URL, fakehh.ServerKey, "")
|
|
if err := c.ResolveOrg(); err != nil || c.Org != fakehh.OrgID {
|
|
t.Fatalf("resolve org: %q %v", c.Org, err)
|
|
}
|
|
|
|
edge, err := c.CreateEdge(client.Edge{Name: "fra", TunnelAddr: "1.2.3.4:51820"})
|
|
if err != nil || edge.ID == "" || edge.Token == "" {
|
|
t.Fatalf("create edge: %+v %v", edge, err)
|
|
}
|
|
site, err := c.CreateSite("home", []string{"lab"})
|
|
if err != nil || site.Token == "" {
|
|
t.Fatalf("create site: %+v %v", site, err)
|
|
}
|
|
got, err := c.GetSite(site.ID)
|
|
if err != nil || got.Name != "home" || len(got.Tags) != 1 {
|
|
t.Fatalf("get site: %+v %v", got, err)
|
|
}
|
|
if err := c.UpdateSite(site.ID, "house", nil); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got, _ = c.GetSite(site.ID); got.Name != "house" {
|
|
t.Fatalf("rename: %+v", got)
|
|
}
|
|
|
|
port, err := c.CreatePort(client.Port{Name: "web", Proto: "https", EdgeID: edge.ID, Port: 443, Hostname: "a.example.com", Enabled: true,
|
|
Targets: []client.Target{{SiteID: site.ID, Host: "10.0.0.2", Port: 80}}})
|
|
if err != nil || port.ID == "" {
|
|
t.Fatalf("create port: %+v %v", port, err)
|
|
}
|
|
port.Enabled = false
|
|
if _, err := c.UpdatePort(*port); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if p, _ := c.GetPort(port.ID); p.Enabled || p.Targets[0].Host != "10.0.0.2" {
|
|
t.Fatalf("update port: %+v", p)
|
|
}
|
|
|
|
dom, err := c.CreateDomain(client.Domain{Name: "example.com", EdgeID: edge.ID})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
id, err := c.CreateChannel(false, client.Channel{Name: "ops", Kind: "email", Target: "ops@example.com", Enabled: true})
|
|
if err != nil || id == "" {
|
|
t.Fatalf("channel id: %q %v", id, err)
|
|
}
|
|
al, err := c.Alerts(false)
|
|
if err != nil || len(al.Channels) != 1 {
|
|
t.Fatalf("alerts: %+v %v", al, err)
|
|
}
|
|
|
|
for _, del := range []func() error{
|
|
func() error { return c.DeleteChannel(false, id) },
|
|
func() error { return c.DeleteDomain(dom.ID) },
|
|
func() error { return c.DeletePort(port.ID) },
|
|
func() error { return c.DeleteSite(site.ID) },
|
|
func() error { return c.DeleteEdge(edge.ID) },
|
|
} {
|
|
if err := del(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if _, err := c.GetSite(site.ID); !client.IsNotFound(err) {
|
|
t.Fatalf("want not found, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestBadKeyAndOrgScope(t *testing.T) {
|
|
fs := fakehh.New()
|
|
defer fs.Close()
|
|
if _, err := client.New(fs.URL, "nope", fakehh.OrgID).Sites(); err == nil {
|
|
t.Fatal("bad key accepted")
|
|
}
|
|
c := client.New(fs.URL, fakehh.OrgKey, "")
|
|
if _, err := c.Sites(); err == nil {
|
|
t.Fatal("expected an error without an org")
|
|
}
|
|
if _, err := c.CreateEdge(client.Edge{Name: "x", TunnelAddr: "a:1"}); err == nil {
|
|
t.Fatal("org key must not create edges")
|
|
}
|
|
}
|