Skip to content

Commit 1f2afb7

Browse files
committed
get should handle expired session, fix #58
* remove integration tests and simplify build
1 parent 0a6b73d commit 1f2afb7

7 files changed

Lines changed: 130 additions & 128 deletions

File tree

.travis.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,3 @@ jdk:
66
- oraclejdk8
77
after_success:
88
- mvn -Dlogback.configurationFile=logback-travis.xml clean package coveralls:report -P coverage
9-
services:
10-
- redis-server

coverage-report/src/test/java/org/jooby/jedis/session/RedisSessionDataFeature.java

Lines changed: 0 additions & 56 deletions
This file was deleted.

coverage-report/src/test/java/org/jooby/jedis/session/RedisSessionDataNoTimeoutFeature.java

Lines changed: 0 additions & 64 deletions
This file was deleted.

jooby-jedis/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,10 @@ session.timeout = 15
116116

117117
# 120 minutes
118118
session.timeout = 120m
119-
```
120119

121-
If no timeout is required, use ```-1```.
120+
# no timeout
121+
session.timeout = -1
122+
```
122123

123124
#### key prefix
124125

jooby-jedis/src/main/java/org/jooby/jedis/RedisSessionStore.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,10 @@
7878
*
7979
* # 120 minutes
8080
* session.timeout = 120m
81-
* </pre>
8281
*
83-
* If no timeout is required, use <code>-1</code>.
82+
* # no timeout
83+
* session.timeout = -1
84+
* </pre>
8485
*
8586
* <h3>key prefix</h3>
8687
* <p>
@@ -137,6 +138,10 @@ public Session get(final Builder builder) {
137138
try {
138139
String key = key(builder.sessionId());
139140
Map<String, String> attrs = jedis.hgetAll(key);
141+
if (attrs == null || attrs.size() == 0) {
142+
// expired
143+
return null;
144+
}
140145
if (timeout > 0) {
141146
// touch session
142147
jedis.expire(key, timeout);

jooby-jedis/src/test/java/org/jooby/jedis/RedisSessionStoreTest.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.easymock.EasyMock.expect;
44
import static org.junit.Assert.assertEquals;
55

6+
import java.util.Collections;
67
import java.util.Map;
78

89
import org.jooby.MockUnit;
@@ -51,6 +52,39 @@ public void save() throws Exception {
5152
});
5253
}
5354

55+
@Test
56+
public void saveNoTimeout() throws Exception {
57+
Map<String, String> attrs = ImmutableMap.of("x", "X");
58+
Map<String, String> attrsToSave = ImmutableMap
59+
.of(
60+
"x", "X",
61+
"_accessedAt", "2",
62+
"_createdAt", "1",
63+
"_savedAt", "3"
64+
);
65+
new MockUnit(JedisPool.class, Session.class)
66+
.expect(unit -> {
67+
Session session = unit.get(Session.class);
68+
expect(session.id()).andReturn("1234");
69+
expect(session.attributes()).andReturn(attrs);
70+
expect(session.createdAt()).andReturn(1L);
71+
expect(session.accessedAt()).andReturn(2L);
72+
expect(session.savedAt()).andReturn(3L);
73+
})
74+
.expect(unit -> {
75+
Jedis jedis = unit.mock(Jedis.class);
76+
expect(jedis.hmset("sessions:1234", attrsToSave)).andReturn("sessions:1234");
77+
jedis.close();
78+
79+
JedisPool pool = unit.get(JedisPool.class);
80+
expect(pool.getResource()).andReturn(jedis);
81+
})
82+
.run(unit -> {
83+
new RedisSessionStore(unit.get(JedisPool.class), "sessions", "0")
84+
.save(unit.get(Session.class));
85+
});
86+
}
87+
5488
@Test
5589
public void create() throws Exception {
5690
Map<String, String> attrs = ImmutableMap.of("x", "X");
@@ -174,4 +208,87 @@ public void get() throws Exception {
174208
});
175209
}
176210

