github.com/huiliang/nomad@v0.2.1-0.20151124023127-7a8b664699ff/client/driver/qemu_test.go (about) 1 package driver 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/nomad/client/config" 8 "github.com/hashicorp/nomad/nomad/structs" 9 10 ctestutils "github.com/hashicorp/nomad/client/testutil" 11 ) 12 13 // The fingerprinter test should always pass, even if QEMU is not installed. 14 func TestQemuDriver_Fingerprint(t *testing.T) { 15 ctestutils.QemuCompatible(t) 16 d := NewQemuDriver(testDriverContext("")) 17 node := &structs.Node{ 18 Attributes: make(map[string]string), 19 } 20 apply, err := d.Fingerprint(&config.Config{}, node) 21 if err != nil { 22 t.Fatalf("err: %v", err) 23 } 24 if !apply { 25 t.Fatalf("should apply") 26 } 27 if node.Attributes["driver.qemu"] == "" { 28 t.Fatalf("Missing Qemu driver") 29 } 30 if node.Attributes["driver.qemu.version"] == "" { 31 t.Fatalf("Missing Qemu driver version") 32 } 33 } 34 35 func TestQemuDriver_StartOpen_Wait(t *testing.T) { 36 ctestutils.QemuCompatible(t) 37 // TODO: use test server to load from a fixture 38 task := &structs.Task{ 39 Name: "linux", 40 Config: map[string]interface{}{ 41 "artifact_source": "https://dl.dropboxusercontent.com/u/47675/jar_thing/linux-0.2.img", 42 "checksum": "sha256:a5e836985934c3392cbbd9b26db55a7d35a8d7ae1deb7ca559dd9c0159572544", 43 "accelerator": "tcg", 44 "port_map": []map[string]int{{ 45 "main": 22, 46 "web": 8080, 47 }}, 48 }, 49 Resources: &structs.Resources{ 50 CPU: 500, 51 MemoryMB: 512, 52 Networks: []*structs.NetworkResource{ 53 &structs.NetworkResource{ 54 ReservedPorts: []structs.Port{{"main", 22000}, {"web", 80}}, 55 }, 56 }, 57 }, 58 } 59 60 driverCtx := testDriverContext(task.Name) 61 ctx := testDriverExecContext(task, driverCtx) 62 defer ctx.AllocDir.Destroy() 63 d := NewQemuDriver(driverCtx) 64 65 handle, err := d.Start(ctx, task) 66 if err != nil { 67 t.Fatalf("err: %v", err) 68 } 69 if handle == nil { 70 t.Fatalf("missing handle") 71 } 72 73 // Attempt to open 74 handle2, err := d.Open(ctx, handle.ID()) 75 if err != nil { 76 t.Fatalf("err: %v", err) 77 } 78 if handle2 == nil { 79 t.Fatalf("missing handle") 80 } 81 82 // Clean up 83 if err := handle.Kill(); err != nil { 84 fmt.Printf("\nError killing Qemu test: %s", err) 85 } 86 } 87 88 func TestQemuDriver_RequiresMemory(t *testing.T) { 89 ctestutils.QemuCompatible(t) 90 // TODO: use test server to load from a fixture 91 task := &structs.Task{ 92 Name: "linux", 93 Config: map[string]interface{}{ 94 "artifact_source": "https://dl.dropboxusercontent.com/u/47675/jar_thing/linux-0.2.img", 95 "accelerator": "tcg", 96 "host_port": "8080", 97 "guest_port": "8081", 98 "checksum": "sha256:a5e836985934c3392cbbd9b26db55a7d35a8d7ae1deb7ca559dd9c0159572544", 99 // ssh u/p would be here 100 }, 101 } 102 103 driverCtx := testDriverContext(task.Name) 104 ctx := testDriverExecContext(task, driverCtx) 105 defer ctx.AllocDir.Destroy() 106 d := NewQemuDriver(driverCtx) 107 108 _, err := d.Start(ctx, task) 109 if err == nil { 110 t.Fatalf("Expected error when not specifying memory") 111 } 112 }