From 35452ecd3ae2d34dea2f8ba83a5f9ec5e62d6112 Mon Sep 17 00:00:00 2001 From: Harsh Thakur Date: Wed, 3 Jul 2024 12:15:47 +0530 Subject: [PATCH] connect/disconnect region endpoints Signed-off-by: Harsh Thakur --- fake_client.go | 12 ++++++++++++ region.go | 28 ++++++++++++++++++++++++++++ region_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/fake_client.go b/fake_client.go index ee3ce7d..3776cac 100644 --- a/fake_client.go +++ b/fake_client.go @@ -126,6 +126,8 @@ type Clienter interface { // Regions ListRegions() ([]Region, error) CreateRegion(r *CreateRegionRequest) (*Region, error) + ConnectRegion(r *ConnectRegionRequest) error + DisconnectRegion(r *DisconnectRegionRequest) error // Snapshots // CreateSnapshot(name string, r *SnapshotConfig) (*Snapshot, error) @@ -1017,6 +1019,16 @@ func (c *FakeClient) CreateRegion(r *CreateRegionRequest) (*Region, error) { return ®ion, nil } +// ConnectRegion implemented in a fake way for automated tests +func (c *FakeClient) ConnectRegion(r *ConnectRegionRequest) error { + return nil +} + +// DisconnectRegion implemented in a fake way for automated tests +func (c *FakeClient) DisconnectRegion(r *DisconnectRegionRequest) error { + return nil +} + // CreateSnapshot implemented in a fake way for automated tests // func (c *FakeClient) CreateSnapshot(name string, r *SnapshotConfig) (*Snapshot, error) { // snapshot := Snapshot{ diff --git a/region.go b/region.go index 24d39e0..9833b81 100644 --- a/region.go +++ b/region.go @@ -46,6 +46,16 @@ type CreateRegionRequest struct { Features map[string]bool `json:"features" ` } +// DisconnectRegionRequest is the request to disconnect a region +type DisconnectRegionRequest struct { + Code string `json:"code"` +} + +// ConnectRegionRequest is the request to connect a region +type ConnectRegionRequest struct { + Code string `json:"code"` +} + // ListRegions returns all load balancers owned by the calling API account func (c *Client) ListRegions() ([]Region, error) { resp, err := c.SendGetRequest("/v2/regions") @@ -129,3 +139,21 @@ func (c *Client) CreateRegion(r *CreateRegionRequest) (*Region, error) { return ®ion, nil } + +// ConnectRegion connects a region to CivoAPI +func (c *Client) ConnectRegion(r *ConnectRegionRequest) error { + _, err := c.SendPostRequest("/v2/regions/connect", r) + if err != nil { + return decodeError(err) + } + return nil +} + +// DisconnectRegion disconnects a region to CivoAPI +func (c *Client) DisconnectRegion(r *DisconnectRegionRequest) error { + _, err := c.SendPostRequest("/v2/regions/disconnect", r) + if err != nil { + return decodeError(err) + } + return nil +} diff --git a/region_test.go b/region_test.go index d3eb09f..81733be 100644 --- a/region_test.go +++ b/region_test.go @@ -97,3 +97,35 @@ func TestCreateRegion(t *testing.T) { } } + +func TestConnectRegion(t *testing.T) { + client, server, _ := NewClientForTesting(map[string]string{ + "/v2/regions/connect": `{code: "TEST1"}`, + }) + defer server.Close() + + connectRegionRequest := &ConnectRegionRequest{ + Code: "TEST1", + } + + err := client.ConnectRegion(connectRegionRequest) + if err != nil { + t.Errorf("Request returned an error: %s", err) + } +} + +func TestDisconnectRegion(t *testing.T) { + client, server, _ := NewClientForTesting(map[string]string{ + "/v2/regions/disconnect": `{code: "TEST1"}`, + }) + defer server.Close() + + disconnectRegionRequest := &DisconnectRegionRequest{ + Code: "TEST1", + } + + err := client.DisconnectRegion(disconnectRegionRequest) + if err != nil { + t.Errorf("Request returned an error: %s", err) + } +}