github.com/djenriquez/nomad-1@v0.8.1/api/compose_test.go (about)

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