1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
package instance
import (
"testing"
"github.com/scaleway/scaleway-sdk-go/internal/testhelpers"
"github.com/scaleway/scaleway-sdk-go/internal/testhelpers/httprecorder"
"github.com/scaleway/scaleway-sdk-go/scw"
)
func TestWaitForSnapshot(t *testing.T) {
client, r, err := httprecorder.CreateRecordedScwClient("snapshot-wait-test")
testhelpers.AssertNoError(t, err)
defer func() {
testhelpers.AssertNoError(t, r.Stop()) // Make sure recorder is stopped once done with it
}()
instanceAPI := NewAPI(client)
snapshotName := "backup"
snapshot, cleanup := createSnapshot(t, instanceAPI, snapshotName)
defer cleanup()
res, err := instanceAPI.WaitForSnapshot(&WaitForSnapshotRequest{
SnapshotID: snapshot.ID,
})
testhelpers.AssertNoError(t, err)
testhelpers.Equals(t, snapshot.ID, res.ID)
testhelpers.Equals(t, SnapshotStateAvailable, res.State)
testhelpers.Equals(t, snapshotName, res.Name)
}
// createSnapshot is a helper that create an snapshot.
// It returns the newly created snapshot and a cleanup function
func createSnapshot(t *testing.T, instanceAPI *API, snapshotName string) (*Snapshot, func()) {
serverRes, err := instanceAPI.CreateServer(&CreateServerRequest{
CommercialType: "DEV1-M",
Image: "ubuntu_focal",
})
testhelpers.AssertNoError(t, err)
// Backup will create a snapshot for each volume + an image base on all snapshots.
snapshot, err := instanceAPI.CreateSnapshot(&CreateSnapshotRequest{
Name: snapshotName,
VolumeID: &serverRes.Server.Volumes["0"].ID,
})
testhelpers.AssertNoError(t, err)
snapshotRes, err := instanceAPI.GetSnapshot(&GetSnapshotRequest{
SnapshotID: snapshot.Snapshot.ID,
})
testhelpers.AssertNoError(t, err)
return snapshotRes.Snapshot, func() {
// Delete all created resources
err := instanceAPI.DeleteServer(&DeleteServerRequest{
ServerID: serverRes.Server.ID,
})
testhelpers.AssertNoError(t, err)
err = instanceAPI.DeleteSnapshot(&DeleteSnapshotRequest{
SnapshotID: snapshotRes.Snapshot.ID,
})
testhelpers.AssertNoError(t, err)
}
}
func TestAPI_UpdateSnapshot(t *testing.T) {
client, r, err := httprecorder.CreateRecordedScwClient("snapshot-test")
testhelpers.AssertNoError(t, err)
defer func() {
testhelpers.AssertNoError(t, r.Stop()) // Make sure recorder is stopped once done with it
}()
instanceAPI := NewAPI(client)
var (
volumeSize = 1 * scw.GB
)
createVolume, err := instanceAPI.CreateVolume(&CreateVolumeRequest{
Name: "volume_name",
VolumeType: VolumeVolumeTypeBSSD,
Size: &volumeSize,
})
testhelpers.AssertNoError(t, err)
createResponse, err := instanceAPI.CreateSnapshot(&CreateSnapshotRequest{
Name: "name",
VolumeID: &createVolume.Volume.ID,
})
testhelpers.AssertNoError(t, err)
updateResponse, err := instanceAPI.UpdateSnapshot(&UpdateSnapshotRequest{
SnapshotID: createResponse.Snapshot.ID,
Name: scw.StringPtr("new_name"),
Tags: scw.StringsPtr([]string{"foo", "bar"}),
})
testhelpers.AssertNoError(t, err)
testhelpers.Equals(t, "new_name", updateResponse.Snapshot.Name)
testhelpers.Equals(t, []string{"foo", "bar"}, updateResponse.Snapshot.Tags)
_, err = instanceAPI.WaitForSnapshot(&WaitForSnapshotRequest{
SnapshotID: createResponse.Snapshot.ID,
})
testhelpers.AssertNoError(t, err)
err = instanceAPI.DeleteSnapshot(&DeleteSnapshotRequest{
SnapshotID: createResponse.Snapshot.ID,
})
testhelpers.AssertNoError(t, err)
}
|