mirror of
https://github.com/kataras/iris.git
synced 2025-02-02 15:30:36 +01:00
re-add the mutex on sessions.LifeTime
This commit is contained in:
parent
5d7198ca7b
commit
9ed566b076
6
cache/browser_test.go
vendored
6
cache/browser_test.go
vendored
|
@ -13,7 +13,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNoCache(t *testing.T) {
|
func TestNoCache(t *testing.T) {
|
||||||
t.Parallel()
|
|
||||||
app := iris.New()
|
app := iris.New()
|
||||||
app.Get("/", cache.NoCache, func(ctx iris.Context) {
|
app.Get("/", cache.NoCache, func(ctx iris.Context) {
|
||||||
ctx.WriteString("no_cache")
|
ctx.WriteString("no_cache")
|
||||||
|
@ -30,7 +29,6 @@ func TestNoCache(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStaticCache(t *testing.T) {
|
func TestStaticCache(t *testing.T) {
|
||||||
t.Parallel()
|
|
||||||
// test change the time format, which is not recommended but can be done.
|
// test change the time format, which is not recommended but can be done.
|
||||||
app := iris.New().Configure(iris.WithTimeFormat("02 Jan 2006 15:04:05 GMT"))
|
app := iris.New().Configure(iris.WithTimeFormat("02 Jan 2006 15:04:05 GMT"))
|
||||||
|
|
||||||
|
@ -52,7 +50,7 @@ func TestStaticCache(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCache304(t *testing.T) {
|
func TestCache304(t *testing.T) {
|
||||||
t.Parallel()
|
// t.Parallel()
|
||||||
app := iris.New()
|
app := iris.New()
|
||||||
|
|
||||||
expiresEvery := 4 * time.Second
|
expiresEvery := 4 * time.Second
|
||||||
|
@ -78,7 +76,7 @@ func TestCache304(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestETag(t *testing.T) {
|
func TestETag(t *testing.T) {
|
||||||
t.Parallel()
|
// t.Parallel()
|
||||||
|
|
||||||
app := iris.New()
|
app := iris.New()
|
||||||
n := "_"
|
n := "_"
|
||||||
|
|
11
cache/cache_test.go
vendored
11
cache/cache_test.go
vendored
|
@ -145,10 +145,13 @@ func TestCache(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCacheHandlerParallel(t *testing.T) {
|
// This works but we have issue on golog.SetLevel and get golog.Level on httptest.New
|
||||||
t.Parallel()
|
// when tests are running in parallel and the loggers are used.
|
||||||
TestCache(t)
|
// // TODO: Fix it on golog repository or here, we'll see.
|
||||||
}
|
// func TestCacheHandlerParallel(t *testing.T) {
|
||||||
|
// t.Parallel()
|
||||||
|
// TestCache(t)
|
||||||
|
// }
|
||||||
|
|
||||||
func TestCacheValidator(t *testing.T) {
|
func TestCacheValidator(t *testing.T) {
|
||||||
app := iris.New()
|
app := iris.New()
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/iris-contrib/httpexpect/v2"
|
"github.com/iris-contrib/httpexpect/v2"
|
||||||
|
@ -51,6 +52,7 @@ func newTester(t *testing.T, baseURL string, handler http.Handler) *httpexpect.E
|
||||||
func testSupervisor(t *testing.T, creator func(*http.Server, []func(TaskHost)) *Supervisor) {
|
func testSupervisor(t *testing.T, creator func(*http.Server, []func(TaskHost)) *Supervisor) {
|
||||||
loggerOutput := &bytes.Buffer{}
|
loggerOutput := &bytes.Buffer{}
|
||||||
logger := log.New(loggerOutput, "", 0)
|
logger := log.New(loggerOutput, "", 0)
|
||||||
|
mu := new(sync.RWMutex)
|
||||||
const (
|
const (
|
||||||
expectedHelloMessage = "Hello\n"
|
expectedHelloMessage = "Hello\n"
|
||||||
)
|
)
|
||||||
|
@ -78,7 +80,9 @@ func testSupervisor(t *testing.T, creator func(*http.Server, []func(TaskHost)) *
|
||||||
}
|
}
|
||||||
|
|
||||||
helloMe := func(_ TaskHost) {
|
helloMe := func(_ TaskHost) {
|
||||||
|
mu.Lock()
|
||||||
logger.Print(expectedHelloMessage)
|
logger.Print(expectedHelloMessage)
|
||||||
|
mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
host := creator(srv, []func(TaskHost){helloMe})
|
host := creator(srv, []func(TaskHost){helloMe})
|
||||||
|
@ -95,7 +99,10 @@ func testSupervisor(t *testing.T, creator func(*http.Server, []func(TaskHost)) *
|
||||||
// but it's "safe" here.
|
// but it's "safe" here.
|
||||||
|
|
||||||
// testing Task (recorded) message:
|
// testing Task (recorded) message:
|
||||||
if got := loggerOutput.String(); expectedHelloMessage != got {
|
mu.RLock()
|
||||||
|
got := loggerOutput.String()
|
||||||
|
mu.RUnlock()
|
||||||
|
if expectedHelloMessage != got {
|
||||||
t.Fatalf("expected hello Task's message to be '%s' but got '%s'", expectedHelloMessage, got)
|
t.Fatalf("expected hello Task's message to be '%s' but got '%s'", expectedHelloMessage, got)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package sessions
|
package sessions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kataras/iris/v12/context"
|
"github.com/kataras/iris/v12/context"
|
||||||
|
@ -15,6 +16,8 @@ type LifeTime struct {
|
||||||
// (this should be a bug(go1.9-rc1) or not. We don't care atm)
|
// (this should be a bug(go1.9-rc1) or not. We don't care atm)
|
||||||
time.Time
|
time.Time
|
||||||
timer *time.Timer
|
timer *time.Timer
|
||||||
|
|
||||||
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// Begin will begin the life based on the time.Now().Add(d).
|
// Begin will begin the life based on the time.Now().Add(d).
|
||||||
|
@ -24,8 +27,10 @@ func (lt *LifeTime) Begin(d time.Duration, onExpire func()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lt.mu.Lock()
|
||||||
lt.Time = time.Now().Add(d)
|
lt.Time = time.Now().Add(d)
|
||||||
lt.timer = time.AfterFunc(d, onExpire)
|
lt.timer = time.AfterFunc(d, onExpire)
|
||||||
|
lt.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Revive will continue the life based on the stored Time.
|
// Revive will continue the life based on the stored Time.
|
||||||
|
@ -38,24 +43,30 @@ func (lt *LifeTime) Revive(onExpire func()) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
if lt.Time.After(now) {
|
if lt.Time.After(now) {
|
||||||
d := lt.Time.Sub(now)
|
d := lt.Time.Sub(now)
|
||||||
|
lt.mu.Lock()
|
||||||
lt.timer = time.AfterFunc(d, onExpire)
|
lt.timer = time.AfterFunc(d, onExpire)
|
||||||
|
lt.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shift resets the lifetime based on "d".
|
// Shift resets the lifetime based on "d".
|
||||||
func (lt *LifeTime) Shift(d time.Duration) {
|
func (lt *LifeTime) Shift(d time.Duration) {
|
||||||
|
lt.mu.Lock()
|
||||||
if d > 0 && lt.timer != nil {
|
if d > 0 && lt.timer != nil {
|
||||||
lt.Time = time.Now().Add(d)
|
lt.Time = time.Now().Add(d)
|
||||||
lt.timer.Reset(d)
|
lt.timer.Reset(d)
|
||||||
}
|
}
|
||||||
|
lt.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExpireNow reduce the lifetime completely.
|
// ExpireNow reduce the lifetime completely.
|
||||||
func (lt *LifeTime) ExpireNow() {
|
func (lt *LifeTime) ExpireNow() {
|
||||||
|
lt.mu.Lock()
|
||||||
lt.Time = context.CookieExpireDelete
|
lt.Time = context.CookieExpireDelete
|
||||||
if lt.timer != nil {
|
if lt.timer != nil {
|
||||||
lt.timer.Stop()
|
lt.timer.Stop()
|
||||||
}
|
}
|
||||||
|
lt.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasExpired reports whether "lt" represents is expired.
|
// HasExpired reports whether "lt" represents is expired.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user