test: redis with quit and error cases

This commit is contained in:
DIYgod
2019-06-13 15:23:28 +08:00
parent 76add4785a
commit 7c5aaa3c14
4 changed files with 53 additions and 11 deletions

View File

@@ -98,4 +98,5 @@ if (config.connect.socket) {
module.exports = {
server: server,
app: app,
cache: app.context.cache.client,
};

View File

@@ -28,12 +28,7 @@ function responseHandler() {
ctx.res.success = ({ statusCode, data = null, message = null }) => {
const status = 0;
if (!!statusCode && statusCode < 400) {
ctx.status = statusCode;
} else if (!(ctx.status < 400)) {
ctx.status = statusCodes.OK;
}
ctx.body = { status, data, message };
};

View File

@@ -35,7 +35,7 @@ module.exports = function(app, options = {}) {
app.context.cache = {
get: async (key) => {
if (key) {
if (key && available) {
let value = await redisClient.get(key);
if (value) {
await redisClient.expire(key, config.cache.contentExpire);
@@ -45,6 +45,9 @@ module.exports = function(app, options = {}) {
}
},
set: async function(key, value, maxAge = config.cache.contentExpire) {
if (!available) {
return;
}
if (await redisClient.exists(key)) {
logger.warn(`repeated key: ${key}, ${value}`);
return;
@@ -59,9 +62,10 @@ module.exports = function(app, options = {}) {
await redisClient.setex(key, maxAge, value);
}
},
client: redisClient,
};
globalCache.get = async (key) => {
if (key) {
if (key && available) {
const value = await redisClient.get(key);
return value;
}
@@ -81,7 +85,7 @@ module.exports = function(app, options = {}) {
app.context.cache = {
get: (key) => {
if (key) {
if (key && available) {
let value = routeCache.get(key);
if (value) {
value = value + '';
@@ -96,13 +100,14 @@ module.exports = function(app, options = {}) {
if (typeof value === 'object') {
value = JSON.stringify(value);
}
if (key) {
if (key && available) {
return routeCache.set(key, value, maxAge * 1000);
}
},
client: [pageCache, routeCache],
};
globalCache.get = (key) => {
if (key) {
if (key && available) {
return pageCache.get(key);
}
};

View File

@@ -90,6 +90,47 @@ describe('cache', () => {
expect(parsed4.items[0].content).toBe('Cache2');
});
it('redis with quit', async () => {
process.env.CACHE_TYPE = 'redis';
server = require('../../lib/index').server;
const client = require('../../lib/index').cache;
client.quit();
const request = supertest(server);
const response1 = await request.get('/test/cache');
const parsed1 = await parser.parseString(response1.text);
const response2 = await request.get('/test/cache');
const parsed2 = await parser.parseString(response2.text);
expect(response2.status).toBe(200);
expect(response2.headers).not.toHaveProperty('x-koa-redis-cache');
expect(response2.headers).not.toHaveProperty('x-koa-memory-cache');
expect(parsed1.items[0].content).toBe('Cache1');
expect(parsed2.items[0].content).toBe('Cache2');
});
it('redis with error', async () => {
process.env.CACHE_TYPE = 'redis';
process.env.REDIS_URL = 'redis://wrongpath:6379';
server = require('../../lib/index').server;
const request = supertest(server);
const response1 = await request.get('/test/cache');
const parsed1 = await parser.parseString(response1.text);
const response2 = await request.get('/test/cache');
const parsed2 = await parser.parseString(response2.text);
expect(response2.status).toBe(200);
expect(response2.headers).not.toHaveProperty('x-koa-redis-cache');
expect(response2.headers).not.toHaveProperty('x-koa-memory-cache');
expect(parsed1.items[0].content).toBe('Cache1');
expect(parsed2.items[0].content).toBe('Cache2');
});
it('no cache', async () => {
process.env.CACHE_TYPE = '';
server = require('../../lib/index').server;