github.com/jmitchell/nomad@v0.1.3-0.20151007230021-7ab84c2862d8/client/driver/args/args_test.go (about)

     1  package args
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  const (
    10  	ipKey   = "NOMAD_IP"
    11  	ipVal   = "127.0.0.1"
    12  	portKey = "NOMAD_PORT_WEB"
    13  	portVal = ":80"
    14  )
    15  
    16  var (
    17  	envVars = map[string]string{
    18  		ipKey:   ipVal,
    19  		portKey: portVal,
    20  	}
    21  )
    22  
    23  func TestDriverArgs_ParseAndReplaceInvalidEnv(t *testing.T) {
    24  	input := "invalid $FOO"
    25  	exp := []string{"invalid", "$FOO"}
    26  	act, err := ParseAndReplace(input, envVars)
    27  	if err != nil {
    28  		t.Fatalf("Failed to parse valid input args %v: %v", input, err)
    29  	}
    30  
    31  	if !reflect.DeepEqual(act, exp) {
    32  		t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp)
    33  	}
    34  }
    35  
    36  func TestDriverArgs_ParseAndReplaceValidEnv(t *testing.T) {
    37  	input := fmt.Sprintf("nomad_ip \\\"$%v\\\"!", ipKey)
    38  	exp := []string{"nomad_ip", fmt.Sprintf("\"%s\"!", ipVal)}
    39  	act, err := ParseAndReplace(input, envVars)
    40  	if err != nil {
    41  		t.Fatalf("Failed to parse valid input args %v: %v", input, err)
    42  	}
    43  
    44  	if !reflect.DeepEqual(act, exp) {
    45  		t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp)
    46  	}
    47  }
    48  
    49  func TestDriverArgs_ParseAndReplaceChainedEnv(t *testing.T) {
    50  	input := fmt.Sprintf("-foo $%s$%s", ipKey, portKey)
    51  	exp := []string{"-foo", fmt.Sprintf("%s%s", ipVal, portVal)}
    52  	act, err := ParseAndReplace(input, envVars)
    53  	if err != nil {
    54  		t.Fatalf("Failed to parse valid input args %v: %v", input, err)
    55  	}
    56  
    57  	if !reflect.DeepEqual(act, exp) {
    58  		t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp)
    59  	}
    60  }
    61  
    62  func TestDriverArgs_ParseAndReplaceInvalidArgEscape(t *testing.T) {
    63  	input := "-c \"echo \"foo\\\" > bar.txt\""
    64  	if _, err := ParseAndReplace(input, envVars); err == nil {
    65  		t.Fatalf("ParseAndReplace(%v, %v) should have failed", input, envVars)
    66  	}
    67  }
    68  
    69  func TestDriverArgs_ParseAndReplaceValidArgEscape(t *testing.T) {
    70  	input := "-c \"echo \\\"foo\\\" > bar.txt\""
    71  	exp := []string{"-c", "echo \"foo\" > bar.txt"}
    72  	act, err := ParseAndReplace(input, envVars)
    73  	if err != nil {
    74  		t.Fatalf("Failed to parse valid input args %v: %v", input, err)
    75  	}
    76  
    77  	if !reflect.DeepEqual(act, exp) {
    78  		t.Fatalf("ParseAndReplace(%v, %v) returned %#v; want %#v", input, envVars, act, exp)
    79  	}
    80  }