diff --git a/reaper/options_test.go b/reaper/options_test.go new file mode 100644 index 0000000..e48e874 --- /dev/null +++ b/reaper/options_test.go @@ -0,0 +1 @@ +package reaper diff --git a/reaper/reaper_test.go b/reaper/reaper_test.go new file mode 100644 index 0000000..e48e874 --- /dev/null +++ b/reaper/reaper_test.go @@ -0,0 +1 @@ +package reaper diff --git a/shared/consts.go b/shared/consts.go index a824751..d68ef02 100644 --- a/shared/consts.go +++ b/shared/consts.go @@ -2,9 +2,14 @@ package shared import "time" +// Defaults for sessions.Options +const ( + DefaultPath = "/" + DefaultMaxAge = 60 * 60 * 24 * 30 // 30days +) + // Defaults for store.Options const ( - DefaultPath = "/" DefaultBucketName = "sessions" ) diff --git a/shared/utils.go b/shared/utils.go index 0401229..7cf7814 100644 --- a/shared/utils.go +++ b/shared/utils.go @@ -18,3 +18,9 @@ func Session(data []byte) (protobuf.Session, error) { func Expired(session protobuf.Session) bool { return *session.ExpiresAt > 0 && *session.ExpiresAt <= time.Now().Unix() } + +// NewSession creates and returns a session data. +func NewSession(values []byte, maxAge int) *protobuf.Session { + expiresAt := time.Now().Unix() + int64(maxAge) + return &protobuf.Session{Values: values, ExpiresAt: &expiresAt} +} diff --git a/shared/utils_test.go b/shared/utils_test.go index c2b6966..8c7778f 100644 --- a/shared/utils_test.go +++ b/shared/utils_test.go @@ -48,3 +48,14 @@ func TestExpired(t *testing.T) { t.Error("Expired() should return false (actual: true)") } } + +func TestNewSession(t *testing.T) { + values := []byte("test") + maxAge := 10 + preExpiresAt := time.Now().Unix() + int64(maxAge) + session := NewSession(values, maxAge) + postExpiresAt := time.Now().Unix() + int64(maxAge) + if string(session.Values) != string(values) || *session.ExpiresAt < preExpiresAt || postExpiresAt < *session.ExpiresAt { + t.Errorf("NewSession() returned an invalid value (actual: %+v)", session) + } +} diff --git a/store/config.go b/store/config.go index b754ebd..4e52dd4 100644 --- a/store/config.go +++ b/store/config.go @@ -16,6 +16,9 @@ func (c *Config) setDefault() { if c.SessionOptions.Path == "" { c.SessionOptions.Path = shared.DefaultPath } + if c.SessionOptions.MaxAge == 0 { + c.SessionOptions.MaxAge = shared.DefaultMaxAge + } if c.DBOptions.BucketName == nil { c.DBOptions.BucketName = []byte(shared.DefaultBucketName) } diff --git a/store/config_test.go b/store/config_test.go new file mode 100644 index 0000000..72440ea --- /dev/null +++ b/store/config_test.go @@ -0,0 +1 @@ +package store diff --git a/store/session.go b/store/session.go deleted file mode 100644 index c7c0cc8..0000000 --- a/store/session.go +++ /dev/null @@ -1,16 +0,0 @@ -package store - -import ( - "time" - - "github.com/yosssi/boltstore/shared/protobuf" -) - -// NewSession creates and returns a session data. -func NewSession(values []byte, maxAge int) *protobuf.Session { - var expiresAt int64 - if maxAge > 0 { - expiresAt = time.Now().Unix() + int64(maxAge) - } - return &protobuf.Session{Values: values, ExpiresAt: &expiresAt} -} diff --git a/store/store.go b/store/store.go index c600d6e..1783edb 100644 --- a/store/store.go +++ b/store/store.go @@ -118,7 +118,7 @@ func (s *Store) save(session *sessions.Session) error { if err != nil { return err } - data, err := proto.Marshal(NewSession(buf.Bytes(), session.Options.MaxAge)) + data, err := proto.Marshal(shared.NewSession(buf.Bytes(), session.Options.MaxAge)) if err != nil { return nil } diff --git a/store/store_test.go b/store/store_test.go new file mode 100644 index 0000000..72440ea --- /dev/null +++ b/store/store_test.go @@ -0,0 +1 @@ +package store