Skip to content

Commit

Permalink
reserved IPs: Expose project_id and locked attributes. (#552)
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewsomething authored Sep 16, 2022
1 parent dca9844 commit 2b00f1c
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 24 deletions.
9 changes: 6 additions & 3 deletions floating_ips.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ var _ FloatingIPsService = &FloatingIPsServiceOp{}

// FloatingIP represents a Digital Ocean floating IP.
type FloatingIP struct {
Region *Region `json:"region"`
Droplet *Droplet `json:"droplet"`
IP string `json:"ip"`
Region *Region `json:"region"`
Droplet *Droplet `json:"droplet"`
IP string `json:"ip"`
ProjectID string `json:"project_id"`
Locked bool `json:"locked"`
}

func (f FloatingIP) String() string {
Expand Down Expand Up @@ -59,6 +61,7 @@ type floatingIPRoot struct {
type FloatingIPCreateRequest struct {
Region string `json:"region,omitempty"`
DropletID int `json:"droplet_id,omitempty"`
ProjectID string `json:"project_id"`
}

// List all floating IPs.
Expand Down
29 changes: 20 additions & 9 deletions floating_ips_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ func TestFloatingIPs_ListFloatingIPs(t *testing.T) {

mux.HandleFunc("/v2/floating_ips", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"floating_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}],"meta":{"total":2}}`)
fmt.Fprint(w, `{"floating_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"meta":{"total":2}
}`)
})

floatingIPs, resp, err := client.FloatingIPs.List(ctx, nil)
Expand All @@ -23,8 +27,8 @@ func TestFloatingIPs_ListFloatingIPs(t *testing.T) {
}

expectedFloatingIPs := []FloatingIP{
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 2}, IP: "192.168.0.2"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 2}, IP: "192.168.0.2", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"},
}
if !reflect.DeepEqual(floatingIPs, expectedFloatingIPs) {
t.Errorf("FloatingIPs.List returned floating IPs %+v, expected %+v", floatingIPs, expectedFloatingIPs)
Expand All @@ -44,7 +48,11 @@ func TestFloatingIPs_ListFloatingIPsMultiplePages(t *testing.T) {

mux.HandleFunc("/v2/floating_ips", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"floating_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}], "links":{"pages":{"next":"http://example.com/v2/floating_ips/?page=2"}}}`)
fmt.Fprint(w, `{"floating_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"links":{"pages":{"next":"http://example.com/v2/floating_ips/?page=2"}}}
`)
})

_, resp, err := client.FloatingIPs.List(ctx, nil)
Expand All @@ -61,7 +69,9 @@ func TestFloatingIPs_RetrievePageByNumber(t *testing.T) {

jBlob := `
{
"floating_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}],
"floating_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"links":{
"pages":{
"next":"http://example.com/v2/floating_ips/?page=3",
Expand Down Expand Up @@ -92,15 +102,15 @@ func TestFloatingIPs_Get(t *testing.T) {

mux.HandleFunc("/v2/floating_ips/192.168.0.1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"floating_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"}}`)
fmt.Fprint(w, `{"floating_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}}`)
})

floatingIP, _, err := client.FloatingIPs.Get(ctx, "192.168.0.1")
if err != nil {
t.Errorf("domain.Get returned error: %v", err)
}

