github.com/mattyr/nomad@v0.3.3-0.20160919021406-3485a065154a/api/compose_test.go (about) 1 package api 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestCompose(t *testing.T) { 9 // Compose a task 10 task := NewTask("task1", "exec"). 11 SetConfig("foo", "bar"). 12 SetMeta("foo", "bar"). 13 Constrain(NewConstraint("kernel.name", "=", "linux")). 14 Require(&Resources{ 15 CPU: 1250, 16 MemoryMB: 1024, 17 DiskMB: 2048, 18 IOPS: 500, 19 Networks: []*NetworkResource{ 20 &NetworkResource{ 21 CIDR: "0.0.0.0/0", 22 MBits: 100, 23 ReservedPorts: []Port{{"", 80}, {"", 443}}, 24 }, 25 }, 26 }) 27 28 // Compose a task group 29 grp := NewTaskGroup("grp1", 2). 30 Constrain(NewConstraint("kernel.name", "=", "linux")). 31 SetMeta("foo", "bar"). 32 AddTask(task) 33 34 // Compose a job 35 job := NewServiceJob("job1", "myjob", "region1", 2). 36 SetMeta("foo", "bar"). 37 AddDatacenter("dc1"). 38 Constrain(NewConstraint("kernel.name", "=", "linux")). 39 AddTaskGroup(grp) 40 41 // Check that the composed result looks correct 42 expect := &Job{ 43 Region: "region1", 44 ID: "job1", 45 Name: "myjob", 46 Type: JobTypeService, 47 Priority: 2, 48 Datacenters: []string{ 49 "dc1", 50 }, 51 Meta: map[string]string{ 52 "foo": "bar", 53 }, 54 Constraints: []*Constraint{ 55 &Constraint{ 56 LTarget: "kernel.name", 57 RTarget: "linux", 58 Operand: "=", 59 }, 60 }, 61 TaskGroups: []*TaskGroup{ 62 &TaskGroup{ 63 Name: "grp1", 64 Count: 2, 65 Constraints: []*Constraint{ 66 &Constraint{ 67 LTarget: "kernel.name", 68 RTarget: "linux", 69 Operand: "=", 70 }, 71 }, 72 Tasks: []*Task{ 73 &Task{ 74 Name: "task1", 75 Driver: "exec", 76 Resources: &Resources{ 77 CPU: 1250, 78 MemoryMB: 1024, 79 DiskMB: 2048, 80 IOPS: 500, 81 Networks: []*NetworkResource{ 82 &NetworkResource{ 83 CIDR: "0.0.0.0/0", 84 MBits: 100, 85 ReservedPorts: []Port{ 86 {"", 80}, 87 {"", 443}, 88 }, 89 }, 90 }, 91 }, 92 Constraints: []*Constraint{ 93 &Constraint{ 94 LTarget: "kernel.name", 95 RTarget: "linux", 96 Operand: "=", 97 }, 98 }, 99 Config: map[string]interface{}{ 100 "foo": "bar", 101 }, 102 Meta: map[string]string{ 103 "foo": "bar", 104 }, 105 }, 106 }, 107 Meta: map[string]string{ 108 "foo": "bar", 109 }, 110 }, 111 }, 112 } 113 if !reflect.DeepEqual(job, expect) { 114 t.Fatalf("expect: %#v, got: %#v", expect, job) 115 } 116 }