211+
@Test
212+
public void getNoTimeout() throws Exception {
213+
Map<String, String> attrs = Maps.newHashMap(ImmutableMap
214+
.of(
215+
"x", "X",
216+
"_accessedAt", "2",
217+
"_createdAt", "1",
218+
"_savedAt", "3"
219+
));
220+
221+
new MockUnit(JedisPool.class, Session.class, Session.Builder.class)
222+
.expect(unit -> {
223+
Session.Builder sb = unit.get(Session.Builder.class);
224+
expect(sb.sessionId()).andReturn("1234");
225+
expect(sb.accessedAt(2)).andReturn(sb);
226+
expect(sb.createdAt(1)).andReturn(sb);
227+
expect(sb.savedAt(3)).andReturn(sb);
228+
expect(sb.set(ImmutableMap.of("x", "X"))).andReturn(sb);
229+
expect(sb.build()).andReturn(unit.get(Session.class));
230+
})
231+
.expect(unit -> {
232+
Jedis jedis = unit.mock(Jedis.class);
233+
expect(jedis.hgetAll("sessions:1234")).andReturn(attrs);
234+
jedis.close();
235+
236+
JedisPool pool = unit.get(JedisPool.class);
237+
expect(pool.getResource()).andReturn(jedis);
238+
})
239+
.run(unit -> {
240+
assertEquals(unit.get(Session.class), new RedisSessionStore(
241+
unit.get(JedisPool.class), "sessions", "0")
242+
.get(unit.get(Session.Builder.class)));
243+
});
244+
}
245+
246+
@Test
247+
public void getNullExpired() throws Exception {
248+
Map<String, String> attrs = null;
249+
250+
new MockUnit(JedisPool.class, Session.Builder.class)
251+
.expect(unit -> {
252+
Session.Builder sb = unit.get(Session.Builder.class);
253+
expect(sb.sessionId()).andReturn("1234");
254+
})
255+
.expect(unit -> {
256+
Jedis jedis = unit.mock(Jedis.class);
257+
expect(jedis.hgetAll("sessions:1234")).andReturn(attrs);
258+
jedis.close();
259+
260+
JedisPool pool = unit.get(JedisPool.class);
261+
expect(pool.getResource()).andReturn(jedis);
262+
})
263+
.run(unit -> {
264+
assertEquals(null, new RedisSessionStore(
265+
unit.get(JedisPool.class), "sessions", "30m")
266+
.get(unit.get(Session.Builder.class)));
267+
});
268+
}
269+
270+
@Test
271+
public void getEmptyExpired() throws Exception {
272+
Map<String, String> attrs = Collections.emptyMap();
273+
274+
new MockUnit(JedisPool.class, Session.Builder.class)
275+
.expect(unit -> {
276+
Session.Builder sb = unit.get(Session.Builder.class);
277+
expect(sb.sessionId()).andReturn("1234");
278+
})
279+
.expect(unit -> {
280+
Jedis jedis = unit.mock(Jedis.class);
281+
expect(jedis.hgetAll("sessions:1234")).andReturn(attrs);
282+
jedis.close();
283+
284+
JedisPool pool = unit.get(JedisPool.class);
285+
expect(pool.getResource()).andReturn(jedis);
286+
})
287+
.run(unit -> {
288+
assertEquals(null, new RedisSessionStore(
289+
unit.get(JedisPool.class), "sessions", "30m")
290+
.get(unit.get(Session.Builder.class)));
291+
});
292+
}
293+
177294
}

md/doc/jooby-jedis/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,10 @@ session.timeout = 15
116116

117117
# 120 minutes
118118
session.timeout = 120m
119-
```
120119

121-
If no timeout is required, use ```-1```.
120+
# no timeout
121+
session.timeout = -1
122+
```
122123

123124
#### key prefix
124125

0 commit comments

Comments
 (0)