expected := &FloatingIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"}
expected := &FloatingIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"}
if !reflect.DeepEqual(floatingIP, expected) {
t.Errorf("FloatingIPs.Get returned %+v, expected %+v", floatingIP, expected)
}
Expand All @@ -113,6 +123,7 @@ func TestFloatingIPs_Create(t *testing.T) {
createRequest := &FloatingIPCreateRequest{
Region: "nyc3",
DropletID: 1,
ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032",
}

mux.HandleFunc("/v2/floating_ips", func(w http.ResponseWriter, r *http.Request) {
Expand All @@ -127,15 +138,15 @@ func TestFloatingIPs_Create(t *testing.T) {
t.Errorf("Request body = %+v, expected %+v", v, createRequest)
}

fmt.Fprint(w, `{"floating_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"}}`)
fmt.Fprint(w, `{"floating_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}}`)
})

floatingIP, _, err := client.FloatingIPs.Create(ctx, createRequest)
if err != nil {
t.Errorf("FloatingIPs.Create returned error: %v", err)
}

expected := &FloatingIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"}
expected := &FloatingIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"}
if !reflect.DeepEqual(floatingIP, expected) {
t.Errorf("FloatingIPs.Create returned %+v, expected %+v", floatingIP, expected)
}
Expand Down
9 changes: 6 additions & 3 deletions reserved_ips.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ var _ ReservedIPsService = &ReservedIPsServiceOp{}

// ReservedIP represents a Digital Ocean reserved IP.
type ReservedIP struct {
Region *Region `json:"region"`
Droplet *Droplet `json:"droplet"`
IP string `json:"ip"`
Region *Region `json:"region"`
Droplet *Droplet `json:"droplet"`
IP string `json:"ip"`
ProjectID string `json:"project_id"`
Locked bool `json:"locked"`
}

func (f ReservedIP) String() string {
Expand Down Expand Up @@ -60,6 +62,7 @@ type reservedIPRoot struct {
type ReservedIPCreateRequest struct {
Region string `json:"region,omitempty"`
DropletID int `json:"droplet_id,omitempty"`
ProjectID string `json:"project_id"`
}

// List all reserved IPs.
Expand Down
29 changes: 20 additions & 9 deletions reserved_ips_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ func TestReservedIPs_ListReservedIPs(t *testing.T) {

mux.HandleFunc("/v2/reserved_ips", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"reserved_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}],"meta":{"total":2}}`)
fmt.Fprint(w, `{"reserved_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"meta":{"total":2}
}`)
})

reservedIPs, resp, err := client.ReservedIPs.List(ctx, nil)
Expand All @@ -23,8 +27,8 @@ func TestReservedIPs_ListReservedIPs(t *testing.T) {
}

expectedReservedIPs := []ReservedIP{
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 2}, IP: "192.168.0.2"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"},
{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 2}, IP: "192.168.0.2", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"},
}
if !reflect.DeepEqual(reservedIPs, expectedReservedIPs) {
t.Errorf("ReservedIPs.List returned reserved IPs %+v, expected %+v", reservedIPs, expectedReservedIPs)
Expand All @@ -44,7 +48,11 @@ func TestReservedIPs_ListReservedIPsMultiplePages(t *testing.T) {

mux.HandleFunc("/v2/reserved_ips", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"reserved_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}], "links":{"pages":{"next":"http://example.com/v2/reserved_ips/?page=2"}}}`)
fmt.Fprint(w, `{"reserved_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"links":{"pages":{"next":"http://example.com/v2/reserved_ips/?page=2"}}}
`)
})

_, resp, err := client.ReservedIPs.List(ctx, nil)
Expand All @@ -61,7 +69,9 @@ func TestReservedIPs_RetrievePageByNumber(t *testing.T) {

jBlob := `
{
"reserved_ips": [{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"},{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2"}],
"reserved_ips": [
{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false},
{"region":{"slug":"nyc3"},"droplet":{"id":2},"ip":"192.168.0.2","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}],
"links":{
"pages":{
"next":"http://example.com/v2/reserved_ips/?page=3",
Expand Down Expand Up @@ -92,15 +102,15 @@ func TestReservedIPs_Get(t *testing.T) {

mux.HandleFunc("/v2/reserved_ips/192.168.0.1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, `{"reserved_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"}}`)
fmt.Fprint(w, `{"reserved_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}}`)
})

reservedIP, _, err := client.ReservedIPs.Get(ctx, "192.168.0.1")
if err != nil {
t.Errorf("domain.Get returned error: %v", err)
}

expected := &ReservedIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"}
expected := &ReservedIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"}
if !reflect.DeepEqual(reservedIP, expected) {
t.Errorf("ReservedIPs.Get returned %+v, expected %+v", reservedIP, expected)
}
Expand All @@ -113,6 +123,7 @@ func TestReservedIPs_Create(t *testing.T) {
createRequest := &ReservedIPCreateRequest{
Region: "nyc3",
DropletID: 1,
ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032",
}

mux.HandleFunc("/v2/reserved_ips", func(w http.ResponseWriter, r *http.Request) {
Expand All @@ -127,15 +138,15 @@ func TestReservedIPs_Create(t *testing.T) {
t.Errorf("Request body = %+v, expected %+v", v, createRequest)
}

fmt.Fprint(w, `{"reserved_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1"}}`)
fmt.Fprint(w, `{"reserved_ip":{"region":{"slug":"nyc3"},"droplet":{"id":1},"ip":"192.168.0.1","project_id":"46d8977a-35cd-11ed-909f-43c99bbf6032", "locked":false}}`)
})

reservedIP, _, err := client.ReservedIPs.Create(ctx, createRequest)
if err != nil {
t.Errorf("ReservedIPs.Create returned error: %v", err)
}

expected := &ReservedIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1"}
expected := &ReservedIP{Region: &Region{Slug: "nyc3"}, Droplet: &Droplet{ID: 1}, IP: "192.168.0.1", Locked: false, ProjectID: "46d8977a-35cd-11ed-909f-43c99bbf6032"}
if !reflect.DeepEqual(reservedIP, expected) {
t.Errorf("ReservedIPs.Create returned %+v, expected %+v", reservedIP, expected)
}
Expand Down

0 comments on commit 2b00f1c

Please sign in to comment.