Skip to content

Commit 4808bd9

Browse files
authored
Merge pull request #65 from OpenVPN/fix-network-ip-service-routes
Return routes to network IP services
2 parents 835bd4d + 8a065e5 commit 4808bd9

File tree

3 files changed

+70
-46
lines changed

3 files changed

+70
-46
lines changed

cloudconnexa/host_ip_services.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ type IPService struct {
4545
Config *IPServiceConfig `json:"config"`
4646
}
4747

48-
// IPServiceResponse represents the response structure for IP service operations.
48+
// HostIPServiceResponse represents the response structure for IP service operations.
4949
// Updated for API v1.1.0: Removed duplicate routing information to match the simplified DTO.
50-
type IPServiceResponse struct {
50+
type HostIPServiceResponse struct {
5151
Name string `json:"name"`
5252
Description string `json:"description"`
5353
NetworkItemType string `json:"networkItemType"`
@@ -57,45 +57,45 @@ type IPServiceResponse struct {
5757
Config *IPServiceConfig `json:"config"`
5858
}
5959

60-
// IPServicePageResponse represents a paginated response from the CloudConnexa API
60+
// HostIPServicePageResponse represents a paginated response from the CloudConnexa API
6161
// containing a list of IP services and pagination metadata.
62-
type IPServicePageResponse struct {
63-
Content []IPServiceResponse `json:"content"`
64-
NumberOfElements int `json:"numberOfElements"`
65-
Page int `json:"page"`
66-
Size int `json:"size"`
67-
Success bool `json:"success"`
68-
TotalElements int `json:"totalElements"`
69-
TotalPages int `json:"totalPages"`
62+
type HostIPServicePageResponse struct {
63+
Content []HostIPServiceResponse `json:"content"`
64+
NumberOfElements int `json:"numberOfElements"`
65+
Page int `json:"page"`
66+
Size int `json:"size"`
67+
Success bool `json:"success"`
68+
TotalElements int `json:"totalElements"`
69+
TotalPages int `json:"totalPages"`
7070
}
7171

7272
// HostIPServicesService provides methods for managing IP services.
7373
type HostIPServicesService service
7474

7575
// GetIPByPage retrieves IP services using pagination.
76-
func (c *HostIPServicesService) GetIPByPage(page int, pageSize int) (IPServicePageResponse, error) {
76+
func (c *HostIPServicesService) GetIPByPage(page int, pageSize int) (HostIPServicePageResponse, error) {
7777
endpoint := fmt.Sprintf("%s/hosts/ip-services?page=%d&size=%d", c.client.GetV1Url(), page, pageSize)
7878
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
7979
if err != nil {
80-
return IPServicePageResponse{}, err
80+
return HostIPServicePageResponse{}, err
8181
}
8282

8383
body, err := c.client.DoRequest(req)
8484
if err != nil {
85-
return IPServicePageResponse{}, err
85+
return HostIPServicePageResponse{}, err
8686
}
8787

88-
var response IPServicePageResponse
88+
var response HostIPServicePageResponse
8989
err = json.Unmarshal(body, &response)
9090
if err != nil {
91-
return IPServicePageResponse{}, err
91+
return HostIPServicePageResponse{}, err
9292
}
9393
return response, nil
9494
}
9595

9696
// List retrieves all IP services by paginating through all available pages.
97-
func (c *HostIPServicesService) List() ([]IPServiceResponse, error) {
98-
var allIPServices []IPServiceResponse
97+
func (c *HostIPServicesService) List() ([]HostIPServiceResponse, error) {
98+
var allIPServices []HostIPServiceResponse
9999
page := 0
100100
pageSize := 10
101101

@@ -115,7 +115,7 @@ func (c *HostIPServicesService) List() ([]IPServiceResponse, error) {
115115
}
116116

117117
// Get retrieves a specific IP service by its ID.
118-
func (c *HostIPServicesService) Get(id string) (*IPServiceResponse, error) {
118+
func (c *HostIPServicesService) Get(id string) (*HostIPServiceResponse, error) {
119119
endpoint := fmt.Sprintf("%s/hosts/ip-services/%s", c.client.GetV1Url(), id)
120120
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
121121
if err != nil {
@@ -127,7 +127,7 @@ func (c *HostIPServicesService) Get(id string) (*IPServiceResponse, error) {
127127
return nil, err
128128
}
129129

130-
var service IPServiceResponse
130+
var service HostIPServiceResponse
131131
err = json.Unmarshal(body, &service)
132132
if err != nil {
133133
return nil, err
@@ -136,7 +136,7 @@ func (c *HostIPServicesService) Get(id string) (*IPServiceResponse, error) {
136136
}
137137

138138
// Create creates a new IP service.
139-
func (c *HostIPServicesService) Create(ipService *IPService) (*IPServiceResponse, error) {
139+
func (c *HostIPServicesService) Create(ipService *IPService) (*HostIPServiceResponse, error) {
140140
ipServiceJSON, err := json.Marshal(ipService)
141141
if err != nil {
142142
return nil, err
@@ -154,7 +154,7 @@ func (c *HostIPServicesService) Create(ipService *IPService) (*IPServiceResponse
154154
return nil, err
155155
}
156156

157-
var s IPServiceResponse
157+
var s HostIPServiceResponse
158158
err = json.Unmarshal(body, &s)
159159
if err != nil {
160160
return nil, err
@@ -163,7 +163,7 @@ func (c *HostIPServicesService) Create(ipService *IPService) (*IPServiceResponse
163163
}
164164

165165
// Update updates an existing IP service by its ID.
166-
func (c *HostIPServicesService) Update(id string, service *IPService) (*IPServiceResponse, error) {
166+
func (c *HostIPServicesService) Update(id string, service *IPService) (*HostIPServiceResponse, error) {
167167
serviceJSON, err := json.Marshal(service)
168168
if err != nil {
169169
return nil, err
@@ -181,7 +181,7 @@ func (c *HostIPServicesService) Update(id string, service *IPService) (*IPServic
181181
return nil, err
182182
}
183183

184-
var s IPServiceResponse
184+
var s HostIPServiceResponse
185185
err = json.Unmarshal(body, &s)
186186
if err != nil {
187187
return nil, err

cloudconnexa/host_ip_services_dto_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestHostIPServicesService_UpdatedDTO(t *testing.T) {
3434
}
3535

3636
// Mock response with the updated DTO structure (no duplicate routes)
37-
service := IPServiceResponse{
37+
service := HostIPServiceResponse{
3838
ID: "service-123",
3939
Name: "Test IP Service",
4040
Description: "Test service description",
@@ -118,8 +118,8 @@ func TestHostIPServicesService_List_UpdatedDTO(t *testing.T) {
118118
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
119119
// Mock paginated response with updated DTO
120120
// Note: The List() method calls GetIPByPage() which may make multiple requests
121-
response := IPServicePageResponse{
122-
Content: []IPServiceResponse{
121+
response := HostIPServicePageResponse{
122+
Content: []HostIPServiceResponse{
123123
{
124124
ID: "service-1",
125125
Name: "Service 1",
@@ -204,7 +204,7 @@ func TestHostIPServicesService_Create_UpdatedDTO(t *testing.T) {
204204
}
205205

206206
// Mock response with created service using updated DTO
207-
service := IPServiceResponse{
207+
service := HostIPServiceResponse{
208208
ID: "new-service-123",
209209
Name: "New Service",
210210
Description: "Newly created service",
@@ -275,10 +275,10 @@ func TestHostIPServicesService_Create_UpdatedDTO(t *testing.T) {
275275
}
276276

277277
func TestIPServiceResponse_NoRoutesDuplication(t *testing.T) {
278-
// Test that the updated IPServiceResponse structure doesn't have duplicate routes
278+
// Test that the updated HostIPServiceResponse structure doesn't have duplicate routes
279279
// This is a structural test to ensure API v1.1.0 compliance
280280

281-
service := IPServiceResponse{
281+
service := HostIPServiceResponse{
282282
ID: "test-service",
283283
Name: "Test Service",
284284
Description: "Test description",
@@ -306,16 +306,16 @@ func TestIPServiceResponse_NoRoutesDuplication(t *testing.T) {
306306
// Verify that there's no duplicate 'routes' field at the top level
307307
// (routes should only be in the config if needed)
308308
if _, exists := parsed["routes"]; exists {
309-
t.Error("IPServiceResponse should not have a top-level 'routes' field in API v1.1.0")
309+
t.Error("HostIPServiceResponse should not have a top-level 'routes' field in API v1.1.0")
310310
}
311311

312312
// Verify expected fields are present
313313
expectedFields := []string{"id", "name", "description", "networkItemType", "networkItemId", "type", "config"}
314314
for _, field := range expectedFields {
315315
if _, exists := parsed[field]; !exists {
316-
t.Errorf("Expected field '%s' not found in IPServiceResponse", field)
316+
t.Errorf("Expected field '%s' not found in HostIPServiceResponse", field)
317317
}
318318
}
319319

320-
t.Logf("IPServiceResponse JSON structure: %s", string(jsonData))
320+
t.Logf("HostIPServiceResponse JSON structure: %s", string(jsonData))
321321
}

cloudconnexa/network_ip_services.go

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,61 @@ import (
77
"net/http"
88
)
99

10+
// NetworkIPServiceResponse represents the response structure for Network IP service operations.
11+
type NetworkIPServiceResponse struct {
12+
Name string `json:"name"`
13+
Description string `json:"description"`
14+
NetworkItemType string `json:"networkItemType"`
15+
NetworkItemID string `json:"networkItemId"`
16+
ID string `json:"id"`
17+
Type string `json:"type"`
18+
Config *IPServiceConfig `json:"config"`
19+
Routes []*Route `json:"routes"`
20+
}
21+
22+
// NetworkIPServicePageResponse represents a paginated response from the CloudConnexa API
23+
// containing a list of IP services and pagination metadata.
24+
type NetworkIPServicePageResponse struct {
25+
Content []NetworkIPServiceResponse `json:"content"`
26+
NumberOfElements int `json:"numberOfElements"`
27+
Page int `json:"page"`
28+
Size int `json:"size"`
29+
Success bool `json:"success"`
30+
TotalElements int `json:"totalElements"`
31+
TotalPages int `json:"totalPages"`
32+
}
33+
1034
// NetworkIPServicesService handles communication with the CloudConnexa IP Services API
1135
type NetworkIPServicesService service
1236

1337
// GetIPByPage retrieves a page of IP services with pagination
1438
// page: The page number to retrieve
1539
// pageSize: The number of items per page
1640
// Returns a page of IP services and any error that occurred
17-
func (c *NetworkIPServicesService) GetIPByPage(page int, pageSize int) (IPServicePageResponse, error) {
41+
func (c *NetworkIPServicesService) GetIPByPage(page int, pageSize int) (NetworkIPServicePageResponse, error) {
1842
endpoint := fmt.Sprintf("%s/networks/ip-services?page=%d&size=%d", c.client.GetV1Url(), page, pageSize)
1943
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
2044
if err != nil {
21-
return IPServicePageResponse{}, err
45+
return NetworkIPServicePageResponse{}, err
2246
}
2347

2448
body, err := c.client.DoRequest(req)
2549
if err != nil {
26-
return IPServicePageResponse{}, err
50+
return NetworkIPServicePageResponse{}, err
2751
}
2852

29-
var response IPServicePageResponse
53+
var response NetworkIPServicePageResponse
3054
err = json.Unmarshal(body, &response)
3155
if err != nil {
32-
return IPServicePageResponse{}, err
56+
return NetworkIPServicePageResponse{}, err
3357
}
3458
return response, nil
3559
}
3660

3761
// List retrieves all IP services by paginating through all available pages
3862
// Returns a slice of IP services and any error that occurred
39-
func (c *NetworkIPServicesService) List() ([]IPServiceResponse, error) {
40-
var allIPServices []IPServiceResponse
63+
func (c *NetworkIPServicesService) List() ([]NetworkIPServiceResponse, error) {
64+
var allIPServices []NetworkIPServiceResponse
4165
page := 0
4266
pageSize := 10
4367

@@ -59,7 +83,7 @@ func (c *NetworkIPServicesService) List() ([]IPServiceResponse, error) {
5983
// Get retrieves a specific IP service by its ID
6084
// id: The ID of the IP service to retrieve
6185
// Returns the IP service and any error that occurred
62-
func (c *NetworkIPServicesService) Get(id string) (*IPServiceResponse, error) {
86+
func (c *NetworkIPServicesService) Get(id string) (*NetworkIPServiceResponse, error) {
6387
endpoint := fmt.Sprintf("%s/networks/ip-services/%s", c.client.GetV1Url(), id)
6488
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
6589
if err != nil {
@@ -71,7 +95,7 @@ func (c *NetworkIPServicesService) Get(id string) (*IPServiceResponse, error) {
7195
return nil, err
7296
}
7397

74-
var service IPServiceResponse
98+
var service NetworkIPServiceResponse
7599
err = json.Unmarshal(body, &service)
76100
if err != nil {
77101
return nil, err
@@ -82,7 +106,7 @@ func (c *NetworkIPServicesService) Get(id string) (*IPServiceResponse, error) {
82106
// Create creates a new IP service
83107
// ipService: The IP service configuration to create
84108
// Returns the created IP service and any error that occurred
85-
func (c *NetworkIPServicesService) Create(ipService *IPService) (*IPServiceResponse, error) {
109+
func (c *NetworkIPServicesService) Create(ipService *IPService) (*NetworkIPServiceResponse, error) {
86110
ipServiceJSON, err := json.Marshal(ipService)
87111
if err != nil {
88112
return nil, err
@@ -100,7 +124,7 @@ func (c *NetworkIPServicesService) Create(ipService *IPService) (*IPServiceRespo
100124
return nil, err
101125
}
102126

103-
var s IPServiceResponse
127+
var s NetworkIPServiceResponse
104128
err = json.Unmarshal(body, &s)
105129
if err != nil {
106130
return nil, err
@@ -112,7 +136,7 @@ func (c *NetworkIPServicesService) Create(ipService *IPService) (*IPServiceRespo
112136
// id: The ID of the IP service to update
113137
// service: The updated IP service configuration
114138
// Returns the updated IP service and any error that occurred
115-
func (c *NetworkIPServicesService) Update(id string, service *IPService) (*IPServiceResponse, error) {
139+
func (c *NetworkIPServicesService) Update(id string, service *IPService) (*NetworkIPServiceResponse, error) {
116140
serviceJSON, err := json.Marshal(service)
117141
if err != nil {
118142
return nil, err
@@ -130,7 +154,7 @@ func (c *NetworkIPServicesService) Update(id string, service *IPService) (*IPSer
130154
return nil, err
131155
}
132156

133-
var s IPServiceResponse
157+
var s NetworkIPServiceResponse
134158
err = json.Unmarshal(body, &s)
135159
if err != nil {
136160
return nil, err

0 commit comments

Comments
 (0)