-
Notifications
You must be signed in to change notification settings - Fork 98
Support regions/vpc-availability endpoints #880
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
cdd2df8
7ed1031
e9ef7dc
2aa4f20
2644b47
466841d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| --- | ||
| version: 1 | ||
| interactions: | ||
| - request: | ||
| body: "" | ||
| form: {} | ||
| headers: | ||
| Accept: | ||
| - application/json | ||
| Content-Type: | ||
| - application/json | ||
| User-Agent: | ||
| - linodego/dev https://github.com/linode/linodego | ||
| url: https://api.linode.com/v4beta/regions/nl-ams/vpc-availability | ||
| method: GET | ||
| response: | ||
| body: '{"region": "nl-ams", "available": true, "available_ipv6_prefix_lengths": | ||
| []}' | ||
| headers: | ||
| Access-Control-Allow-Credentials: | ||
| - "true" | ||
| Access-Control-Allow-Headers: | ||
| - Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Filter | ||
| Access-Control-Allow-Methods: | ||
| - HEAD, GET, OPTIONS, POST, PUT, DELETE | ||
| Access-Control-Allow-Origin: | ||
| - '*' | ||
| Access-Control-Expose-Headers: | ||
| - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status | ||
| Akamai-Internal-Account: | ||
| - '*' | ||
| Cache-Control: | ||
| - max-age=0, no-cache, no-store | ||
| Connection: | ||
| - keep-alive | ||
| Content-Length: | ||
| - "76" | ||
| Content-Security-Policy: | ||
| - default-src 'none' | ||
| Content-Type: | ||
| - application/json | ||
| Expires: | ||
| - Mon, 02 Feb 2026 10:17:52 GMT | ||
| Pragma: | ||
| - no-cache | ||
| Strict-Transport-Security: | ||
| - max-age=31536000 | ||
| Vary: | ||
| - Authorization, X-Filter | ||
| - Authorization, X-Filter | ||
| X-Accepted-Oauth-Scopes: | ||
| - vpc:read_only | ||
| X-Content-Type-Options: | ||
| - nosniff | ||
| X-Frame-Options: | ||
| - DENY | ||
| - DENY | ||
| X-Oauth-Scopes: | ||
| - '*' | ||
| X-Ratelimit-Limit: | ||
| - "1840" | ||
| X-Xss-Protection: | ||
| - 1; mode=block | ||
| status: 200 OK | ||
| code: 200 | ||
| duration: "" |
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The output of those fixtures were recorded in the Should I use the fixtures obtained from prod env by Michał already?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have gained the access to the prod env and regenerated test data based on that env. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| --- | ||
| version: 1 | ||
| interactions: | ||
| - request: | ||
| body: "" | ||
| form: {} | ||
| headers: | ||
| Accept: | ||
| - application/json | ||
| Content-Type: | ||
| - application/json | ||
| User-Agent: | ||
| - linodego/dev https://github.com/linode/linodego | ||
| url: https://api.linode.com/v4beta/regions/vpc-availability?page=1 | ||
| method: GET | ||
| response: | ||
| body: '{"data": [{"region": "nl-ams", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "fr-par-2", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "jp-tyo-3", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "sg-sin-2", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "de-fra-2", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "in-bom-2", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "au-mel", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "gb-lon", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-lax", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "id-cgk", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-mia", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "it-mil", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "jp-osa", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "in-maa", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "es-mad", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "se-sto", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "br-gru", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-sea", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "fr-par", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-ord", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-iad", "available": true, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "ap-southeast", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "ca-central", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "ap-west", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-central", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "ap-northeast", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "eu-central", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "ap-south", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "eu-west", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-east", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-southeast", "available": false, "available_ipv6_prefix_lengths": | ||
| []}, {"region": "us-west", "available": false, "available_ipv6_prefix_lengths": | ||
| []}], "page": 1, "pages": 1, "results": 32}' | ||
| headers: | ||
| Access-Control-Allow-Credentials: | ||
| - "true" | ||
| Access-Control-Allow-Headers: | ||
| - Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Filter | ||
| Access-Control-Allow-Methods: | ||
| - HEAD, GET, OPTIONS, POST, PUT, DELETE | ||
| Access-Control-Allow-Origin: | ||
| - '*' | ||
| Access-Control-Expose-Headers: | ||
| - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status | ||
| Akamai-Internal-Account: | ||
| - '*' | ||
| Cache-Control: | ||
| - max-age=0, no-cache, no-store | ||
| Connection: | ||
| - keep-alive | ||
| Content-Security-Policy: | ||
| - default-src 'none' | ||
| Content-Type: | ||
| - application/json | ||
| Expires: | ||
| - Mon, 02 Feb 2026 10:17:08 GMT | ||
| Pragma: | ||
| - no-cache | ||
| Strict-Transport-Security: | ||
| - max-age=31536000 | ||
| Vary: | ||
| - Authorization, X-Filter | ||
| - Authorization, X-Filter | ||
| - Accept-Encoding | ||
| X-Accepted-Oauth-Scopes: | ||
| - vpc:read_only | ||
| X-Content-Type-Options: | ||
| - nosniff | ||
| X-Frame-Options: | ||
| - DENY | ||
| - DENY | ||
| X-Oauth-Scopes: | ||
| - '*' | ||
| X-Ratelimit-Limit: | ||
| - "1840" | ||
| X-Xss-Protection: | ||
| - 1; mode=block | ||
| status: 200 OK | ||
| code: 200 | ||
| duration: "" |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,8 @@ | ||||||
| { | ||||||
| "region": "us-east", | ||||||
| "available": true, | ||||||
| "available_ipv6_prefix_lengths": [ | ||||||
| 52, | ||||||
| 60 | ||||||
|
||||||
| 60 | |
| 52 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| { | ||
| "data": [ | ||
| { | ||
| "region": "us-east", | ||
| "available": true, | ||
| "available_ipv6_prefix_lengths": [ | ||
| 52, | ||
| 48 | ||
| ] | ||
| }, | ||
| { | ||
| "region": "us-west", | ||
| "available": true, | ||
| "available_ipv6_prefix_lengths": [ | ||
| 56, | ||
| 52, | ||
| 48 | ||
| ] | ||
| } | ||
| ], | ||
| "page": 1, | ||
| "pages": 1, | ||
| "results": 2 | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -134,3 +134,59 @@ func TestGetRegionAvailability(t *testing.T) { | |||||
| assert.True(t, availability.Available, "Expected region to be available") | ||||||
| assert.NotEmpty(t, availability.Plan, "Expected plan to be set") | ||||||
| } | ||||||
|
|
||||||
| func TestListRegionsVPCAvailability(t *testing.T) { | ||||||
| // Load the fixture data for regions vpc availability | ||||||
| fixtureData, err := fixtures.GetFixture("regions_vpc_availability_list") | ||||||
| assert.NoError(t, err) | ||||||
|
|
||||||
| var base ClientBaseCase | ||||||
| base.SetUp(t) | ||||||
| defer base.TearDown(t) | ||||||
|
|
||||||
| base.MockGet("regions/vpc-availability", fixtureData) | ||||||
|
|
||||||
| availability, err := base.Client.ListRegionsVPCAvailability(context.Background(), &linodego.ListOptions{}) | ||||||
| assert.NoError(t, err) | ||||||
| assert.NotEmpty(t, availability, "Expected non-empty region vpc availability list") | ||||||
|
|
||||||
| expected := []linodego.RegionVPCAvailability{ | ||||||
| { | ||||||
| Region: "us-east", | ||||||
| Available: true, | ||||||
| AvailableIPV6PrefixLengths: []int{52, 48}, | ||||||
| }, | ||||||
| { | ||||||
| Region: "us-west", | ||||||
| Available: true, | ||||||
| AvailableIPV6PrefixLengths: []int{56, 52, 48}, | ||||||
| }, | ||||||
| } | ||||||
|
|
||||||
| assert.Equal(t, expected, availability, "Expected region vpc availability list to match expected data") | ||||||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let me know if you prefer one-by-one assertions on each of the returned fields instead of a single object comparison. |
||||||
| } | ||||||
|
|
||||||
| func TestGetRegionVPCAvailability(t *testing.T) { | ||||||
| // Load the fixture data for a specific region vpc availability | ||||||
| fixtureData, err := fixtures.GetFixture("region_vpc_availability_get") | ||||||
| assert.NoError(t, err) | ||||||
|
|
||||||
| var base ClientBaseCase | ||||||
| base.SetUp(t) | ||||||
| defer base.TearDown(t) | ||||||
|
|
||||||
| regionID := "us-east" | ||||||
| base.MockGet(fmt.Sprintf("regions/%s/vpc-availability", regionID), fixtureData) | ||||||
|
|
||||||
| availability, err := base.Client.GetRegionVPCAvailability(context.Background(), regionID) | ||||||
| assert.NoError(t, err) | ||||||
| assert.NotNil(t, availability, "Expected region vpc availability object to be returned") | ||||||
|
|
||||||
| expected := &linodego.RegionVPCAvailability{ | ||||||
| Region: "us-east", | ||||||
| Available: true, | ||||||
| AvailableIPV6PrefixLengths: []int{52, 60}, | ||||||
|
||||||
| AvailableIPV6PrefixLengths: []int{52, 60}, | |
| AvailableIPV6PrefixLengths: []int{52}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I saw that usually the methods end in dots, but the comments for structs or vars don't. Is it intentional?