Skip to content

Commit 1243086

Browse files
committed
Add error messages to test framework when changing user
1 parent 0c37d86 commit 1243086

File tree

5 files changed

+30
-22
lines changed

5 files changed

+30
-22
lines changed

pkg/cmd/util/tokencmd/request_token.go

+16-15
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ import (
99
"net/url"
1010
"strings"
1111

12+
"github.com/RangelReale/osincli"
13+
"github.com/golang/glog"
14+
"github.com/pkg/errors"
15+
1216
apierrs "k8s.io/apimachinery/pkg/api/errors"
1317
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1418
"k8s.io/apimachinery/pkg/util/sets"
1519
restclient "k8s.io/client-go/rest"
1620

1721
"github.com/openshift/origin/pkg/oauth/util"
18-
19-
"github.com/RangelReale/osincli"
20-
"github.com/golang/glog"
2122
)
2223

2324
const (
@@ -106,23 +107,23 @@ func (o *RequestTokenOptions) SetDefaultOsinConfig() error {
106107
// get the OAuth metadata from the server
107108
rt, err := restclient.TransportFor(o.ClientConfig)
108109
if err != nil {
109-
return err
110+
return errors.Wrap(err, "failed to get transport for client")
110111
}
111112

112113
requestURL := strings.TrimRight(o.ClientConfig.Host, "/") + oauthMetadataEndpoint
113114
resp, err := request(rt, requestURL, nil)
114115
if err != nil {
115-
return err
116+
return errors.Wrapf(err, "failed to request OAuth metadata at url %q", requestURL)
116117
}
117118
defer resp.Body.Close()
118119

119120
if resp.StatusCode != http.StatusOK {
120-
return fmt.Errorf("couldn't get %v: unexpected response status %v", requestURL, resp.StatusCode)
121+
return errors.Errorf("couldn't get %q: unexpected response status %q", requestURL, resp.Status)
121122
}
122123

123124
metadata := &util.OauthAuthorizationServerMetadata{}
124125
if err := json.NewDecoder(resp.Body).Decode(metadata); err != nil {
125-
return err
126+
return errors.Wrap(err, "failed to decode OAuth metadata")
126127
}
127128

128129
// use the metadata to build the osin config
@@ -134,7 +135,7 @@ func (o *RequestTokenOptions) SetDefaultOsinConfig() error {
134135
}
135136
if !o.TokenFlow && sets.NewString(metadata.CodeChallengeMethodsSupported...).Has(pkce_s256) {
136137
if err := osincli.PopulatePKCE(config); err != nil {
137-
return err
138+
return errors.Wrap(err, "failed to populate PKCE")
138139
}
139140
}
140141

@@ -159,18 +160,18 @@ func (o *RequestTokenOptions) RequestToken() (string, error) {
159160

160161
rt, err := restclient.TransportFor(o.ClientConfig)
161162
if err != nil {
162-
return "", err
163+
return "", errors.Wrapf(err, "failed to create transport for client")
163164
}
164165

165166
if o.OsinConfig == nil {
166167
if err := o.SetDefaultOsinConfig(); err != nil {
167-
return "", err
168+
return "", errors.Wrapf(err, "failed to set default osin config")
168169
}
169170
}
170171

171172
client, err := osincli.NewClient(o.OsinConfig)
172173
if err != nil {
173-
return "", err
174+
return "", errors.Wrapf(err, "failed to create new client")
174175
}
175176
client.Transport = rt
176177
authorizeRequest := client.NewAuthorizeRequest(osincli.CODE) // assume code flow to start with
@@ -200,7 +201,7 @@ func (o *RequestTokenOptions) RequestToken() (string, error) {
200201
// Make the request
201202
resp, err := request(rt, requestURL, requestHeaders)
202203
if err != nil {
203-
return "", err
204+
return "", errors.Wrapf(err, "failed to request token")
204205
}
205206
defer resp.Body.Close()
206207

@@ -212,7 +213,7 @@ func (o *RequestTokenOptions) RequestToken() (string, error) {
212213
// Handle the challenge
213214
newRequestHeaders, shouldRetry, err := o.Handler.HandleChallenge(requestURL, resp.Header)
214215
if err != nil {
215-
return "", err
216+
return "", errors.Wrapf(err, "failed to handle challenge")
216217
}
217218
if !shouldRetry {
218219
return "", apierrs.NewUnauthorized("challenger chose not to retry the request")
@@ -246,7 +247,7 @@ func (o *RequestTokenOptions) RequestToken() (string, error) {
246247
// this is required for negotiate flows with mutual authentication.
247248
if handledChallenge {
248249
if err := o.Handler.CompleteChallenge(requestURL, resp.Header); err != nil {
249-
return "", err
250+
return "", errors.Wrapf(err, "failed to complete challenge")
250251
}
251252
}
252253

@@ -256,7 +257,7 @@ func (o *RequestTokenOptions) RequestToken() (string, error) {
256257
// OAuth response case
257258
accessToken, err := oauthTokenFunc(redirectURL)
258259
if err != nil {
259-
return "", err
260+
return "", errors.Wrapf(err, "failed to get token after redirect")
260261
}
261262
if len(accessToken) > 0 {
262263
return accessToken, nil

pkg/oc/cli/cmd/login/login.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package login
22

33
import (
4-
"errors"
54
"fmt"
65
"io"
76
"net/url"
87
"os"
98

9+
"github.com/pkg/errors"
1010
"github.com/spf13/cobra"
1111

1212
kapierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -69,10 +69,12 @@ func NewCmdLogin(fullName string, f *osclientcmd.Factory, reader io.Reader, out,
6969

7070
err := RunLogin(cmd, options)
7171

72-
if kapierrors.IsUnauthorized(err) {
72+
// We need to unwrap error so it's type can be checked later
73+
unwrappedErr := errors.Cause(err)
74+
if kapierrors.IsUnauthorized(unwrappedErr) {
7375
fmt.Fprintln(out, "Login failed (401 Unauthorized)")
7476

75-
if err, isStatusErr := err.(*kapierrors.StatusError); isStatusErr {
77+
if err, isStatusErr := unwrappedErr.(*kapierrors.StatusError); isStatusErr {
7678
if details := err.Status().Details; details != nil {
7779
for _, cause := range details.Causes {
7880
fmt.Fprintln(out, cause.Message)

pkg/oc/cli/cmd/login/loginoptions_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"testing"
1414

1515
"github.com/MakeNowJust/heredoc"
16+
"github.com/pkg/errors"
1617

1718
"github.com/openshift/origin/pkg/client/config"
1819
"github.com/openshift/origin/pkg/oauth/util"
@@ -331,7 +332,7 @@ func TestPreserveErrTypeAuthInfo(t *testing.T) {
331332
t.Fatalf("expecting unauthorized error when gathering authinfo")
332333
}
333334

334-
if !kapierrs.IsUnauthorized(err) {
335+
if !kapierrs.IsUnauthorized(errors.Cause(err)) {
335336
t.Fatalf("expecting error of type metav1.StatusReasonUnauthorized, but got %T", err)
336337
}
337338
}

test/integration/oauth_basicauth_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"testing"
1111
"time"
1212

13+
"github.com/pkg/errors"
14+
1315
apierrs "k8s.io/apimachinery/pkg/api/errors"
1416
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1517
restclient "k8s.io/client-go/rest"
@@ -360,7 +362,7 @@ func TestOAuthBasicAuthPassword(t *testing.T) {
360362
if !tc.ExpectSuccess {
361363
if err == nil {
362364
t.Errorf("%s: Expected error, got token=%v", k, accessToken)
363-
} else if statusErr, ok := err.(*apierrs.StatusError); !ok {
365+
} else if statusErr, ok := errors.Cause(err).(*apierrs.StatusError); !ok {
364366
t.Errorf("%s: expected status error, got %#v", k, err)
365367
} else if statusErr.ErrStatus.Code != tc.ExpectErrStatus {
366368
t.Errorf("%s: expected error status %d, got %#v", k, tc.ExpectErrStatus, statusErr)

test/util/client.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"path/filepath"
99
"time"
1010

11+
"github.com/pkg/errors"
12+
1113
kerrs "k8s.io/apimachinery/pkg/api/errors"
1214
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1315
"k8s.io/apimachinery/pkg/fields"
@@ -65,15 +67,15 @@ func GetClusterAdminClientConfigOrDie(adminKubeConfigFile string) *restclient.Co
6567
func GetClientForUser(clientConfig *restclient.Config, username string) (kclientset.Interface, *restclient.Config, error) {
6668
token, err := tokencmd.RequestToken(clientConfig, nil, username, "password")
6769
if err != nil {
68-
return nil, nil, err
70+
return nil, nil, errors.Wrapf(err, "failed to request token")
6971
}
7072

7173
userClientConfig := restclient.AnonymousClientConfig(clientConfig)
7274
userClientConfig.BearerToken = token
7375

7476
kubeClientset, err := kclientset.NewForConfig(userClientConfig)
7577
if err != nil {
76-
return nil, nil, err
78+
return nil, nil, errors.Wrapf(err, "failed to create new kube clientset config")
7779
}
7880

7981
return kubeClientset, userClientConfig, nil

0 commit comments

Comments
 (0)