docs/libmachine/host/migrate_test.go

181 lines
5.9 KiB
Go

package host
import (
"testing"
"github.com/docker/machine/drivers/none"
"github.com/docker/machine/libmachine/auth"
"github.com/stretchr/testify/assert"
)
func TestMigrateHost(t *testing.T) {
testCases := []struct {
description string
hostBefore *Host
rawData []byte
expectedHostAfter *Host
expectedMigrationPerformed bool
expectedMigrationError error
}{
{
// Point of this test is largely that no matter what was in RawDriver
// before, it shoud load into the Host struct based on what is actually
// in the Driver field.
//
// Note that we don't check for the presence of RawDriver's literal "on
// disk" here. It's intentional.
description: "Config version 3 load with existing RawDriver on disk",
hostBefore: &Host{
Name: "default",
},
rawData: []byte(`{
"ConfigVersion": 3,
"Driver": {"MachineName": "default"},
"DriverName": "virtualbox",
"HostOptions": {
"Driver": "",
"Memory": 0,
"Disk": 0,
"AuthOptions": {
"StorePath": "/Users/nathanleclaire/.docker/machine/machines/default"
}
},
"Name": "default",
"RawDriver": "eyJWQm94TWFuYWdlciI6e30sIklQQWRkcmVzcyI6IjE5Mi4xNjguOTkuMTAwIiwiTWFjaGluZU5hbWUiOiJkZWZhdWx0IiwiU1NIVXNlciI6ImRvY2tlciIsIlNTSFBvcnQiOjU4MTQ1LCJTU0hLZXlQYXRoIjoiL1VzZXJzL25hdGhhbmxlY2xhaXJlLy5kb2NrZXIvbWFjaGluZS9tYWNoaW5lcy9kZWZhdWx0L2lkX3JzYSIsIlN0b3JlUGF0aCI6Ii9Vc2Vycy9uYXRoYW5sZWNsYWlyZS8uZG9ja2VyL21hY2hpbmUiLCJTd2FybU1hc3RlciI6ZmFsc2UsIlN3YXJtSG9zdCI6InRjcDovLzAuMC4wLjA6MzM3NiIsIlN3YXJtRGlzY292ZXJ5IjoiIiwiQ1BVIjoxLCJNZW1vcnkiOjEwMjQsIkRpc2tTaXplIjoyMDAwMCwiQm9vdDJEb2NrZXJVUkwiOiIiLCJCb290MkRvY2tlckltcG9ydFZNIjoiIiwiSG9zdE9ubHlDSURSIjoiMTkyLjE2OC45OS4xLzI0IiwiSG9zdE9ubHlOaWNUeXBlIjoiODI1NDBFTSIsIkhvc3RPbmx5UHJvbWlzY01vZGUiOiJkZW55IiwiTm9TaGFyZSI6ZmFsc2V9"
}`),
expectedHostAfter: &Host{
ConfigVersion: 3,
HostOptions: &Options{
AuthOptions: &auth.Options{
StorePath: "/Users/nathanleclaire/.docker/machine/machines/default",
},
},
Name: "default",
DriverName: "virtualbox",
RawDriver: []byte(`{"MachineName": "default"}`),
Driver: &RawDataDriver{
Data: []byte(`{"MachineName": "default"}`),
// TODO (nathanleclaire): The "." argument here is a already existing
// bug (or at least likely to cause them in the future) and most
// likely should be "/Users/nathanleclaire/.docker/machine"
//
// These default StorePath settings get over-written when we
// instantiate the plugin driver, but this seems entirely incidental.
Driver: none.NewDriver("default", "."),
},
},
expectedMigrationPerformed: false,
expectedMigrationError: nil,
},
{
description: "Config version 4 (from the FUTURE) on disk",
hostBefore: &Host{
Name: "default",
},
rawData: []byte(`{
"ConfigVersion": 4,
"Driver": {"MachineName": "default"},
"DriverName": "virtualbox",
"HostOptions": {
"Driver": "",
"Memory": 0,
"Disk": 0,
"AuthOptions": {
"StorePath": "/Users/nathanleclaire/.docker/machine/machines/default"
}
},
"Name": "default"
}`),
expectedHostAfter: nil,
expectedMigrationPerformed: false,
expectedMigrationError: errConfigFromFuture,
},
{
description: "Config version 3 load WITHOUT any existing RawDriver field on disk",
hostBefore: &Host{
Name: "default",
},
rawData: []byte(`{
"ConfigVersion": 3,
"Driver": {"MachineName": "default"},
"DriverName": "virtualbox",
"HostOptions": {
"Driver": "",
"Memory": 0,
"Disk": 0,
"AuthOptions": {
"StorePath": "/Users/nathanleclaire/.docker/machine/machines/default"
}
},
"Name": "default"
}`),
expectedHostAfter: &Host{
ConfigVersion: 3,
HostOptions: &Options{
AuthOptions: &auth.Options{
StorePath: "/Users/nathanleclaire/.docker/machine/machines/default",
},
},
Name: "default",
DriverName: "virtualbox",
RawDriver: []byte(`{"MachineName": "default"}`),
Driver: &RawDataDriver{
Data: []byte(`{"MachineName": "default"}`),
// TODO: See note above.
Driver: none.NewDriver("default", "."),
},
},
expectedMigrationPerformed: false,
expectedMigrationError: nil,
},
{
description: "Config version 2 load and migrate. Ensure StorePath gets set properly.",
hostBefore: &Host{
Name: "default",
},
rawData: []byte(`{
"ConfigVersion": 2,
"Driver": {"MachineName": "default"},
"DriverName": "virtualbox",
"HostOptions": {
"Driver": "",
"Memory": 0,
"Disk": 0,
"AuthOptions": {
"StorePath": "/Users/nathanleclaire/.docker/machine/machines/default"
}
},
"StorePath": "/Users/nathanleclaire/.docker/machine/machines/default",
"Name": "default"
}`),
expectedHostAfter: &Host{
ConfigVersion: 3,
HostOptions: &Options{
AuthOptions: &auth.Options{
StorePath: "/Users/nathanleclaire/.docker/machine/machines/default",
},
},
Name: "default",
DriverName: "virtualbox",
RawDriver: []byte(`{"MachineName":"default","StorePath":"/Users/nathanleclaire/.docker/machine"}`),
Driver: &RawDataDriver{
Data: []byte(`{"MachineName":"default","StorePath":"/Users/nathanleclaire/.docker/machine"}`),
Driver: none.NewDriver("default", "/Users/nathanleclaire/.docker/machine"),
},
},
expectedMigrationPerformed: true,
expectedMigrationError: nil,
},
}
for _, tc := range testCases {
actualHostAfter, actualMigrationPerformed, actualMigrationError := MigrateHost(tc.hostBefore, tc.rawData)
assert.Equal(t, tc.expectedHostAfter, actualHostAfter)
assert.Equal(t, tc.expectedMigrationPerformed, actualMigrationPerformed)
assert.Equal(t, tc.expectedMigrationError, actualMigrationError)
}
}