From fb0af73b806153d0aa6d0dadbc8970672eb8f1d2 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Tue, 28 Jul 2015 20:47:39 -0400 Subject: [PATCH] Verifying the --swarm-discovery flag Signed-off-by: Dave Henderson --- commands/create.go | 22 ++++++++++++++++++++++ commands/create_test.go | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/commands/create.go b/commands/create.go index e69ac3c539..5d9416b939 100644 --- a/commands/create.go +++ b/commands/create.go @@ -3,6 +3,7 @@ package commands import ( "fmt" "path/filepath" + "regexp" "github.com/docker/machine/log" @@ -35,6 +36,10 @@ func cmdCreate(c *cli.Context) { log.Fatal("You must specify a machine name") } + if err := validateSwarmDiscovery(c.String("swarm-discovery")); err != nil { + log.Fatalf("Error parsing swarm discovery: %s", err) + } + certInfo := getCertPathInfo(c) if err := setupCertificates( @@ -118,3 +123,20 @@ func trimDriverFlags(driver string, cmds []cli.Command) ([]cli.Command, error) { return filteredCmds, nil } + +func validateSwarmDiscovery(discovery string) error { + if discovery == "" { + return nil + } + + matched, err := regexp.MatchString(`[^:]*://.*`, discovery) + if err != nil { + return err + } + + if matched { + return nil + } + + return fmt.Errorf("Swarm Discovery URL was in the wrong format: %s", discovery) +} diff --git a/commands/create_test.go b/commands/create_test.go index cdff10da75..a4e39d0252 100644 --- a/commands/create_test.go +++ b/commands/create_test.go @@ -1 +1,22 @@ package commands + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestValidateSwarmDiscoveryErrorsGivenInvalidURL(t *testing.T) { + err := validateSwarmDiscovery("foo") + assert.Error(t, err) +} + +func TestValidateSwarmDiscoveryAcceptsEmptyString(t *testing.T) { + err := validateSwarmDiscovery("") + assert.NoError(t, err) +} + +func TestValidateSwarmDiscoveryAcceptsValidFormat(t *testing.T) { + err := validateSwarmDiscovery("token://deadbeefcafe") + assert.NoError(t, err) +}