github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/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(HardConstraint("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: []int{80, 443}, 24 }, 25 }, 26 }) 27 28 // Compose a task group 29 grp := NewTaskGroup("grp1", 2). 30 Constrain(HardConstraint("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(HardConstraint("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 Hard: true, 57 LTarget: "kernel.name", 58 RTarget: "linux", 59 Operand: "=", 60 Weight: 0, 61 }, 62 }, 63 TaskGroups: []*TaskGroup{ 64 &TaskGroup{ 65 Name: "grp1", 66 Count: 2, 67 Constraints: []*Constraint{ 68 &Constraint{ 69 Hard: true, 70 LTarget: "kernel.name", 71 RTarget: "linux", 72 Operand: "=", 73 Weight: 0, 74 }, 75 }, 76 Tasks: []*Task{ 77 &Task{ 78 Name: "task1", 79 Driver: "exec", 80 Resources: &Resources{ 81 CPU: 1250, 82 MemoryMB: 1024, 83 DiskMB: 2048, 84 IOPS: 500, 85 Networks: []*NetworkResource{ 86 &NetworkResource{ 87 CIDR: "0.0.0.0/0", 88 MBits: 100, 89 ReservedPorts: []int{ 90 80, 91 443, 92 }, 93 }, 94 }, 95 }, 96 Constraints: []*Constraint{ 97 &Constraint{ 98 Hard: true, 99 LTarget: "kernel.name", 100 RTarget: "linux", 101 Operand: "=", 102 Weight: 0, 103 }, 104 }, 105 Config: map[string]string{ 106 "foo": "bar", 107 }, 108 Meta: map[string]string{ 109 "foo": "bar", 110 }, 111 }, 112 }, 113 Meta: map[string]string{ 114 "foo": "bar", 115 }, 116 }, 117 }, 118 } 119 if !reflect.DeepEqual(job, expect) { 120 t.Fatalf("expect: %#v, got: %#v", expect, job) 121 } 122 }