From 87f49c4f7f54e18ca06421a09a835fb0dd07f8ae Mon Sep 17 00:00:00 2001 From: Diptanu Choudhury Date: Sun, 15 Nov 2015 00:10:48 -0800 Subject: [PATCH] Fixed the tests for jobspec --- jobspec/parse.go | 12 +++++++++--- jobspec/parse_test.go | 14 +++++++------- jobspec/test-fixtures/bad-ports.hcl | 13 +++++++++++-- jobspec/test-fixtures/basic.hcl | 14 ++++++++++++-- jobspec/test-fixtures/overlapping-ports.hcl | 14 ++++++++++++-- 5 files changed, 51 insertions(+), 16 deletions(-) diff --git a/jobspec/parse.go b/jobspec/parse.go index b9daab6a8..24772364f 100644 --- a/jobspec/parse.go +++ b/jobspec/parse.go @@ -8,6 +8,7 @@ import ( "path/filepath" "regexp" "strconv" + "strings" "github.com/hashicorp/hcl" "github.com/hashicorp/hcl/hcl/ast" @@ -16,7 +17,7 @@ import ( ) var reDynamicPorts *regexp.Regexp = regexp.MustCompile("^[a-zA-Z0-9_]+$") -var errDynamicPorts = fmt.Errorf("DynamicPort label does not conform to naming requirements %s", reDynamicPorts.String()) +var errPortLabel = fmt.Errorf("Port label does not conform to naming requirements %s", reDynamicPorts.String()) // Parse parses the job spec from the given io.Reader. // @@ -513,11 +514,15 @@ func parseResources(result *structs.Resources, list *ast.ObjectList) error { } func parsePorts(networkObj *ast.ObjectList, nw *structs.NetworkResource) error { - portsObjList := networkObj.Filter("Port") + portsObjList := networkObj.Filter("port") knownPortLabels := make(map[string]bool) for _, port := range portsObjList.Items { label := port.Keys[0].Token.Value().(string) - if knownPortLabels[label] { + if !reDynamicPorts.MatchString(label) { + return errPortLabel + } + l := strings.ToLower(label) + if knownPortLabels[l] { return fmt.Errorf("Found a port label collision: %s", label) } var p map[string]interface{} @@ -534,6 +539,7 @@ func parsePorts(networkObj *ast.ObjectList, nw *structs.NetworkResource) error { } else { nw.DynamicPorts = append(nw.DynamicPorts, res) } + knownPortLabels[l] = true } return nil } diff --git a/jobspec/parse_test.go b/jobspec/parse_test.go index 2ce66b7b4..0814aa0f6 100644 --- a/jobspec/parse_test.go +++ b/jobspec/parse_test.go @@ -57,7 +57,7 @@ func TestParse(t *testing.T) { &structs.Task{ Name: "outside", Driver: "java", - Config: map[string]string{ + Config: map[string]interface{}{ "jar": "s3://my-cool-store/foo.jar", }, Meta: map[string]string{ @@ -91,7 +91,7 @@ func TestParse(t *testing.T) { &structs.Task{ Name: "binstore", Driver: "docker", - Config: map[string]string{ + Config: map[string]interface{}{ "image": "hashicorp/binstore", }, Env: map[string]string{ @@ -104,8 +104,8 @@ func TestParse(t *testing.T) { Networks: []*structs.NetworkResource{ &structs.NetworkResource{ MBits: 100, - ReservedPorts: []int{1, 2, 3}, - DynamicPorts: []string{"http", "https", "admin"}, + ReservedPorts: []structs.Port{{"one", 1}, {"two", 2}, {"three", 3}}, + DynamicPorts: []structs.Port{{"http", 0}, {"https", 0}, {"admin", 0}}, }, }, }, @@ -113,7 +113,7 @@ func TestParse(t *testing.T) { &structs.Task{ Name: "storagelocker", Driver: "java", - Config: map[string]string{ + Config: map[string]interface{}{ "image": "hashicorp/storagelocker", }, Resources: &structs.Resources{ @@ -256,8 +256,8 @@ func TestBadPorts(t *testing.T) { _, err = ParseFile(path) - if !strings.Contains(err.Error(), errDynamicPorts.Error()) { - t.Fatalf("\nExpected error\n %s\ngot\n %v", errDynamicPorts, err) + if !strings.Contains(err.Error(), errPortLabel.Error()) { + t.Fatalf("\nExpected error\n %s\ngot\n %v", errPortLabel, err) } } diff --git a/jobspec/test-fixtures/bad-ports.hcl b/jobspec/test-fixtures/bad-ports.hcl index 33c5f1c93..2928f1095 100644 --- a/jobspec/test-fixtures/bad-ports.hcl +++ b/jobspec/test-fixtures/bad-ports.hcl @@ -42,8 +42,17 @@ job "binstore-storagelocker" { network { mbits = "100" - reserved_ports = [1,2,3] - dynamic_ports = ["this_is_aport", "this#is$not-a!port"] + port "one" { + static = 1 + } + port "two" { + static = 2 + } + port "three" { + static = 3 + } + port "this_is_aport" {} + port ""{} } } } diff --git a/jobspec/test-fixtures/basic.hcl b/jobspec/test-fixtures/basic.hcl index bf81a6ae7..236f4829a 100644 --- a/jobspec/test-fixtures/basic.hcl +++ b/jobspec/test-fixtures/basic.hcl @@ -51,8 +51,18 @@ job "binstore-storagelocker" { network { mbits = "100" - reserved_ports = [1,2,3] - dynamic_ports = ["http", "https", "admin"] + port "one" { + static = 1 + } + port "two" { + static = 2 + } + port "three" { + static = 3 + } + port "http" {} + port "https" {} + port "admin" {} } } } diff --git a/jobspec/test-fixtures/overlapping-ports.hcl b/jobspec/test-fixtures/overlapping-ports.hcl index 3bf9f3c34..2a0994772 100644 --- a/jobspec/test-fixtures/overlapping-ports.hcl +++ b/jobspec/test-fixtures/overlapping-ports.hcl @@ -42,8 +42,18 @@ job "binstore-storagelocker" { network { mbits = "100" - reserved_ports = [1,2,3] - dynamic_ports = ["Http", "http", "HTTP"] + port "one" { + static = 1 + } + port "two" { + static = 2 + } + port "three" { + static = 3 + } + port "Http" {} + port "http" {} + port "HTTP" {} } } }