FIX #2171 Fix faulty flag and add tests for SetConfigFromFlags

Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
David Gageot 2015-11-05 12:57:43 +01:00
parent d07e4e259a
commit 11922080a1
15 changed files with 383 additions and 1 deletions

View File

@ -150,7 +150,7 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
Usage: "AWS spot instance bid price (in dollar)",
Value: defaultSpotPrice,
},
mcnflag.StringFlag{
mcnflag.BoolFlag{
Name: "amazonec2-private-address-only",
Usage: "Only use a private IP address",
},

View File

@ -7,6 +7,8 @@ import (
"github.com/docker/machine/commands/mcndirs"
"github.com/docker/machine/drivers/amazonec2/amz"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
const (
@ -235,3 +237,22 @@ func TestValidateAwsRegionInvalid(t *testing.T) {
}
}
}
func TestSetConfigFromFlags(t *testing.T) {
driver, err := getTestDriver()
if err != nil {
t.Fatal(err)
}
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"amazonec2-region": "us-west-2",
},
CreateFlags: driver.GetCreateFlags(),
}
driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,24 @@
package digitalocean
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"digitalocean-access-token": "TOKEN",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,25 @@
package exoscale
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"exoscale-api-key": "API_KEY",
"exoscale-api-secret-key": "API_SECRET_KEY",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,25 @@
package generic
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"generic-ip-address": "localhost",
"generic-ssh-key": "path",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,24 @@
package google
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"google-project": "PROJECT",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,22 @@
package hyperv
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,29 @@
package openstack
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"openstack-auth-url": "http://url",
"openstack-username": "user",
"openstack-password": "pwd",
"openstack-tenant-id": "ID",
"openstack-flavor-id": "ID",
"openstack-image-id": "ID",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,27 @@
package rackspace
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"rackspace-region": "REGION",
"rackspace-username": "user",
"rackspace-api-key": "KEY",
"rackspace-endpoint-type": "publicURL",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -6,6 +6,7 @@ import (
"testing"
"github.com/docker/machine/commands/mcndirs"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
@ -101,3 +102,23 @@ func TestHostnameDefaultsToMachineName(t *testing.T) {
assert.Equal(t, machineTestName, d.deviceConfig.Hostname)
}
}
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"softlayer-api-key": "KEY",
"softlayer-user": "user",
"softlayer-api-endpoint": "ENDPOINT",
"softlayer-domain": "DOMAIN",
"softlayer-region": "REGION",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -6,6 +6,7 @@ import (
"strings"
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/state"
"github.com/stretchr/testify/assert"
)
@ -180,3 +181,17 @@ func TestInvalidNetworkIpCIDR(t *testing.T) {
func newTestDriver(name string) *Driver {
return NewDriver(name, "")
}
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,22 @@
package vmwarefusion
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,27 @@
package vmwarevcloudair
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"vmwarevcloudair-username": "root",
"vmwarevcloudair-password": "pwd",
"vmwarevcloudair-vdcid": "ID",
"vmwarevcloudair-publicip": "IP",
},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,22 @@
package vmwarevsphere
import (
"testing"
"github.com/docker/machine/libmachine/drivers"
"github.com/stretchr/testify/assert"
)
func TestSetConfigFromFlags(t *testing.T) {
driver := NewDriver("default", "path")
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{},
CreateFlags: driver.GetCreateFlags(),
}
err := driver.SetConfigFromFlags(checkFlags)
assert.NoError(t, err)
assert.Empty(t, checkFlags.InvalidFlags)
}

View File

@ -0,0 +1,78 @@
package drivers
import "github.com/docker/machine/libmachine/mcnflag"
// CheckDriverOptions implements DriverOptions and is used to validate flag parsing
type CheckDriverOptions struct {
FlagsValues map[string]interface{}
CreateFlags []mcnflag.Flag
InvalidFlags []string
}
func (o *CheckDriverOptions) String(key string) string {
for _, flag := range o.CreateFlags {
if flag.String() == key {
_, ok := flag.(mcnflag.StringFlag)
if !ok {
o.InvalidFlags = append(o.InvalidFlags, flag.String())
}
}
}
value, present := o.FlagsValues[key].(string)
if present {
return value
}
return ""
}
func (o *CheckDriverOptions) StringSlice(key string) []string {
for _, flag := range o.CreateFlags {
if flag.String() == key {
_, ok := flag.(mcnflag.StringSliceFlag)
if !ok {
o.InvalidFlags = append(o.InvalidFlags, flag.String())
}
}
}
value, present := o.FlagsValues[key].([]string)
if present {
return value
}
return nil
}
func (o *CheckDriverOptions) Int(key string) int {
for _, flag := range o.CreateFlags {
if flag.String() == key {
_, ok := flag.(mcnflag.IntFlag)
if !ok {
o.InvalidFlags = append(o.InvalidFlags, flag.String())
}
}
}
value, present := o.FlagsValues[key].(int)
if present {
return value
}
return 42
}
func (o *CheckDriverOptions) Bool(key string) bool {
for _, flag := range o.CreateFlags {
if flag.String() == key {
_, ok := flag.(mcnflag.BoolFlag)
if !ok {
o.InvalidFlags = append(o.InvalidFlags, flag.String())
}
}
}
value, present := o.FlagsValues[key].(bool)
if present {
return value
}
return false
}