1
// Copyright 2014 ALTOROS
2
// Licensed under the AGPLv3, see LICENSE file for details.
14
var live = flag.String("live", "", "run live tests against CloudSigma endpoint, specify credentials in form -live=user:pass")
15
var suid = flag.String("suid", "", "uuid of server at CloudSigma to run server specific tests")
16
var duid = flag.String("duid", "", "uuid of drive at CloudSigma to run drive specific tests")
17
var vlan = flag.String("vlan", "", "uuid of vlan at CloudSigma to run server specific tests")
18
var sshkey = flag.String("sshkey", "", "public ssh key to run server specific tests")
19
var force = flag.Bool("force", false, "force start/stop live tests")
20
var lib = flag.Bool("lib", false, "duid is library drive")
21
var size = flag.Uint64("size", 0, "size for operations: TestLiveDriveResize")
23
func libFlag() LibrarySpec {
30
func parseCredentials() (u string, p string, e error) {
35
parts := strings.SplitN(*live, ":", 2)
36
if len(parts) != 2 || parts[0] == "" {
37
e = errors.New("Invalid credentials: " + *live)
41
u, p = parts[0], parts[1]
46
func skipTest(t *testing.T, e error) {
54
func TestLiveServers(t *testing.T) {
55
u, p, err := parseCredentials()
61
cli, err := NewClient(DefaultRegion, u, p, nil)
71
ii, err := cli.Servers(false)
79
func TestLiveServerGet(t *testing.T) {
80
u, p, err := parseCredentials()
87
t.Skip("-suid=<server-uuid> must be specified")
91
cli, err := NewClient(DefaultRegion, u, p, nil)
101
s, err := cli.Server(*suid)
109
func TestLiveServerStart(t *testing.T) {
110
u, p, err := parseCredentials()
117
t.Skip("-suid=<server-uuid> must be specified")
121
cli, err := NewClient(DefaultRegion, u, p, nil)
131
s, err := cli.Server(*suid)
137
if s.Status() != ServerStopped && !*force {
138
t.Skip("wrong server status", s.Status())
142
if err := s.Start(); err != nil {
147
func TestLiveServerStartWait(t *testing.T) {
148
u, p, err := parseCredentials()
155
t.Skip("-suid=<server-uuid> must be specified")
159
cli, err := NewClient(DefaultRegion, u, p, nil)
169
s, err := cli.Server(*suid)
175
if s.Status() != ServerStopped && !*force {
176
t.Skip("wrong server status", s.Status())
180
if err := s.StartWait(); err != nil {
185
func TestLiveServerStop(t *testing.T) {
186
u, p, err := parseCredentials()
193
t.Skip("-suid=<server-uuid> must be specified")
197
cli, err := NewClient(DefaultRegion, u, p, nil)
207
s, err := cli.Server(*suid)
213
if s.Status() != ServerRunning && !*force {
214
t.Skip("wrong server status", s.Status())
218
if err := s.Stop(); err != nil {
223
func TestLiveDriveGet(t *testing.T) {
224
u, p, err := parseCredentials()
231
t.Skip("-duid=<drive-uuid> must be specified")
235
cli, err := NewClient(DefaultRegion, u, p, nil)
245
d, err := cli.Drive(*duid, libFlag())
253
func TestLiveDriveList(t *testing.T) {
254
u, p, err := parseCredentials()
260
cli, err := NewClient(DefaultRegion, u, p, nil)
270
dd, err := cli.Drives(true, libFlag())
276
for _, d := range dd {
281
func TestLiveDriveClone(t *testing.T) {
282
u, p, err := parseCredentials()
289
t.Skip("-duid=<drive-uuid> must be specified")
293
cli, err := NewClient(DefaultRegion, u, p, nil)
303
d, err := cli.Drive(*duid, libFlag())
309
var cloneParams CloneParams
310
cloneParams.Name = "LiveTest-" + time.Now().Format("15-04-05-999999999")
311
newDrive, err := d.CloneWait(cloneParams, nil)
316
t.Logf("%v", newDrive)
319
func TestLiveServerClone(t *testing.T) {
320
u, p, err := parseCredentials()
327
t.Skip("-duid=<drive-uuid> must be specified")
332
t.Skip("-vlan=<vlan-uuid> must be specified")
337
t.Skip("-sshkey=<ssh-public-key> must be specified")
341
cli, err := NewClient(DefaultRegion, u, p, nil)
351
originalDrive, err := cli.Drive(*duid, libFlag())
357
stamp := time.Now().Format("15-04-05-999999999")
359
var cloneParams CloneParams
360
cloneParams.Name = "LiveTest-drv-" + stamp
361
newDrive, err := originalDrive.CloneWait(cloneParams, nil)
368
c.SetName("LiveTest-srv-" + stamp)
370
c.SetMem(2 * Gigabyte)
371
c.SetVNCPassword("test-vnc-password")
372
c.SetSSHPublicKey(*sshkey)
373
c.SetDescription("test-description")
374
c.AttachDrive(1, "0:0", "virtio", newDrive.UUID())
375
c.NetworkDHCP4(ModelVirtio)
376
c.NetworkVLan(ModelVirtio, *vlan)
378
s, err := cli.CreateServer(c)
388
func TestLiveServerRemove(t *testing.T) {
389
u, p, err := parseCredentials()
396
t.Skip("-suid=<server-uuid> must be specified")
400
cli, err := NewClient(DefaultRegion, u, p, nil)
402
t.Error("create client", err)
410
s, err := cli.Server(*suid)
412
t.Error("query server:", err)
416
if s.Status() != ServerStopped {
417
if err := s.StopWait(); err != nil {
418
t.Error("stop server:", err)
423
err = s.Remove(RecurseAllDrives)
429
t.Log("Server deleted")
432
func TestLiveDriveResize(t *testing.T) {
433
u, p, err := parseCredentials()
440
t.Skip("-duid=<drive-uuid> must be specified")
445
t.Skip("-size=<drive-size> must be specified")
449
cli, err := NewClient(DefaultRegion, u, p, nil)
459
d, err := cli.Drive(*duid, libFlag())
465
t.Logf("Current drive size: %d", d.Size())
466
if err := d.ResizeWait(*size); err != nil {
470
t.Logf("Resulting drive size: %d", d.Size())