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  }