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") } }