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