sha1..
This commit is contained in:
parent
09632be46c
commit
1c3000e532
7 changed files with 569 additions and 0 deletions
249
tests/t_test.go
Normal file
249
tests/t_test.go
Normal file
|
@ -0,0 +1,249 @@
|
|||
package tests
|
||||
|
||||
// Package tests --
|
||||
// 1) StartSession -----
|
||||
// 2) DestroySessioon -----
|
||||
// 3) Set session variable--|
|
||||
// 4) Get session variable--|
|
||||
// 5) Update -- // --
|
||||
// 6) Delete -- // --
|
||||
// 7) GC session after lifetime
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.mtux.eu/darkgopher/session"
|
||||
|
||||
//all impls imports here ...
|
||||
_ "git.mtux.eu/darkgopher/session/storage/memory"
|
||||
)
|
||||
|
||||
const sid = "sid"
|
||||
const lifet = 180
|
||||
const testsrvaddr = ":8888"
|
||||
|
||||
var sm *session.Manager //current session impl.
|
||||
var tc *TestClient //current test client
|
||||
|
||||
type TestServer struct {
|
||||
addr string
|
||||
}
|
||||
|
||||
func NewTestServer(addr string) (ts *TestServer) {
|
||||
return &TestServer{addr}
|
||||
}
|
||||
|
||||
func (ts *TestServer) Serve() {
|
||||
http.HandleFunc("/startsession", ts.startSession) //ck
|
||||
http.HandleFunc("/destroysession", ts.destroySession) //ck
|
||||
http.HandleFunc("/setsessionvar", ts.setSessionVar)
|
||||
http.HandleFunc("/getsessionvar", ts.getSessionVar)
|
||||
http.HandleFunc("/updatesessionvar", ts.updateSessionVar)
|
||||
http.HandleFunc("/validateupdatedvalue", ts.validateUpdatedValue)
|
||||
http.HandleFunc("/deletesessionvalue", ts.deleteSessionValue)
|
||||
http.HandleFunc("/validatedeletedvalue", ts.validateDeletedValue)
|
||||
http.HandleFunc("/sessionGC", ts.sessionGC) //ck
|
||||
http.ListenAndServe(ts.addr, nil)
|
||||
}
|
||||
|
||||
func (ts *TestServer) startSession(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
if _, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) destroySession(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
if _, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if err = sm.SessionDestroy(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) setSessionVar(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if err = sess.Set("Pes", "Minule"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if err = sess.Set("Vek", 16); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) getSessionVar(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
|
||||
var (
|
||||
v any
|
||||
n any
|
||||
)
|
||||
|
||||
if v, err = sess.Get("Pes"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if n, err = sess.Get("Vek"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if v.(string) != "Minule" {
|
||||
fmt.Fprintf(w, "Value of session key: 'Pes' must be 'Minule', not: %s", v)
|
||||
}
|
||||
if n.(int) != 10 {
|
||||
fmt.Fprintf(w, "Value of session key: 'Vek' must be '16', not: %d", n)
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) updateSessionVar(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
|
||||
if err = sess.Set("Vek", 3); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) validateUpdatedValue(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
fmt.Println(sess)
|
||||
var n any
|
||||
if n, err = sess.Get("Vek"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if n.(int) != 3 {
|
||||
io.WriteString(w, fmt.Sprintf("Value vek ater update must be: '3', not: '%d'", n.(int)))
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) deleteSessionValue(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if sess.Delete("Vek"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) validateDeletedValue(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var sess session.Session
|
||||
if sess, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
var v any
|
||||
if v, err = sess.Get("Vek"); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
if v != nil {
|
||||
io.WriteString(w, fmt.Sprintf("Session value 'Vek' must be nil after delete, not: %v", v))
|
||||
}
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
func (ts *TestServer) sessionGC(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
if _, err = sm.SessionStart(w, r); err != nil {
|
||||
io.WriteString(w, err.Error())
|
||||
}
|
||||
time.Sleep(200 * time.Millisecond)
|
||||
io.WriteString(w, "OK")
|
||||
}
|
||||
|
||||
type TestClient struct {
|
||||
cl *http.Client
|
||||
ckstore *cookiejar.Jar
|
||||
}
|
||||
|
||||
func NewTestClient() (tc *TestClient, err error) {
|
||||
var ckstore *cookiejar.Jar
|
||||
if ckstore, err = cookiejar.New(nil); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
httpclient := &http.Client{Jar: ckstore}
|
||||
tc = &TestClient{httpclient, ckstore}
|
||||
return
|
||||
}
|
||||
|
||||
// Request send http request into test server and return ResponseResult or error
|
||||
func (tc *TestClient) Request(meth, uri string) (resb []byte, err error) {
|
||||
var req *http.Request
|
||||
if req, err = http.NewRequest(meth, uri, nil); err != nil {
|
||||
return nil, fmt.Errorf("Create request to: %s ailed err: %v", uri, err)
|
||||
}
|
||||
var rs *http.Response
|
||||
if rs, err = tc.cl.Do(req); err != nil {
|
||||
return nil, fmt.Errorf("Request failed err: %v", err)
|
||||
}
|
||||
|
||||
defer rs.Body.Close()
|
||||
var body []byte
|
||||
if body, err = io.ReadAll(rs.Body); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return body, nil
|
||||
}
|
||||
|
||||
func t1(t *testing.T) {
|
||||
var res []byte
|
||||
var err error
|
||||
if res, err = tc.Request("GET", "http://localhost:8080/startsession/"); err != nil {
|
||||
t.Logf("err: %v", err)
|
||||
t.Error(err)
|
||||
}
|
||||
if string(res) != "OK" {
|
||||
t.Errorf("Response from test request not OK, but: %s", res)
|
||||
}
|
||||
}
|
||||
|
||||
func t2(t *testing.T) {}
|
||||
func t3(t *testing.T) {}
|
||||
func t4(t *testing.T) {}
|
||||
func t5(t *testing.T) {}
|
||||
func t6(t *testing.T) {}
|
||||
func t7(t *testing.T) {}
|
||||
|
||||
// iterate all session storage impls. and run t1 - t7
|
||||
func TestRunAll(t *testing.T) {
|
||||
ts := NewTestServer("localhost:8080")
|
||||
ts.Serve()
|
||||
for _, pn := range session.ProviderNames() {
|
||||
var err error
|
||||
tc, err = NewTestClient()
|
||||
if sm, err = session.NewManager(pn, sid, lifet, true); err != nil {
|
||||
t.Errorf("Session provider %s failed initialize err: %v", pn, err)
|
||||
}
|
||||
fns := []func(t *testing.T){t1, t2, t3, t4, t5, t6, t7}
|
||||
for idx, fn := range fns {
|
||||
t.Run(fmt.Sprintf("Test%d", idx+1), fn)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue