72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
| package silly
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"net/http/httptest"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/distribution/distribution/v3/context"
 | |
| 	"github.com/distribution/distribution/v3/registry/auth"
 | |
| )
 | |
| 
 | |
| func TestSillyAccessController(t *testing.T) {
 | |
| 	ac := &accessController{
 | |
| 		realm:   "test-realm",
 | |
| 		service: "test-service",
 | |
| 	}
 | |
| 
 | |
| 	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | |
| 		ctx := context.WithRequest(context.Background(), r)
 | |
| 		authCtx, err := ac.Authorized(ctx)
 | |
| 		if err != nil {
 | |
| 			switch err := err.(type) {
 | |
| 			case auth.Challenge:
 | |
| 				err.SetHeaders(r, w)
 | |
| 				w.WriteHeader(http.StatusUnauthorized)
 | |
| 				return
 | |
| 			default:
 | |
| 				t.Fatalf("unexpected error authorizing request: %v", err)
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		userInfo, ok := authCtx.Value(auth.UserKey).(auth.UserInfo)
 | |
| 		if !ok {
 | |
| 			t.Fatal("silly accessController did not set auth.user context")
 | |
| 		}
 | |
| 
 | |
| 		if userInfo.Name != "silly" {
 | |
| 			t.Fatalf("expected user name %q, got %q", "silly", userInfo.Name)
 | |
| 		}
 | |
| 
 | |
| 		w.WriteHeader(http.StatusNoContent)
 | |
| 	}))
 | |
| 
 | |
| 	resp, err := http.Get(server.URL)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("unexpected error during GET: %v", err)
 | |
| 	}
 | |
| 	defer resp.Body.Close()
 | |
| 
 | |
| 	// Request should not be authorized
 | |
| 	if resp.StatusCode != http.StatusUnauthorized {
 | |
| 		t.Fatalf("unexpected response status: %v != %v", resp.StatusCode, http.StatusUnauthorized)
 | |
| 	}
 | |
| 
 | |
| 	req, err := http.NewRequest(http.MethodGet, server.URL, nil)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("unexpected error creating new request: %v", err)
 | |
| 	}
 | |
| 	req.Header.Set("Authorization", "seriously, anything")
 | |
| 
 | |
| 	resp, err = http.DefaultClient.Do(req)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("unexpected error during GET: %v", err)
 | |
| 	}
 | |
| 	defer resp.Body.Close()
 | |
| 
 | |
| 	// Request should not be authorized
 | |
| 	if resp.StatusCode != http.StatusNoContent {
 | |
| 		t.Fatalf("unexpected response status: %v != %v", resp.StatusCode, http.StatusNoContent)
 | |
| 	}
 | |
| }
 |