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  }