Skip to content

Commit 3649f9a

Browse files
authored
feat(network-peering): label support (#200)
1 parent 17c2efa commit 3649f9a

7 files changed

Lines changed: 176 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/)
88
### Added
99
- storage: possibility to control what to do with backups related to the storage that is about to be deleted
1010
- router: label support
11+
- network peering: label support
1112

1213
## Deprecated
1314
- request: `ServerFilter` and `ServerGroupFilter` types will be replaced with `QueryFilter` type in the future

upcloud/network_peering.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type NetworkPeering struct {
5858
Network NetworkPeeringNetwork `json:"network,omitempty"`
5959
PeerNetwork NetworkPeeringNetwork `json:"peer_network,omitempty"`
6060
State NetworkPeeringState `json:"state,omitempty"`
61+
Labels []Label `json:"labels,omitempty"`
6162
}
6263

6364
// UnmarshalJSON is a custom unmarshaller that deals with deeply embedded values.

upcloud/network_peering_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ func TestNetworkPeering(t *testing.T) {
5050
"uuid": "03585987-bf7d-4544-8e9b-5a1b4d74a333"
5151
},
5252
"state": "active",
53-
"uuid": "0f7984bc-5d72-4aaf-b587-90e6a8f32efc"
53+
"uuid": "0f7984bc-5d72-4aaf-b587-90e6a8f32efc",
54+
"labels": [
55+
{
56+
"key": "managedBy",
57+
"value": "upcloud-go-sdk-unit-test"
58+
}
59+
]
5460
}
5561
]
5662
}
@@ -88,6 +94,12 @@ func TestNetworkPeering(t *testing.T) {
8894
},
8995
},
9096
State: NetworkPeeringStateActive,
97+
Labels: []Label{
98+
{
99+
Key: "managedBy",
100+
Value: "upcloud-go-sdk-unit-test",
101+
},
102+
},
91103
}}
92104
assert.Equal(t, want, got)
93105
}

