From c5ecadccdddf8bdc8a5756fbfac573faf36bb37d Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Mon, 11 Oct 2021 10:36:01 -0700 Subject: [PATCH] Fix swallowed errors in session package --- go/session/avisession.go | 38 ++++++++++++++++++++++++++--------- go/session/avisession_test.go | 34 ++++++++++++++++++++++++++----- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/go/session/avisession.go b/go/session/avisession.go index c94227b3a4..69ba8c0b24 100644 --- a/go/session/avisession.go +++ b/go/session/avisession.go @@ -279,7 +279,7 @@ const DEFAULT_API_RETRY_INTERVAL = 500 //NewAviSession initiates a session to AviController and returns it func NewAviSession(host string, username string, options ...func(*AviSession) error) (*AviSession, error) { - if flag.Parsed() == false { + if !flag.Parsed() { flag.Parse() } avisess := &AviSession{ @@ -342,7 +342,7 @@ func NewAviSession(host string, username string, options ...func(*AviSession) er } func (avisess *AviSession) initiateSession() error { - if avisess.insecure == true { + if avisess.insecure { glog.Warning("Strict certificate verification is *DISABLED*") } @@ -350,12 +350,18 @@ func (avisess *AviSession) initiateSession() error { if avisess.isTokenAuth() { switch { case avisess.refreshAuthToken != nil: - avisess.setAuthToken(avisess.refreshAuthToken()) + err := avisess.setAuthToken(avisess.refreshAuthToken()) + if err != nil { + return err + } case avisess.refreshAuthTokenV2 != nil: if token, err := avisess.refreshAuthTokenV2(); err != nil { return err } else { - avisess.setAuthToken(token) + err := avisess.setAuthToken(token) + if err != nil { + return err + } } } } @@ -650,7 +656,10 @@ func (avisess *AviSession) restRequest(verb string, uri string, payload interfac } if avisess.lazyAuthentication && avisess.sessionid == "" && !(uri == "" || uri == "login") { - avisess.initiateSession() + err := avisess.initiateSession() + if err != nil { + return nil, err + } } var payloadIO io.Reader @@ -702,7 +711,7 @@ func (avisess *AviSession) restRequest(verb string, uri string, payload interfac if retryReq { if !avisess.disableControllerStatusCheck { check, httpResp, err := avisess.CheckControllerStatus() - if check == false { + if !check { if resp != nil && resp.Body != nil { glog.Infof("Body is not nil, close it.") resp.Body.Close() @@ -787,7 +796,10 @@ func (avisess *AviSession) restMultipartUploadRequest(verb string, uri string, f } if avisess.lazyAuthentication && avisess.sessionid == "" && !(uri == "" || uri == "login") { - avisess.initiateSession() + err := avisess.initiateSession() + if err != nil { + return err + } } errorResult := AviError{Verb: verb, Url: url} @@ -865,7 +877,7 @@ func (avisess *AviSession) restMultipartUploadRequest(verb string, uri string, f if retryReq { check, _, err := avisess.CheckControllerStatus() - if check == false { + if !check { glog.Errorf("restMultipartUploadRequest Error during checking controller state") return err } @@ -944,7 +956,7 @@ func (avisess *AviSession) restMultipartDownloadRequest(verb string, uri string, if retryReq { check, _, err := avisess.CheckControllerStatus() - if check == false { + if !check { glog.Errorf("restMultipartDownloadRequest Error during checking controller state") return err } @@ -1349,6 +1361,9 @@ func getOptions(options []ApiOptionsParams) (*ApiOptions, error) { // GetObject performs GET and return object data func (avisess *AviSession) GetObject(obj string, options ...ApiOptionsParams) error { opts, err := getOptions(options) + if err != nil { + return err + } uri, err := avisess.GetUri(obj, options...) if err != nil { return err @@ -1409,7 +1424,10 @@ func (avisess *AviSession) Logout() error { } func (avisess *AviSession) ResetPassword(password string) error { - avisess.Logout() + err := avisess.Logout() + if err != nil { + return err + } avisess.password = password return nil } diff --git a/go/session/avisession_test.go b/go/session/avisession_test.go index 842e918108..54454eaeb3 100644 --- a/go/session/avisession_test.go +++ b/go/session/avisession_test.go @@ -85,6 +85,10 @@ func getValidTokenV2() (string, error) { SetAuthToken(AVI_AUTH_TOKEN), SetInsecure, SetTenant(AVI_TENANT), SetVersion(aviVersion)) } + if err != nil { + return "", err + } + err = aviAuthSessionV2.Post(tokenPath, data, &robj) if err != nil { glog.Infof("Error while getting auth token. [ERROR]: %s", err.Error()) @@ -113,12 +117,16 @@ func getSessions(t *testing.T) []*AviSession { SetTenant(AVI_TENANT), SetAuthToken(AVI_AUTH_TOKEN), SetInsecure, SetVersion(aviVersion)) } + if err != nil { + t.Errorf("Set tenant failed: %s", err.Error()) + } + var sessionSetAuthTokenV2 *AviSession sessionSetAuthTokenV2, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, SetRefreshAuthTokenCallbackV2(getValidTokenV2), SetInsecure, SetTenant(AVI_TENANT), SetVersion(aviVersion)) if err != nil { - t.Errorf("Session Creation failed: %s", err) + t.Errorf("Session Creation failed: %s", err.Error()) } if AVI_CONTROLLER != "localhost" { @@ -159,17 +167,17 @@ func testControllerStatusCheckLimits(t *testing.T) { // try to init the session with illegal inputs for controller status check limits. if AVI_PASSWORD != "" { - aviSession, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, + _, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, SetTenant(AVI_TENANT), SetPassword(AVI_PASSWORD), SetInsecure, SetLazyAuthentication(true), SetControllerStatusCheckLimits(0, -1), SetVersion(aviVersion)) } else { - aviSession, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, + _, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, SetTenant(AVI_TENANT), SetAuthToken(AVI_AUTH_TOKEN), SetInsecure, SetLazyAuthentication(true), SetControllerStatusCheckLimits(-2, -3), SetVersion(aviVersion)) } if err == nil { - t.Errorf("The Avi session go created with illegal arguments") + t.Errorf("The Avi session got created with illegal arguments") } if AVI_PASSWORD != "" { aviSession, err = NewAviSession(AVI_CONTROLLER, AVI_USERNAME, @@ -460,6 +468,10 @@ func TestTokenAuthRobustness(t *testing.T) { authTokenSessionCallback, err := NewAviSession(AVI_CONTROLLER, "admin", SetRefreshAuthTokenCallback(bogusAuthTokenFunction), SetInsecure) + if err != nil { + t.Errorf("Failed to create new session: %s", err.Error()) + } + var res interface{} err = authTokenSessionCallback.Get("api/tenant", &res) if err == nil { @@ -469,6 +481,10 @@ func TestTokenAuthRobustness(t *testing.T) { authTokenSession, err := NewAviSession(AVI_CONTROLLER, "admin", SetAuthToken("wrong-auth-token"), SetInsecure) + if err != nil { + t.Errorf("Failed to create new session: %s", err.Error()) + } + err = authTokenSession.Get("api/tenant", &res) if err == nil { t.Errorf("ERROR: Expected an error from incorrect token auth") @@ -480,6 +496,10 @@ func TestTokenAuthRobustnessV2(t *testing.T) { authTokenSessionCallback, err := NewAviSession(AVI_CONTROLLER, "admin", SetRefreshAuthTokenCallbackV2(bogusAuthTokenFunctionV2), SetInsecure) + if err != nil { + t.Errorf("Failed to create new session: %s", err.Error()) + } + var res interface{} err = authTokenSessionCallback.Get("api/tenant", &res) if err.Error() != "Invalid token from callback method" { @@ -628,7 +648,11 @@ func testTenantSwitch(t *testing.T, avisess *AviSession) { // Tests to check logout functionality func testApiLogout(t *testing.T, avisess *AviSession) { - avisess.Logout() + err := avisess.Logout() + if err != nil { + t.Errorf("Failed to logout: %s", err.Error()) + } + prevSsnId := avisess.sessionid var res interface{} if err := avisess.Get("api/pool", &res); err == nil {