-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathvm_test.go
146 lines (142 loc) · 3.54 KB
/
vm_test.go
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright (C) 2017 Battelle Memorial Institute
// All rights reserved.
//
// This software may be modified and distributed under the terms
// of the BSD-2 license. See the LICENSE file for details.
package ovirtapi_test
import (
"os"
"strconv"
"testing"
"time"
"github.com/EMSL-MSC/ovirtapi"
)
func TestVM(t *testing.T) {
t.Parallel()
username := os.Getenv("OVIRT_USERNAME")
if username == "" {
t.Error("OVIRT_USERNAME is not set")
return
}
password := os.Getenv("OVIRT_PASSWORD")
if password == "" {
t.Error("OVIRT_PASSWORD is not set")
return
}
url := os.Getenv("OVIRT_URL")
if url == "" {
t.Error("OVIRT_URL is not set")
return
}
debug, _ := strconv.ParseBool(os.Getenv("DEBUG_TRANSPORT"))
con, err := ovirtapi.NewConnection(url, username, password, debug)
if err != nil {
t.Error("error creating connection", err)
return
}
newVM := con.NewVM()
newVM.Name = "test-vm"
display := ovirtapi.Display{}
display.Type = "vnc"
newVM.Display = &display
allTemplates, err := con.GetAllTemplates()
if err != nil {
t.Error("Error finding a Template to assign to a test vm", err)
return
}
newVM.Template = allTemplates[0]
allClusters, err := con.GetAllClusters()
if err != nil {
t.Error("Error finding a Cluster to assign to a test vm", err)
return
}
newVM.Cluster = allClusters[0]
err = newVM.Save()
if err != nil {
t.Error("Error creating new vm", err)
return
}
newDisk := con.NewDisk()
newDisk.ProvisionedSize = 102400
newDisk.Format = "cow"
newDisk.Name = "attach-disk"
storageDomains := ovirtapi.StorageDomains{}
storageDomains.StorageDomain = append(storageDomains.StorageDomain, ovirtapi.Link{
ID: "dfe8e7be-e495-49a7-be2d-71aba891ceb4",
})
newDisk.StorageDomains = &storageDomains
err = newDisk.Save()
if err != nil {
t.Fatal("Error creating a disk to attach to the vm", err)
}
for count := 0; (newDisk.Status != "ok" || newVM.Status != "down") && count < 30; count++ {
time.Sleep(2 * time.Second)
err = newDisk.Update()
if err != nil {
t.Error("Error updating Disk", err)
return
}
err = newVM.Update()
if err != nil {
t.Error("Error updating VM", err)
return
}
}
_, err = newVM.AddLinkObject("diskattachments", ovirtapi.DiskAttachment{
Active: "true",
Bootable: "true",
Disk: newDisk,
Interface: "virtio_scsi",
LogicalName: "/dev/vdb",
}, nil)
if err != nil {
t.Fatal("Error attaching disk to the vm", err)
}
retrievedVM, err := con.GetVM(newVM.ID)
if err != nil {
t.Error("Error retrieving vm", err)
return
}
for count := 0; retrievedVM.Status != "down" && count < 30; count++ {
time.Sleep(2 * time.Second)
err = retrievedVM.Update()
if err != nil {
t.Error("Error updating VM", err)
return
}
}
err = retrievedVM.Start("", "", "", "", "", nil)
if err != nil {
t.Error("Error starting vm", err)
return
}
err = retrievedVM.Stop("false")
if err != nil {
t.Error("Error stopping vm", err)
return
}
retrievedVM.Description = "about to delete"
err = retrievedVM.Save()
if err != nil {
t.Error("Error updating vm", err)
return
}
for count := 0; retrievedVM.Status != "down" && count < 30; count++ {
time.Sleep(2 * time.Second)
err = retrievedVM.Update()
if err != nil {
t.Error("Error updating VM", err)
return
}
}
_, err = retrievedVM.GetLinkObject("diskattachments", newDisk.ID, nil)
if err != nil {
t.Error("Error retrieving disk attachment", err)
}
retrievedVM.RemoveLinkObject("diskattachments", newDisk.ID, nil)
err = retrievedVM.Delete()
if err != nil {
t.Error("Error Deleting vm", err)
return
}
}