72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
package silly
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/docker/distribution/context"
 | 
						|
	"github.com/docker/distribution/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("GET", 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)
 | 
						|
	}
 | 
						|
}
 |