-
Notifications
You must be signed in to change notification settings - Fork 83
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add unit test coverage for Stackscripts, Database and Region related …
…methods/functions (#652) * unit_tests * add_test * database_tests
- Loading branch information
Showing
16 changed files
with
592 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
package unit | ||
|
||
import ( | ||
"context" | ||
"encoding/json" | ||
"fmt" | ||
"slices" | ||
"testing" | ||
|
||
"github.com/linode/linodego" | ||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestListDatabases(t *testing.T) { | ||
fixtureData, err := fixtures.GetFixture("databases_list") | ||
assert.NoError(t, err) | ||
|
||
var base ClientBaseCase | ||
base.SetUp(t) | ||
defer base.TearDown(t) | ||
|
||
base.MockGet("databases/instances", fixtureData) | ||
databases, err := base.Client.ListDatabases(context.Background(), &linodego.ListOptions{}) | ||
assert.NoError(t, err) | ||
assert.NotEmpty(t, databases, "Expected non-empty database list") | ||
} | ||
|
||
func TestGetDatabaseEngine(t *testing.T) { | ||
fixtureData, err := fixtures.GetFixture("database_engine_get") | ||
assert.NoError(t, err) | ||
|
||
var base ClientBaseCase | ||
base.SetUp(t) | ||
defer base.TearDown(t) | ||
|
||
engineID := "mysql-8" | ||
base.MockGet(fmt.Sprintf("databases/engines/%s", engineID), fixtureData) | ||
databaseEngine, err := base.Client.GetDatabaseEngine(context.Background(), &linodego.ListOptions{}, engineID) | ||
assert.NoError(t, err) | ||
assert.NotNil(t, databaseEngine, "Expected database engine object to be returned") | ||
assert.Equal(t, engineID, databaseEngine.ID, "Expected correct database engine ID") | ||
assert.Equal(t, "mysql", databaseEngine.Engine, "Expected MySQL engine") | ||
assert.Equal(t, "8.0", databaseEngine.Version, "Expected MySQL 8.0 version") | ||
} | ||
|
||
func TestListDatabaseTypes(t *testing.T) { | ||
fixtureData, err := fixtures.GetFixture("database_types_list") | ||
assert.NoError(t, err) | ||
|
||
var base ClientBaseCase | ||
base.SetUp(t) | ||
defer base.TearDown(t) | ||
|
||
base.MockGet("databases/types", fixtureData) | ||
databaseTypes, err := base.Client.ListDatabaseTypes(context.Background(), &linodego.ListOptions{}) | ||
assert.NoError(t, err) | ||
assert.NotEmpty(t, databaseTypes, "Expected non-empty database types list") | ||
} | ||
|
||
func TestUnmarshalDatabase(t *testing.T) { | ||
fixtureData, err := fixtures.GetFixture("database_unmarshal") | ||
assert.NoError(t, err) | ||
|
||
var data []byte | ||
switch v := fixtureData.(type) { | ||
case []byte: | ||
data = v | ||
case string: | ||
data = []byte(v) | ||
case map[string]interface{}: | ||
data, err = json.Marshal(v) // Convert map to JSON string | ||
assert.NoError(t, err, "Failed to marshal fixtureData") | ||
default: | ||
assert.Fail(t, "Unexpected fixtureData type") | ||
} | ||
|
||
var db linodego.Database | ||
err = json.Unmarshal(data, &db) | ||
assert.NoError(t, err) | ||
assert.Equal(t, 123, db.ID, "Expected correct database ID") | ||
assert.Equal(t, "active", string(db.Status), "Expected active status") | ||
assert.Equal(t, "mysql", db.Engine, "Expected MySQL engine") | ||
assert.Equal(t, 3, db.ClusterSize, "Expected cluster size 3") | ||
assert.NotNil(t, db.Created, "Expected Created timestamp to be set") | ||
} | ||
|
||
func TestDatabaseMaintenanceWindowUnmarshal(t *testing.T) { | ||
fixtureData, err := fixtures.GetFixture("database_maintenance_window") | ||
assert.NoError(t, err) | ||
|
||
var data []byte | ||
switch v := fixtureData.(type) { | ||
case []byte: | ||
data = v | ||
case string: | ||
data = []byte(v) | ||
case map[string]interface{}: | ||
data, err = json.Marshal(v) | ||
assert.NoError(t, err, "Failed to marshal fixtureData") | ||
default: | ||
assert.Fail(t, "Unexpected fixtureData type") | ||
} | ||
|
||
var window linodego.DatabaseMaintenanceWindow | ||
err = json.Unmarshal(data, &window) | ||
assert.NoError(t, err) | ||
assert.Equal(t, linodego.DatabaseMaintenanceDayMonday, window.DayOfWeek, "Expected Monday as maintenance day") | ||
assert.Equal(t, 2, window.Duration, "Expected 2-hour maintenance window") | ||
assert.Equal(t, linodego.DatabaseMaintenanceFrequencyWeekly, window.Frequency, "Expected weekly frequency") | ||
assert.Equal(t, 3, window.HourOfDay, "Expected maintenance at 3 AM") | ||
} | ||
|
||
func TestDatabaseStatusAssertions(t *testing.T) { | ||
expectedStatuses := []string{ | ||
"provisioning", "active", "deleting", "deleted", | ||
"suspending", "suspended", "resuming", "restoring", | ||
"failed", "degraded", "updating", "backing_up", | ||
} | ||
|
||
statuses := []linodego.DatabaseStatus{ | ||
linodego.DatabaseStatusProvisioning, linodego.DatabaseStatusActive, linodego.DatabaseStatusDeleting, | ||
linodego.DatabaseStatusDeleted, linodego.DatabaseStatusSuspending, linodego.DatabaseStatusSuspended, | ||
linodego.DatabaseStatusResuming, linodego.DatabaseStatusRestoring, linodego.DatabaseStatusFailed, | ||
linodego.DatabaseStatusDegraded, linodego.DatabaseStatusUpdating, linodego.DatabaseStatusBackingUp, | ||
} | ||
|
||
for _, status := range statuses { | ||
t.Run(string(status), func(t *testing.T) { | ||
exists := slices.ContainsFunc(expectedStatuses, func(s string) bool { | ||
return s == string(status) | ||
}) | ||
assert.True(t, exists, fmt.Sprintf("Expected status %s to exist", status)) | ||
}) | ||
} | ||
} | ||
|
||
func TestDatabaseMaintenanceFrequencyAssertions(t *testing.T) { | ||
expectedFrequencies := []string{"weekly", "monthly"} | ||
|
||
frequencies := []linodego.DatabaseMaintenanceFrequency{ | ||
linodego.DatabaseMaintenanceFrequencyWeekly, | ||
linodego.DatabaseMaintenanceFrequencyMonthly, | ||
} | ||
|
||
for _, freq := range frequencies { | ||
t.Run(string(freq), func(t *testing.T) { | ||
exists := slices.ContainsFunc(expectedFrequencies, func(f string) bool { | ||
return f == string(freq) | ||
}) | ||
assert.True(t, exists, fmt.Sprintf("Expected frequency %s to exist", freq)) | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"id": "mysql-8", | ||
"engine": "mysql", | ||
"version": "8.0", | ||
"supported_versions": ["5.7", "8.0"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"day_of_week": 1, | ||
"duration": 2, | ||
"frequency": "weekly", | ||
"hour_of_day": 3 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"id": "g6-standard-1", | ||
"label": "Standard Plan", | ||
"memory": 4096, | ||
"vcpus": 2, | ||
"disk": 80 | ||
}, | ||
{ | ||
"id": "g6-standard-2", | ||
"label": "High Performance Plan", | ||
"memory": 8192, | ||
"vcpus": 4, | ||
"disk": 160 | ||
} | ||
], | ||
"page": 1, | ||
"pages": 1, | ||
"results": 2 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{ | ||
"id": 123, | ||
"status": "active", | ||
"label": "test-db", | ||
"region": "us-east", | ||
"type": "g6-standard-1", | ||
"engine": "mysql", | ||
"version": "8.0", | ||
"cluster_size": 3, | ||
"platform": "rdbms-default", | ||
"created": "2023-01-01T12:00:00" | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"id": 123, | ||
"status": "active", | ||
"label": "test-db", | ||
"region": "us-east", | ||
"type": "g6-standard-1", | ||
"engine": "mysql", | ||
"version": "8.0", | ||
"cluster_size": 3, | ||
"platform": "rdbms-default", | ||
"created": "2023-01-01T12:00:00" | ||
} | ||
], | ||
"page": 1, | ||
"pages": 1, | ||
"results": 1 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"region": "us-east", | ||
"available": true, | ||
"plan": "Linode 2GB" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{ | ||
"id": "us-east", | ||
"country": "US", | ||
"capabilities": ["Linodes", "Block Storage", "Object Storage"], | ||
"status": "ok", | ||
"label": "Newark, NJ", | ||
"site_type": "standard", | ||
"resolvers": { | ||
"ipv4": "8.8.8.8", | ||
"ipv6": "2001:4860:4860::8888" | ||
}, | ||
"placement_group_limits": { | ||
"maximum_pgs_per_customer": 5, | ||
"maximum_linodes_per_pg": 10 | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"region": "us-east", | ||
"available": true, | ||
"plan": "Linode 2GB" | ||
} | ||
], | ||
"page": 1, | ||
"pages": 1, | ||
"results": 1 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"id": "us-east", | ||
"country": "US", | ||
"capabilities": ["Linodes", "Block Storage", "Object Storage"], | ||
"status": "ok", | ||
"label": "US East", | ||
"site_type": "standard", | ||
"resolvers": { | ||
"ipv4": "8.8.8.8", | ||
"ipv6": "2001:4860:4860::8888" | ||
}, | ||
"placement_group_limits": { | ||
"maximum_pgs_per_customer": 10, | ||
"maximum_linodes_per_pg": 5 | ||
} | ||
} | ||
], | ||
"page": 1, | ||
"pages": 1, | ||
"results": 1 | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
{ | ||
"id": 123, | ||
"username": "testuser", | ||
"label": "new-stackscript", | ||
"description": "Test Description", | ||
"ordinal": 1, | ||
"logo_url": "https://example.com/logo.png", | ||
"images": ["linode/ubuntu20.04"], | ||
"deployments_total": 10, | ||
"deployments_active": 5, | ||
"is_public": true, | ||
"mine": true, | ||
"rev_note": "Initial revision", | ||
"script": "#!/bin/bash\necho Hello", | ||
"user_defined_fields": [], | ||
"user_gravatar_id": "abcdef123456" | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"id": 123, | ||
"label": "Updated Stackscript", | ||
"rev_note": "Updated revision" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"id": 123, | ||
"username": "testuser", | ||
"label": "Test Stackscript", | ||
"description": "A test Stackscript", | ||
"images": ["linode/ubuntu20.04"], | ||
"deployments_total": 10, | ||
"deployments_active": 5, | ||
"is_public": true, | ||
"mine": true, | ||
"rev_note": "Initial version", | ||
"script": "#!/bin/bash\necho Hello", | ||
"user_defined_fields": [], | ||
"user_gravatar_id": "abc123" | ||
}, | ||
{ | ||
"id": 456, | ||
"username": "anotheruser", | ||
"label": "Another Stackscript", | ||
"description": "Another test Stackscript", | ||
"images": ["linode/debian10"], | ||
"deployments_total": 3, | ||
"deployments_active": 1, | ||
"is_public": false, | ||
"mine": false, | ||
"rev_note": "Another version", | ||
"script": "#!/bin/bash\necho Another", | ||
"user_defined_fields": [], | ||
"user_gravatar_id": "xyz456" | ||
} | ||
], | ||
"page": 1, | ||
"pages": 1, | ||
"results": 2 | ||
} |
Oops, something went wrong.