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  }