Skip to content

Commit

Permalink
fixes bug for 24 hour session
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Busbey committed Aug 16, 2016
1 parent 30ac1f1 commit 0a6d981
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 4 deletions.
7 changes: 4 additions & 3 deletions internal/time_range.go
Expand Up @@ -73,10 +73,11 @@ func (r *TimeRange) isInTimeRange(t time.Time) bool {
t = t.In(r.loc)
ts := NewTimeOfDay(t.Clock()).d

if r.startTime.d > r.endTime.d {
return !(r.endTime.d < ts && ts < r.startTime.d)
if r.startTime.d < r.endTime.d {
return r.startTime.d <= ts && ts <= r.endTime.d
}
return r.startTime.d <= ts && ts <= r.endTime.d

return !(r.endTime.d < ts && ts < r.startTime.d)
}

func (r *TimeRange) isInWeekRange(t time.Time) bool {
Expand Down
42 changes: 42 additions & 0 deletions internal/time_range_test.go
Expand Up @@ -126,6 +126,12 @@ func TestTimeRangeIsInRange(t *testing.T) {

now = time.Date(2016, time.August, 10, 3, 1, 0, 0, time.UTC)
assert.True(t, NewTimeRangeInLocation(start, end, loc).IsInRange(now))

start = NewTimeOfDay(0, 0, 0)
end = NewTimeOfDay(0, 0, 0)
now = time.Date(2016, time.August, 10, 18, 0, 0, 0, time.UTC)
assert.True(t, NewUTCTimeRange(start, end).IsInRange(now))

}

func TestTimeRangeIsInRangeWithDay(t *testing.T) {
Expand Down Expand Up @@ -299,6 +305,42 @@ func TestTimeRangeIsInSameRange(t *testing.T) {

var tr *TimeRange
assert.True(t, tr.IsInSameRange(time1, time2), "always in same range if time range is nil")

start = NewTimeOfDay(0, 0, 0)
end = NewTimeOfDay(0, 0, 0)
time1 = time.Date(2016, time.August, 10, 0, 0, 0, 0, time.UTC)
time2 = time.Date(2016, time.August, 11, 0, 0, 0, 0, time.UTC)
assert.False(t, NewTimeRangeInLocation(start, end, loc).IsInSameRange(time1, time2))
assert.False(t, NewTimeRangeInLocation(start, end, loc).IsInSameRange(time2, time1))

time1 = time.Date(2016, time.August, 10, 23, 59, 59, 0, time.UTC)
time2 = time.Date(2016, time.August, 11, 0, 0, 0, 0, time.UTC)
assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time1, time2))
assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time2, time1))

start = NewTimeOfDay(1, 49, 0)
end = NewTimeOfDay(1, 49, 0)
time1 = time.Date(2016, time.August, 16, 1, 48, 21, 0, time.UTC)
time2 = time.Date(2016, time.August, 16, 1, 49, 02, 0, time.UTC)

assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time1, time2))
assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time2, time1))

start = NewTimeOfDay(1, 49, 0)
end = NewTimeOfDay(1, 49, 0)
time1 = time.Date(2016, time.August, 16, 13, 48, 21, 0, time.UTC)
time2 = time.Date(2016, time.August, 16, 13, 49, 02, 0, time.UTC)

assert.True(t, NewUTCTimeRange(start, end).IsInSameRange(time1, time2))
assert.True(t, NewUTCTimeRange(start, end).IsInSameRange(time2, time1))

start = NewTimeOfDay(13, 49, 0)
end = NewTimeOfDay(13, 49, 0)
time1 = time.Date(2016, time.August, 16, 13, 48, 21, 0, time.UTC)
time2 = time.Date(2016, time.August, 16, 13, 49, 02, 0, time.UTC)

assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time1, time2))
assert.False(t, NewUTCTimeRange(start, end).IsInSameRange(time2, time1))
}

func TestTimeRangeIsInSameRangeWithDay(t *testing.T) {
Expand Down
8 changes: 7 additions & 1 deletion session_state.go
Expand Up @@ -23,7 +23,7 @@ func (sm *stateMachine) Start(s *session) {

func (sm *stateMachine) Connect(session *session) {
if !sm.IsSessionTime() {
session.log.OnEvent("Not in session")
session.log.OnEvent("Connection outside of session time")
sm.handleDisconnectState(session)
return
}
Expand Down Expand Up @@ -101,6 +101,10 @@ func (sm *stateMachine) Timeout(session *session, e internal.Event) {

func (sm *stateMachine) CheckSessionTime(session *session, now time.Time) {
if !session.SessionTime.IsInRange(now) {
if sm.IsSessionTime() {
session.log.OnEvent("Not in session")
}

sm.State.ShutdownNow(session)
sm.setState(session, notSessionTime{})

Expand All @@ -111,11 +115,13 @@ func (sm *stateMachine) CheckSessionTime(session *session, now time.Time) {
}

if !sm.IsSessionTime() {
session.log.OnEvent("In session")
sm.notifyInSessionTime()
sm.setState(session, latentState{})
}

if !session.SessionTime.IsInSameRange(session.store.CreationTime(), now) {
session.log.OnEvent("Session reset")
sm.State.ShutdownNow(session)
if err := session.dropAndReset(); err != nil {
session.logError(err)
Expand Down

0 comments on commit 0a6d981

Please sign in to comment.