Skip to content

Commit

Permalink
Fix regression (#97)
Browse files Browse the repository at this point in the history
When VaaS registration request was unsuccessful, executor crashed.
This happened because *sh.backendID was nil pointer when referenced, it
turned out,it is set only after correct response from server.
  • Loading branch information
tomez authored Mar 20, 2018
1 parent 476ae4d commit 36bedd2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
3 changes: 1 addition & 2 deletions hook/vaas/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,7 @@ func (sh *Hook) RegisterBackend(taskInfo mesosutils.TaskInfo) error {
}
_, err = sh.client.AddBackend(backend)
if err != nil {
return fmt.Errorf("unable to register backend with VaaS, %s: %d, reason: %s",
vaasBackendIDKey, *sh.backendID, err)
return fmt.Errorf("unable to register backend with VaaS, %s", err)
}
sh.backendID = backend.ID

Expand Down
31 changes: 30 additions & 1 deletion hook/vaas/hook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package vaas

import (
"errors"
"fmt"
"os"
"testing"

Expand Down Expand Up @@ -94,7 +95,6 @@ func TestIfBackendIDSetWhenBackendRegistrationSucceeds(t *testing.T) {
}).Return("/api/v0.1/backend/123/", nil)

serviceHook := Hook{client: mockClient}

err := serviceHook.RegisterBackend(prepareTaskInfoWithDirector("abc456"))

require.NoError(t, err)
Expand All @@ -103,6 +103,35 @@ func TestIfBackendIDSetWhenBackendRegistrationSucceeds(t *testing.T) {
mockClient.AssertExpectations(t)
}

func TestBackendRegistrationWhenAddBackendFails(t *testing.T) {
_ = os.Setenv("CLOUD_DC", "dc6")
defer os.Unsetenv("CLOUD_DC")

mockClient := new(MockClient)
mockDC := DC{
ID: 1,
ResourceURI: "dc/6",
}

mockClient.On("GetDC", "dc6").Return(&mockDC, nil)
mockClient.On("FindDirectorID", "abc456").Return(456, nil)
weight := 50
mockClient.On("AddBackend", &Backend{
Address: runenv.IP().String(),
DC: mockDC,
Director: "/api/v0.1/director/456/",
InheritTimeProfile: true,
Port: 8080,
Weight: &weight,
}).Return("/api/v0.1/backend/123/", fmt.Errorf("test error"))

serviceHook := Hook{client: mockClient}
err := serviceHook.RegisterBackend(prepareTaskInfoWithDirector("abc456"))

require.EqualError(t, err, "unable to register backend with VaaS, test error")
mockClient.AssertExpectations(t)
}

func TestIfWeightIsOverriddenByEnvironmentVariable(t *testing.T) {
_ = os.Setenv("CLOUD_DC", "dc6")
defer os.Unsetenv("CLOUD_DC")
Expand Down

0 comments on commit 36bedd2

Please sign in to comment.