152 lines
3.5 KiB
Go
152 lines
3.5 KiB
Go
package snap
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"git.thirdmartini.com/pub/snap/auth"
|
|
)
|
|
|
|
|
|
var rootExpected = []byte(`
|
|
<html lang="en">
|
|
<head>
|
|
<link rel="stylesheet" href="/static/skin/css/normalize.css">
|
|
</head>
|
|
<body>
|
|
|
|
Test of things
|
|
|
|
</body>
|
|
</html>
|
|
`)
|
|
|
|
var testExpected = []byte(`
|
|
<html lang="en">
|
|
<head>
|
|
<link rel="stylesheet" href="/static/skin/css/normalize.css">
|
|
</head>
|
|
<body>
|
|
|
|
User: admin
|
|
|
|
</body>
|
|
</html>
|
|
`)
|
|
|
|
|
|
func handlerRoot(c *Context) {
|
|
c.RenderEx("index.html", nil)
|
|
}
|
|
|
|
func handlerLogin(c *Context) {
|
|
c.RenderEx("index.html", nil)
|
|
}
|
|
|
|
func handlerTest(c *Context) {
|
|
c.RenderEx("test.html", nil)
|
|
}
|
|
|
|
func doTestRequest(t *testing.T, req *http.Request) ([]byte, int, error){
|
|
resp, err := http.DefaultClient.Do(req)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, resp)
|
|
|
|
data, err := ioutil.ReadAll(resp.Body)
|
|
resp.Body.Close()
|
|
assert.Nil(t, err)
|
|
|
|
return data, resp.StatusCode, err
|
|
}
|
|
|
|
func TestServer_BasicAuth(t *testing.T) {
|
|
auth := auth.NewBasicAuth()
|
|
auth.AddUser("admin", "admin", "test")
|
|
|
|
s := New("", "/test", auth)
|
|
s.SetDebug(true)
|
|
s.SetTemplatePath("test/templates")
|
|
s.WithStaticFiles("/static", "test/static" )
|
|
s.WithTheme("skin/")
|
|
s.HandleFunc("/", handlerRoot)
|
|
s.HandleFuncAuthenticated("/login", "", handlerLogin)
|
|
s.HandleFuncAuthenticated("/test", "", handlerTest)
|
|
s.Dump()
|
|
|
|
ts := httptest.NewServer(s.router)
|
|
defer ts.Close()
|
|
|
|
// Simple Get:/
|
|
req, err := http.NewRequest(http.MethodGet, ts.URL, nil)
|
|
assert.Nil(t, err)
|
|
data, code, err := doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, rootExpected, data)
|
|
|
|
// Check GOOD password
|
|
req, err = http.NewRequest(http.MethodGet, ts.URL +"/login", nil)
|
|
assert.Nil(t, err)
|
|
req.SetBasicAuth("admin","test")
|
|
data, code, err = doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, rootExpected, data)
|
|
|
|
// Check BAD password
|
|
req, err = http.NewRequest(http.MethodGet, ts.URL +"/login", nil)
|
|
assert.Nil(t, err)
|
|
req.SetBasicAuth("admin","badpass")
|
|
data, code, err = doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusForbidden, code)
|
|
|
|
// Check GOOD password and context in templates
|
|
req, err = http.NewRequest(http.MethodGet, ts.URL +"/test", nil)
|
|
assert.Nil(t, err)
|
|
req.SetBasicAuth("admin","test")
|
|
data, code, err = doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, testExpected, data)
|
|
|
|
// Test Static Content
|
|
// Check GOOD password and context in templates
|
|
req, err = http.NewRequest(http.MethodGet, ts.URL +"/static/skin/skin.html", nil)
|
|
assert.Nil(t, err)
|
|
data, code, err = doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, []byte(`skin-file`), data)
|
|
}
|
|
|
|
func TestServer_TokenAuth(t *testing.T) {
|
|
auth := auth.NewTokenAuth()
|
|
auth.AddUser("admin", "admin", "1234567890")
|
|
|
|
s := New("", "/test", auth)
|
|
s.SetDebug(true)
|
|
s.SetTemplatePath("test/templates")
|
|
s.WithStaticFiles("/static", "test/static")
|
|
s.WithTheme("skin/")
|
|
s.HandleFunc("/", handlerRoot)
|
|
s.HandleFuncAuthenticated("/login", "", handlerLogin)
|
|
s.HandleFuncAuthenticated("/test", "", handlerTest)
|
|
s.Dump()
|
|
|
|
ts := httptest.NewServer(s.router)
|
|
defer ts.Close()
|
|
|
|
// Check GOOD password
|
|
req, err := http.NewRequest(http.MethodGet, ts.URL+"/login", nil)
|
|
assert.Nil(t, err)
|
|
req.Header.Add("token", "1234567890")
|
|
data, code, err := doTestRequest(t, req)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, rootExpected, data)
|
|
} |