Skip to content

Commit 353e44d

Browse files
authored
Merge pull request #42 from karvounis/master
Field Backups was added to StorageDetails struct
2 parents e4a6802 + 79bdb6b commit 353e44d

2 files changed

Lines changed: 58 additions & 5 deletions

File tree

upcloud/storage.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import "encoding/xml"
44

55
// Constants
66
const (
7-
StorageTypeDisk = "disk"
7+
StorageTypeBackup = "backup"
88
StorageTypeCDROM = "cdrom"
9+
StorageTypeDisk = "disk"
10+
StorageTypeNormal = "normal"
911
StorageTypeTemplate = "template"
10-
StorageTypeBackup = "backup"
1112

1213
StorageTierHDD = "hdd"
1314
StorageTierMaxIOPS = "maxiops"
@@ -59,9 +60,9 @@ type Storage struct {
5960
type StorageDetails struct {
6061
Storage
6162

62-
BackupRule *BackupRule `xml:"backup_rule"`
63-
// TODO: Support the <backups> field
64-
ServerUUIDs []string `xml:"servers>server"`
63+
BackupRule *BackupRule `xml:"backup_rule"`
64+
BackupUUIDs []string `xml:"backups>backup"`
65+
ServerUUIDs []string `xml:"servers>server"`
6566
}
6667

6768
// BackupRule represents a backup rule

upcloud/storage_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,58 @@ func TestUnmarshalStorage(t *testing.T) {
5454
assert.Equal(t, "01000000-0000-4000-8000-000010010101", firstStorage.UUID)
5555
}
5656

57+
// TestUnmarshalStorageDetails tests that StorageDetails struct is unmarshaled correctly
58+
func TestUnmarshalStorageDetails(t *testing.T) {
59+
originalXML := `<?xml version="1.0" encoding="utf-8"?>
60+
<storage>
61+
<access>private</access>
62+
<backup_rule>
63+
<interval>daily</interval>
64+
<retention>1</retention>
65+
<time>0400</time>
66+
</backup_rule>
67+
<backups>
68+
<backup>37c96670-9c02-4d5d-8f60-291d38f9a80c</backup>
69+
<backup>ecfda9f2-e071-4bbb-b38f-079ed26eb32a</backup>
70+
</backups>
71+
<license>0</license>
72+
<servers>
73+
<server>33850294-50f4-4712-8463-aeb7b42de42f</server>
74+
</servers>
75+
<size>500</size>
76+
<state>online</state>
77+
<tier>maxiops</tier>
78+
<title>Debian server (Disk 1)</title>
79+
<type>normal</type>
80+
<uuid>bf3da6c2-66c4-4e70-9640-5b4896aacd5c</uuid>
81+
<zone>fi-hel1</zone>
82+
</storage>`
83+
storageDeviceDetails := StorageDetails{}
84+
err := xml.Unmarshal([]byte(originalXML), &storageDeviceDetails)
85+
86+
assert.Nil(t, err)
87+
assert.Equal(t, "private", storageDeviceDetails.Access)
88+
assert.Equal(t, 0.0, storageDeviceDetails.License)
89+
assert.Equal(t, 500, storageDeviceDetails.Size)
90+
assert.Equal(t, "online", storageDeviceDetails.State)
91+
assert.Equal(t, "maxiops", storageDeviceDetails.Tier)
92+
assert.Equal(t, "Debian server (Disk 1)", storageDeviceDetails.Title)
93+
assert.Equal(t, StorageTypeNormal, storageDeviceDetails.Type)
94+
assert.Equal(t, "bf3da6c2-66c4-4e70-9640-5b4896aacd5c", storageDeviceDetails.UUID)
95+
assert.Equal(t, "fi-hel1", storageDeviceDetails.Zone)
96+
97+
assert.Equal(t, BackupRuleIntervalDaily, storageDeviceDetails.BackupRule.Interval)
98+
assert.Equal(t, 1, storageDeviceDetails.BackupRule.Retention)
99+
assert.Equal(t, "0400", storageDeviceDetails.BackupRule.Time)
100+
101+
assert.Equal(t, 2, len(storageDeviceDetails.BackupUUIDs))
102+
assert.Equal(t, "37c96670-9c02-4d5d-8f60-291d38f9a80c", storageDeviceDetails.BackupUUIDs[0])
103+
assert.Equal(t, "ecfda9f2-e071-4bbb-b38f-079ed26eb32a", storageDeviceDetails.BackupUUIDs[1])
104+
105+
assert.Equal(t, 1, len(storageDeviceDetails.ServerUUIDs))
106+
assert.Equal(t, "33850294-50f4-4712-8463-aeb7b42de42f", storageDeviceDetails.ServerUUIDs[0])
107+
}
108+
57109
// TestUnmarshalServerStorageDevice tests that ServerStorageDevice objects are properly unmarshaled
58110
func TestUnmarshalServerStorageDevice(t *testing.T) {
59111
originalXML := `<?xml version="1.0" encoding="utf-8"?>

0 commit comments

Comments
 (0)