File: snapshot_utils_test.go

package info (click to toggle)
golang-github-scaleway-scaleway-sdk-go 1.0.0~beta12-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,000 kB
  • sloc: javascript: 160; sh: 70; makefile: 3
file content (113 lines) | stat: -rw-r--r-- 3,443 bytes parent folder | download
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)
}