mirror of https://github.com/docker/docs.git
240 lines
5.4 KiB
Go
240 lines
5.4 KiB
Go
package amazonec2
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/docker/machine/commands/commandstest"
|
|
"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 (
|
|
testSSHPort = 22
|
|
testDockerPort = 2376
|
|
testStoreDir = ".store-test"
|
|
machineTestName = "test-host"
|
|
machineTestDriverName = "none"
|
|
machineTestStorePath = "/test/path"
|
|
machineTestCaCert = "test-cert"
|
|
machineTestPrivateKey = "test-key"
|
|
)
|
|
|
|
var (
|
|
securityGroup = amz.SecurityGroup{
|
|
GroupName: "test-group",
|
|
GroupId: "12345",
|
|
VpcId: "12345",
|
|
}
|
|
)
|
|
|
|
func cleanup() error {
|
|
return os.RemoveAll(testStoreDir)
|
|
}
|
|
|
|
func getTestStorePath() (string, error) {
|
|
tmpDir, err := ioutil.TempDir("", "machine-test-")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
mcndirs.BaseDir = tmpDir
|
|
return tmpDir, nil
|
|
}
|
|
|
|
func getDefaultTestDriverFlags() *commandstest.FakeFlagger {
|
|
return &commandstest.FakeFlagger{
|
|
Data: map[string]interface{}{
|
|
"name": "test",
|
|
"url": "unix:///var/run/docker.sock",
|
|
"swarm": false,
|
|
"swarm-host": "",
|
|
"swarm-master": false,
|
|
"swarm-discovery": "",
|
|
"amazonec2-ami": "ami-12345",
|
|
"amazonec2-access-key": "abcdefg",
|
|
"amazonec2-secret-key": "12345",
|
|
"amazonec2-session-token": "",
|
|
"amazonec2-instance-type": "t1.micro",
|
|
"amazonec2-vpc-id": "vpc-12345",
|
|
"amazonec2-subnet-id": "subnet-12345",
|
|
"amazonec2-security-group": "docker-machine-test",
|
|
"amazonec2-region": "us-east-1",
|
|
"amazonec2-zone": "e",
|
|
"amazonec2-root-size": 10,
|
|
"amazonec2-iam-instance-profile": "",
|
|
"amazonec2-ssh-user": "ubuntu",
|
|
"amazonec2-request-spot-instance": false,
|
|
"amazonec2-spot-price": "",
|
|
"amazonec2-private-address-only": false,
|
|
"amazonec2-use-private-address": false,
|
|
"amazonec2-monitoring": false,
|
|
},
|
|
}
|
|
}
|
|
|
|
func getTestDriver() (*Driver, error) {
|
|
storePath, err := getTestStorePath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer cleanup()
|
|
|
|
d := NewDriver(machineTestName, storePath)
|
|
d.SetConfigFromFlags(getDefaultTestDriverFlags())
|
|
drv := d.(*Driver)
|
|
return drv, nil
|
|
}
|
|
|
|
func TestConfigureSecurityGroupPermissionsEmpty(t *testing.T) {
|
|
d, err := getTestDriver()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer cleanup()
|
|
|
|
group := securityGroup
|
|
perms := d.configureSecurityGroupPermissions(&group)
|
|
if len(perms) != 2 {
|
|
t.Fatalf("expected 2 permissions; received %d", len(perms))
|
|
}
|
|
}
|
|
|
|
func TestConfigureSecurityGroupPermissionsSshOnly(t *testing.T) {
|
|
d, err := getTestDriver()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer cleanup()
|
|
|
|
group := securityGroup
|
|
|
|
group.IpPermissions = []amz.IpPermission{
|
|
{
|
|
IpProtocol: "tcp",
|
|
FromPort: testSSHPort,
|
|
ToPort: testSSHPort,
|
|
},
|
|
}
|
|
|
|
perms := d.configureSecurityGroupPermissions(&group)
|
|
if len(perms) != 1 {
|
|
t.Fatalf("expected 1 permission; received %d", len(perms))
|
|
}
|
|
|
|
receivedPort := perms[0].FromPort
|
|
if receivedPort != testDockerPort {
|
|
t.Fatalf("expected permission on port %d; received port %d", testDockerPort, receivedPort)
|
|
}
|
|
}
|
|
|
|
func TestConfigureSecurityGroupPermissionsDockerOnly(t *testing.T) {
|
|
d, err := getTestDriver()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer cleanup()
|
|
|
|
group := securityGroup
|
|
|
|
group.IpPermissions = []amz.IpPermission{
|
|
{
|
|
IpProtocol: "tcp",
|
|
FromPort: testDockerPort,
|
|
ToPort: testDockerPort,
|
|
},
|
|
}
|
|
|
|
perms := d.configureSecurityGroupPermissions(&group)
|
|
if len(perms) != 1 {
|
|
t.Fatalf("expected 1 permission; received %d", len(perms))
|
|
}
|
|
|
|
receivedPort := perms[0].FromPort
|
|
if receivedPort != testSSHPort {
|
|
t.Fatalf("expected permission on port %d; received port %d", testSSHPort, receivedPort)
|
|
}
|
|
}
|
|
|
|
func TestConfigureSecurityGroupPermissionsDockerAndSsh(t *testing.T) {
|
|
d, err := getTestDriver()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer cleanup()
|
|
|
|
group := securityGroup
|
|
|
|
group.IpPermissions = []amz.IpPermission{
|
|
{
|
|
IpProtocol: "tcp",
|
|
FromPort: testSSHPort,
|
|
ToPort: testSSHPort,
|
|
},
|
|
{
|
|
IpProtocol: "tcp",
|
|
FromPort: testDockerPort,
|
|
ToPort: testDockerPort,
|
|
},
|
|
}
|
|
|
|
perms := d.configureSecurityGroupPermissions(&group)
|
|
if len(perms) != 0 {
|
|
t.Fatalf("expected 0 permissions; received %d", len(perms))
|
|
}
|
|
}
|
|
|
|
func TestAwsRegionList(t *testing.T) {
|
|
}
|
|
|
|
func TestValidateAwsRegionValid(t *testing.T) {
|
|
regions := []string{"eu-west-1", "eu-central-1"}
|
|
|
|
for _, v := range regions {
|
|
r, err := validateAwsRegion(v)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if v != r {
|
|
t.Fatal("Wrong region returned")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestValidateAwsRegionInvalid(t *testing.T) {
|
|
regions := []string{"eu-west-2", "eu-central-2"}
|
|
|
|
for _, v := range regions {
|
|
r, err := validateAwsRegion(v)
|
|
if err == nil {
|
|
t.Fatal("No error returned")
|
|
}
|
|
|
|
if v == r {
|
|
t.Fatal("Wrong region returned")
|
|
}
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|