1
1
package login
2
2
3
3
import (
4
+ "bytes"
4
5
"crypto/tls"
6
+ "encoding/json"
5
7
"fmt"
8
+ "io/ioutil"
6
9
"net/http"
7
10
"net/http/httptest"
8
11
"regexp"
@@ -12,8 +15,11 @@ import (
12
15
"github.com/MakeNowJust/heredoc"
13
16
14
17
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
18
+ "github.com/openshift/origin/pkg/cmd/util/tokencmd"
19
+ "github.com/openshift/origin/pkg/oauth/util"
15
20
"github.com/openshift/origin/pkg/oc/cli/config"
16
21
22
+ kapierrs "k8s.io/apimachinery/pkg/api/errors"
17
23
restclient "k8s.io/client-go/rest"
18
24
kclientcmdapi "k8s.io/client-go/tools/clientcmd/api"
19
25
)
@@ -256,6 +262,77 @@ func TestDialToHTTPServer(t *testing.T) {
256
262
}
257
263
}
258
264
265
+ type oauthMetadataResponse struct {
266
+ metadata * util.OauthAuthorizationServerMetadata
267
+ }
268
+
269
+ func (r * oauthMetadataResponse ) Serialize () ([]byte , error ) {
270
+ b , err := json .Marshal (r .metadata )
271
+ if err != nil {
272
+ return []byte {}, err
273
+ }
274
+
275
+ return b , nil
276
+ }
277
+
278
+ func TestPreserveErrTypeAuthInfo (t * testing.T ) {
279
+ invoked := make (chan struct {}, 2 )
280
+ oauthResponse := []byte {}
281
+
282
+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
283
+ select {
284
+ case invoked <- struct {}{}:
285
+ default :
286
+ t .Fatalf ("unexpected request handled by test server: %v: %v" , r .Method , r .URL )
287
+ }
288
+
289
+ if r .URL .Path == tokencmd .OauthMetadataEndpoint {
290
+ w .WriteHeader (http .StatusOK )
291
+ w .Write (oauthResponse )
292
+ return
293
+ }
294
+ w .WriteHeader (http .StatusUnauthorized )
295
+ }))
296
+ defer server .Close ()
297
+
298
+ metadataResponse := & oauthMetadataResponse {}
299
+ metadataResponse .metadata = & util.OauthAuthorizationServerMetadata {
300
+ Issuer : server .URL ,
301
+ AuthorizationEndpoint : server .URL + "/oauth/authorize" ,
302
+ TokenEndpoint : server .URL + "/oauth/token" ,
303
+ CodeChallengeMethodsSupported : []string {"plain" , "S256" },
304
+ }
305
+
306
+ oauthResponse , err := metadataResponse .Serialize ()
307
+ if err != nil {
308
+ t .Fatalf ("unexpected error: %v" , err )
309
+ }
310
+
311
+ options := & LoginOptions {
312
+ Server : server .URL ,
313
+ StartingKubeConfig : & kclientcmdapi.Config {},
314
+ Username : "test" ,
315
+ Password : "test" ,
316
+ Reader : bytes .NewReader ([]byte {}),
317
+
318
+ Config : & restclient.Config {
319
+ Host : server .URL ,
320
+ },
321
+
322
+ Out : ioutil .Discard ,
323
+ ErrOut : ioutil .Discard ,
324
+ }
325
+
326
+ err = options .gatherAuthInfo ()
327
+ if err == nil {
328
+ t .Fatalf ("expecting unauthorized error when gathering authinfo" )
329
+ }
330
+
331
+ if ! kapierrs .IsUnauthorized (err ) {
332
+ t .Fatalf ("expecting error of type metav1.StatusReasonUnauthorized, but got %T" , err )
333
+ }
334
+ }
335
+
259
336
func TestDialToHTTPSServer (t * testing.T ) {
260
337
invoked := make (chan struct {}, 1 )
261
338
server := httptest .NewTLSServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
0 commit comments