upcloud/request/network_peering.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ import (
99

1010
const networkPeeringBaseURL string = "/network-peering"
1111

12+
type GetNetworkPeeringsRequest struct {
13+
Filters []QueryFilter
14+
}
15+
16+
func (r *GetNetworkPeeringsRequest) RequestURL() string {
17+
if len(r.Filters) == 0 {
18+
return networkPeeringBaseURL
19+
}
20+
21+
return fmt.Sprintf("%s?%s", networkPeeringBaseURL, encodeQueryFilters(r.Filters))
22+
}
23+
1224
type GetNetworkPeeringRequest struct {
1325
UUID string
1426
}
@@ -26,6 +38,7 @@ type CreateNetworkPeeringRequest struct {
2638
ConfiguredStatus upcloud.NetworkPeeringConfiguredStatus `json:"configured_status,omitempty"`
2739
Network NetworkPeeringNetwork `json:"network,omitempty"`
2840
PeerNetwork NetworkPeeringNetwork `json:"peer_network,omitempty"`
41+
Labels []upcloud.Label `json:"labels,omitempty"`
2942
}
3043

3144
func (r *CreateNetworkPeeringRequest) MarshalJSON() ([]byte, error) {
@@ -45,6 +58,7 @@ func (r *CreateNetworkPeeringRequest) RequestURL() string {
4558
type ModifyNetworkPeering struct {
4659
Name string `json:"name,omitempty"`
4760
ConfiguredStatus upcloud.NetworkPeeringConfiguredStatus `json:"configured_status,omitempty"`
61+
Labels *[]upcloud.Label `json:"labels,omitempty"`
4862
}
4963

5064
type ModifyNetworkPeeringRequest struct {

upcloud/request/network_peering_test.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ import (
99
"github.com/stretchr/testify/require"
1010
)
1111

12+
func TestGetNetworkPeeringsRequest(t *testing.T) {
13+
r := GetNetworkPeeringsRequest{}
14+
assert.Equal(t, networkPeeringBaseURL, r.RequestURL())
15+
16+
r = GetNetworkPeeringsRequest{
17+
Filters: []QueryFilter{
18+
FilterLabel{
19+
Label: upcloud.Label{
20+
Key: "color",
21+
Value: "green",
22+
},
23+
},
24+
FilterLabelKey{Key: "size"},
25+
},
26+
}
27+
assert.Equal(t, networkPeeringBaseURL+"?label=color%3Dgreen&label=size", r.RequestURL())
28+
}
29+
1230
func TestGetNetworkPeeringRequest(t *testing.T) {
1331
r := GetNetworkPeeringRequest{"id"}
1432
assert.Equal(t, "/network-peering/id", r.RequestURL())
@@ -44,6 +62,48 @@ func TestCreateNetworkPeeringRequest(t *testing.T) {
4462
`, string(js))
4563
}
4664

65+
func TestCreateNetworkPeeringLabelsRequest(t *testing.T) {
66+
r := CreateNetworkPeeringRequest{
67+
Name: "Peering A->B",
68+
ConfiguredStatus: upcloud.NetworkPeeringConfiguredStatusActive,
69+
Network: NetworkPeeringNetwork{
70+
UUID: "03126dc1-a69f-4bc2-8b24-e31c22d64712",
71+
},
72+
PeerNetwork: NetworkPeeringNetwork{
73+
UUID: "03585987-bf7d-4544-8e9b-5a1b4d74a333",
74+
},
75+
Labels: []upcloud.Label{
76+
{
77+
Key: "managedBy",
78+
Value: "upcloud-go-sdk-unit-test",
79+
},
80+
},
81+
}
82+
assert.Equal(t, "/network-peering", r.RequestURL())
83+
js, err := json.Marshal(&r)
84+
require.NoError(t, err)
85+
assert.JSONEq(t, `
86+
{
87+
"network_peering": {
88+
"configured_status": "active",
89+
"name": "Peering A->B",
90+
"network": {
91+
"uuid": "03126dc1-a69f-4bc2-8b24-e31c22d64712"
92+
},
93+
"peer_network": {
94+
"uuid": "03585987-bf7d-4544-8e9b-5a1b4d74a333"
95+
},
96+
"labels": [
97+
{
98+
"key": "managedBy",
99+
"value": "upcloud-go-sdk-unit-test"
100+
}
101+
]
102+
}
103+
}
104+
`, string(js))
105+
}
106+
47107
func TestModifyNetworkPeeringRequest(t *testing.T) {
48108
r := ModifyNetworkPeeringRequest{
49109
UUID: "id",
@@ -97,6 +157,43 @@ func TestModifyNetworkPeeringRequest(t *testing.T) {
97157
`, string(js))
98158
}
99159

160+
func TestModifyNetworkPeeringLabelsRequest(t *testing.T) {
161+
r := ModifyNetworkPeeringRequest{
162+
UUID: "id",
163+
NetworkPeering: ModifyNetworkPeering{},
164+
}
165+
assert.Equal(t, "/network-peering/id", r.RequestURL())
166+
js, err := json.Marshal(&r)
167+
require.NoError(t, err)
168+
assert.JSONEq(t, `{"network_peering":{}}`, string(js))
169+
170+
r = ModifyNetworkPeeringRequest{
171+
UUID: "id",
172+
NetworkPeering: ModifyNetworkPeering{
173+
Labels: &[]upcloud.Label{
174+
{
175+
Key: "managedBy",
176+
Value: "upcloud-go-sdk-unit-test",
177+
},
178+
},
179+
},
180+
}
181+
js, err = json.Marshal(&r)
182+
require.NoError(t, err)
183+
assert.JSONEq(t, `
184+
{
185+
"network_peering": {
186+
"labels": [
187+
{
188+
"key": "managedBy",
189+
"value": "upcloud-go-sdk-unit-test"
190+
}
191+
]
192+
}
193+
}
194+
`, string(js))
195+
}
196+
100197
func TestDeleteNetworkPeeringRequest(t *testing.T) {
101198
r := DeleteNetworkPeeringRequest{"id"}
102199
assert.Equal(t, "/network-peering/id", r.RequestURL())

upcloud/service/network_peering.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ import (
88
)
99

1010
type NetworkPeering interface {
11-
GetNetworkPeerings(ctx context.Context) (upcloud.NetworkPeerings, error)
11+
GetNetworkPeerings(ctx context.Context, f ...request.QueryFilter) (upcloud.NetworkPeerings, error)
1212
GetNetworkPeering(ctx context.Context, r *request.GetNetworkPeeringRequest) (*upcloud.NetworkPeering, error)
1313
CreateNetworkPeering(ctx context.Context, r *request.CreateNetworkPeeringRequest) (*upcloud.NetworkPeering, error)
1414
ModifyNetworkPeering(ctx context.Context, r *request.ModifyNetworkPeeringRequest) (*upcloud.NetworkPeering, error)
1515
DeleteNetworkPeering(ctx context.Context, r *request.DeleteNetworkPeeringRequest) error
1616
}
1717

1818
// GetNetworkPeerings (EXPERIMENTAL) retrieves a list of network peerings within an account.
19-
func (s *Service) GetNetworkPeerings(ctx context.Context) (upcloud.NetworkPeerings, error) {
19+
func (s *Service) GetNetworkPeerings(ctx context.Context, f ...request.QueryFilter) (upcloud.NetworkPeerings, error) {
20+
r := request.GetNetworkPeeringsRequest{Filters: f}
2021
p := upcloud.NetworkPeerings{}
21-
return p, s.get(ctx, "/network-peering", &p)
22+
return p, s.get(ctx, r.RequestURL(), &p)
2223
}
2324

2425
// GetNetworkPeering (EXPERIMENTAL) retrieves details of a network peering.

upcloud/service/network_peering_test.go

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,22 @@ func TestCreateNetworkPeering(t *testing.T) {
106106
assert.JSONEq(t, `
107107
{
108108
"network_peering": {
109-
"configured_status": "active",
110-
"name": "Peering A->B",
111-
"network": {
112-
"uuid": "03126dc1-a69f-4bc2-8b24-e31c22d64712"
113-
},
114-
"peer_network": {
115-
"uuid": "03585987-bf7d-4544-8e9b-5a1b4d74a333"
116-
}
109+
"configured_status": "active",
110+
"name": "Peering A->B",
111+
"network": {
112+
"uuid": "03126dc1-a69f-4bc2-8b24-e31c22d64712"
113+
},
114+
"peer_network": {
115+
"uuid": "03585987-bf7d-4544-8e9b-5a1b4d74a333"
116+
},
117+
"labels": [
118+
{
119+
"key": "managedBy",
120+
"value": "upcloud-go-sdk-unit-test"
121+
}
122+
]
117123
}
118-
}
119-
`, string(body))
124+
}`, string(body))
120125
fmt.Fprint(w, networkPeeringCommonResponse)
121126
}))
122127
defer srv.Close()
@@ -130,8 +135,16 @@ func TestCreateNetworkPeering(t *testing.T) {
130135
PeerNetwork: request.NetworkPeeringNetwork{
131136
UUID: "03585987-bf7d-4544-8e9b-5a1b4d74a333",
132137
},
138+
Labels: []upcloud.Label{
139+
{
140+
Key: "managedBy",
141+
Value: "upcloud-go-sdk-unit-test",
142+
},
143+
},
133144
})
134-
assert.NoError(t, err)
145+
if !assert.NoError(t, err) {
146+
return
147+
}
135148
checkNetworkPeeringResponse(t, p)
136149
}
137150

@@ -147,7 +160,13 @@ func TestModifyNetworkPeering(t *testing.T) {
147160
{
148161
"network_peering": {
149162
"configured_status": "disabled",
150-
"name": "Peering A->B modified"
163+
"name": "Peering A->B modified",
164+
"labels": [
165+
{
166+
"key": "managedBy",
167+
"value": "upcloud-go-sdk-unit-test"
168+
}
169+
]
151170
}
152171
}
153172
`, string(body))
@@ -160,9 +179,17 @@ func TestModifyNetworkPeering(t *testing.T) {
160179
NetworkPeering: request.ModifyNetworkPeering{
161180
Name: "Peering A->B modified",
162181
ConfiguredStatus: upcloud.NetworkPeeringConfiguredStatusDisabled,
182+
Labels: &[]upcloud.Label{
183+
{
184+
Key: "managedBy",
185+
Value: "upcloud-go-sdk-unit-test",
186+
},
187+
},
163188
},
164189
})
165-
assert.NoError(t, err)
190+
if !assert.NoError(t, err) {
191+
return
192+
}
166193
checkNetworkPeeringResponse(t, p)
167194
}
168195

@@ -191,6 +218,12 @@ const networkPeeringCommonResponse string = `
191218
"uuid": "0f7984bc-5d72-4aaf-b587-90e6a8f32efc",
192219
"configured_status": "active",
193220
"name": "Peering A->B",
221+
"labels": [
222+
{
223+
"key": "managedBy",
224+
"value": "upcloud-go-sdk-unit-test"
225+
}
226+
],
194227
"network": {
195228
"ip_networks": {
196229
"ip_network": [

0 commit comments

Comments
 (0)