93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package filemanager
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
var defaultCredentials = "{\"username\":\"admin\",\"password\":\"admin\"}"
 | 
						|
 | 
						|
var authHandlerTests = []struct {
 | 
						|
	Data     string
 | 
						|
	Expected int
 | 
						|
}{
 | 
						|
	{defaultCredentials, http.StatusOK},
 | 
						|
	{"{\"username\":\"admin\",\"password\":\"wrong\"}", http.StatusForbidden},
 | 
						|
	{"{\"username\":\"wrong\",\"password\":\"admin\"}", http.StatusForbidden},
 | 
						|
}
 | 
						|
 | 
						|
func TestAuthHandler(t *testing.T) {
 | 
						|
	fm := newTest(t)
 | 
						|
	defer fm.Clean()
 | 
						|
 | 
						|
	for _, test := range authHandlerTests {
 | 
						|
		req, err := http.NewRequest("POST", "/api/auth/get", strings.NewReader(test.Data))
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal(err)
 | 
						|
		}
 | 
						|
 | 
						|
		w := httptest.NewRecorder()
 | 
						|
		fm.ServeHTTP(w, req)
 | 
						|
 | 
						|
		if w.Code != test.Expected {
 | 
						|
			t.Errorf("Wrong status code: got %v want %v", w.Code, test.Expected)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRenewHandler(t *testing.T) {
 | 
						|
	fm := newTest(t)
 | 
						|
	defer fm.Clean()
 | 
						|
 | 
						|
	// First, we have to make an auth request to get the user authenticated,
 | 
						|
	r, err := http.NewRequest("POST", "/api/auth/get", strings.NewReader(defaultCredentials))
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	w := httptest.NewRecorder()
 | 
						|
	fm.ServeHTTP(w, r)
 | 
						|
 | 
						|
	if w.Code != http.StatusOK {
 | 
						|
		t.Errorf("Couldn't authenticate: got %v", w.Code)
 | 
						|
	}
 | 
						|
 | 
						|
	token := w.Body.String()
 | 
						|
 | 
						|
	// Test renew authorization via Authorization Header.
 | 
						|
	r, err = http.NewRequest("GET", "/api/auth/renew", nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	r.Header.Set("Authorization", "Bearer "+token)
 | 
						|
	w = httptest.NewRecorder()
 | 
						|
	fm.ServeHTTP(w, r)
 | 
						|
 | 
						|
	if w.Code != http.StatusOK {
 | 
						|
		t.Errorf("Can't renew auth via header: got %v", w.Code)
 | 
						|
	}
 | 
						|
 | 
						|
	// Test renew authorization via cookie field.
 | 
						|
	r, err = http.NewRequest("GET", "/api/auth/renew", nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	r.AddCookie(&http.Cookie{
 | 
						|
		Value:   token,
 | 
						|
		Name:    "auth",
 | 
						|
		Expires: time.Now().Add(1 * time.Hour),
 | 
						|
	})
 | 
						|
 | 
						|
	w = httptest.NewRecorder()
 | 
						|
	fm.ServeHTTP(w, r)
 | 
						|
 | 
						|
	if w.Code != http.StatusOK {
 | 
						|
		t.Errorf("Can't renew auth via cookie: got %v", w.Code)
 | 
						|
	}
 | 
						|
}
 |