* Re-usable request handler that creates different session scanerios * based upon the request URL.
( req: IncomingMessage, res: ServerResponse, driver: (ctx: HttpContext) => SessionStoreContract )
| 57 | * based upon the request URL. |
| 58 | */ |
| 59 | async function requestHandler( |
| 60 | req: IncomingMessage, |
| 61 | res: ServerResponse, |
| 62 | driver: (ctx: HttpContext) => SessionStoreContract |
| 63 | ) { |
| 64 | try { |
| 65 | const request = new RequestFactory().merge({ req, res, encryption }).create() |
| 66 | const response = new ResponseFactory().merge({ req, res, encryption }).create() |
| 67 | const ctx = new HttpContextFactory().merge({ request, response }).create() |
| 68 | |
| 69 | const session = new Session(sessionConfig, driver, emitter, ctx) |
| 70 | await session.initiate(false) |
| 71 | |
| 72 | if (req.url === '/read-data') { |
| 73 | await session.commit() |
| 74 | |
| 75 | response.json(session.all()) |
| 76 | return response.finish() |
| 77 | } |
| 78 | |
| 79 | if (req.url === '/read-data-slowly') { |
| 80 | await setTimeout(2000) |
| 81 | await session.commit() |
| 82 | |
| 83 | response.json(session.all()) |
| 84 | return response.finish() |
| 85 | } |
| 86 | |
| 87 | if (req.url === '/write-data') { |
| 88 | session.put('username', 'virk') |
| 89 | await session.commit() |
| 90 | |
| 91 | response.json(session.all()) |
| 92 | return response.finish() |
| 93 | } |
| 94 | |
| 95 | if (req.url === '/write-data-slowly') { |
| 96 | await setTimeout(2000) |
| 97 | |
| 98 | session.put('email', 'foo@bar.com') |
| 99 | await session.commit() |
| 100 | |
| 101 | response.json(session.all()) |
| 102 | return response.finish() |
| 103 | } |
| 104 | } catch (error: any) { |
| 105 | res.writeHead(500) |
| 106 | res.write(error.stack) |
| 107 | res.end() |
| 108 | } |
| 109 | } |
| 110 | |
| 111 | test.group('Concurrency | cookie driver', () => { |
| 112 | test('concurrently read and read slowly', async ({ assert }) => { |