Merge pull request #96 from dlorenc/save

Fix bug in start.
pull/90/head
dlorenc 2016-05-19 16:47:17 -07:00
commit 301eb44838
3 changed files with 39 additions and 38 deletions

View File

@ -60,6 +60,9 @@ func StartHost(api libmachine.API, config MachineConfig) (*host.Host, error) {
if err := h.Driver.Start(); err != nil {
return nil, fmt.Errorf("Error starting stopped host: %s", err)
}
if err := api.Save(h); err != nil {
return nil, fmt.Errorf("Error saving started host: %s", err)
}
}
return h, nil
} else {

View File

@ -32,7 +32,7 @@ import (
)
func TestCreateHost(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
exists, _ := api.Exists(constants.MachineName)
if exists {
@ -97,7 +97,7 @@ func TestStartClusterError(t *testing.T) {
}
func TestStartHostExists(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
// Create an initial host.
_, err := createHost(api, MachineConfig{})
if err != nil {
@ -124,7 +124,7 @@ func TestStartHostExists(t *testing.T) {
}
func TestStartStoppedHost(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
// Create an initial host.
h, err := createHost(api, MachineConfig{})
if err != nil {
@ -145,10 +145,14 @@ func TestStartStoppedHost(t *testing.T) {
if s, _ := h.Driver.GetState(); s != state.Running {
t.Fatalf("Machine not started.")
}
if !api.SaveCalled {
t.Fatalf("Machine must be saved after starting.")
}
}
func TestStartHost(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
h, err := StartHost(api, MachineConfig{})
if err != nil {
@ -166,14 +170,14 @@ func TestStartHost(t *testing.T) {
}
func TestStopHostError(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
if err := StopHost(api); err == nil {
t.Fatal("An error should be thrown when stopping non-existing machine.")
}
}
func TestStopHost(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
h, _ := createHost(api, MachineConfig{})
if err := StopHost(api); err != nil {
t.Fatal("An error should be thrown when stopping non-existing machine.")
@ -204,7 +208,7 @@ Error 2`
}
func TestDeleteHost(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
createHost(api, MachineConfig{})
if err := DeleteHost(api); err != nil {
@ -213,7 +217,7 @@ func TestDeleteHost(t *testing.T) {
}
func TestDeleteHostErrorDeletingVM(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
h, _ := createHost(api, MachineConfig{})
d := &tests.MockDriver{RemoveError: true}
@ -226,7 +230,8 @@ func TestDeleteHostErrorDeletingVM(t *testing.T) {
}
func TestDeleteHostErrorDeletingFiles(t *testing.T) {
api := &tests.MockAPI{RemoveError: true}
api := tests.NewMockAPI()
api.RemoveError = true
createHost(api, MachineConfig{})
if err := DeleteHost(api); err == nil {
@ -235,9 +240,8 @@ func TestDeleteHostErrorDeletingFiles(t *testing.T) {
}
func TestDeleteHostMultipleErrors(t *testing.T) {
api := &tests.MockAPI{
RemoveError: true,
}
api := tests.NewMockAPI()
api.RemoveError = true
h, _ := createHost(api, MachineConfig{})
d := &tests.MockDriver{RemoveError: true}
@ -259,7 +263,7 @@ func TestDeleteHostMultipleErrors(t *testing.T) {
}
func TestGetHostStatus(t *testing.T) {
api := &tests.MockAPI{}
api := tests.NewMockAPI()
checkState := func(expected string) {
s, err := GetHostStatus(api)

View File

@ -29,9 +29,17 @@ import (
// MockAPI is a struct used to mock out libmachine.API
type MockAPI struct {
Hosts []*host.Host
Hosts map[string]*host.Host
CreateError bool
RemoveError bool
SaveCalled bool
}
func NewMockAPI() *MockAPI {
m := MockAPI{
Hosts: make(map[string]*host.Host),
}
return &m
}
// Close closes the API.
@ -65,13 +73,8 @@ func (api *MockAPI) Create(h *host.Host) error {
// Exists determines if the host already exists.
func (api *MockAPI) Exists(name string) (bool, error) {
for _, host := range api.Hosts {
if name == host.Name {
return true, nil
}
}
return false, nil
_, ok := api.Hosts[name]
return ok, nil
}
// List the existing hosts.
@ -81,15 +84,14 @@ func (api *MockAPI) List() ([]string, error) {
// Load loads a host from disk.
func (api *MockAPI) Load(name string) (*host.Host, error) {
for _, host := range api.Hosts {
if name == host.Name {
return host, nil
h, ok := api.Hosts[name]
if !ok {
return nil, mcnerror.ErrHostDoesNotExist{
Name: name,
}
}
return nil, mcnerror.ErrHostDoesNotExist{
Name: name,
}
return h, nil
}
// Remove a host.
@ -98,22 +100,14 @@ func (api *MockAPI) Remove(name string) error {
return fmt.Errorf("Error removing %s", name)
}
newHosts := []*host.Host{}
for _, host := range api.Hosts {
if name != host.Name {
newHosts = append(newHosts, host)
}
}
api.Hosts = newHosts
delete(api.Hosts, name)
return nil
}
// Save saves a host to disk.
func (api *MockAPI) Save(host *host.Host) error {
api.Hosts = append(api.Hosts, host)
api.Hosts[host.Name] = host
api.SaveCalled = true
return nil
}