thinkjs/test/Lib/Driver/Cache/FileCache.js
2014-10-09 19:02:05 +08:00

209 lines
6.6 KiB
JavaScript

var should = require('should');
var assert = require('assert');
var muk = require('muk');
var path = require('path');
var net = require('net');
var fs = require('fs')
global.APP_PATH = path.normalize(__dirname + '/../../../App');
global.RESOURCE_PATH = path.normalize(__dirname + '/../../../www');
process.execArgv.push('--no-app');
require(path.normalize(__dirname + '/../../../../index.js'));
var FileCache = thinkRequire('FileCache');
describe('FileCache', function(){
it('init', function(){
var instance = FileCache();
assert.equal(instance.gcType.indexOf('FileCache:'), 0)
assert.equal(instance.options.cache_path_level, 2);
assert.equal(instance.options.cache_file_suffix, '.json')
})
it('getStoredFile', function(){
var instance = FileCache();
var file = instance.getStoredFile('welefen');
var f = instance.options.cache_path + '/d/0/d044be314c409f92c3ee66f1ed8d3753.json'
assert.equal(file, f);
var file = instance.getStoredFile('suredy');
var f = instance.options.cache_path + '/3/b/3b89df11b06ad751bf2dac3d850ba66e.json'
assert.equal(file, f);
})
it('getData undefined', function(done){
var instance = FileCache();
instance.getData('name1').then(function(data){
assert.equal(data, undefined);
done();
})
})
it('getData', function(done){
var instance = FileCache();
instance.setData('name2', 'welefen').then(function(){
return instance.getData('name2')
}).then(function(data){
assert.deepEqual(data, {name2: 'welefen'})
done();
})
})
it('getData file content empty', function(done){
var instance = FileCache();
instance.setData('name3', 'welefen').then(function(){
var filePath = instance.getStoredFile('name3')
fs.writeFileSync(filePath, '');
return instance.getData('name3')
}).then(function(data){
assert.deepEqual(data, undefined)
done();
})
})
it('getData data expired', function(done){
var instance = FileCache();
instance.setData('name4', 'welefen').then(function(){
var filePath = instance.getStoredFile('name4')
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
content.expire -= 100000000000;
fs.writeFileSync(filePath, JSON.stringify(content));
return instance.getData('name4')
}).then(function(data){
assert.deepEqual(data, undefined)
done();
})
})
it('getData data not json', function(done){
var instance = FileCache();
instance.setData('name4', 'welefen').then(function(){
var filePath = instance.getStoredFile('name4')
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
content.expire -= 100000000000;
fs.writeFileSync(filePath, 'fasdf[www');
return instance.getData('name4')
}).then(function(data){
assert.deepEqual(data, undefined)
done();
})
})
it('get', function(done){
var instance = FileCache();
instance.setData('name5', 'welefen').then(function(){
return instance.get('name5')
}).then(function(data){
assert.deepEqual(data, 'welefen')
done();
})
})
it('get, data empty', function(done){
var instance = FileCache();
instance.setData('name5', 'welefen').then(function(){
return instance.get('name6')
}).then(function(data){
assert.deepEqual(data, undefined)
done();
})
})
it('setData', function(done){
var instance = FileCache();
var now = Date.now;
Date.now = function(){
return 12121212121;
}
instance.setData('name6', 'welefen').then(function(){
//assert.deepEqual(data, undefined)
var filePath = instance.getStoredFile('name6');
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
assert.deepEqual(content, {"data":{"name6":"welefen"},"expire":12142812121,"timeout":21600})
Date.now = now;
done();
})
})
it('setData with timeout', function(done){
var instance = FileCache();
var now = Date.now;
Date.now = function(){
return 12121212121;
}
instance.setData('name6', 'welefen', 20000).then(function(){
var filePath = instance.getStoredFile('name6');
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
assert.deepEqual(content, {"data":{"name6":"welefen"},"expire":12141212121,"timeout":20000})
Date.now = now;
done();
})
})
it('setData, name is object', function(done){
var instance = FileCache();
var now = Date.now;
Date.now = function(){
return 12121212121;
}
instance.setData({name8: 'welefen'}).then(function(){
var filePath = instance.getStoredFile('name8');
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
assert.deepEqual(content, {"data":{"name8":"welefen"},"expire":12142812121,"timeout":21600})
Date.now = now;
done();
})
})
it('setData, name is object1', function(done){
var instance = FileCache();
var now = Date.now;
Date.now = function(){
return 12121212121;
}
instance.setData({name8: 'welefen'}, 2220000).then(function(){
var filePath = instance.getStoredFile('name8');
var content = fs.readFileSync(filePath, 'utf-8');
//console.log(content)
content = JSON.parse(content);
assert.deepEqual(content, {"data":{"name8":"welefen"},"expire":14341212121,"timeout":2220000})
Date.now = now;
done();
})
})
it('set, name is object1', function(done){
var instance = FileCache();
var now = Date.now;
Date.now = function(){
return 12121212121;
}
instance.set({name9: 'welefen'}, 2220000).then(function(){
var filePath = instance.getStoredFile('name9');
var content = fs.readFileSync(filePath, 'utf-8');
content = JSON.parse(content);
assert.deepEqual(content, {"data":{"name9":"welefen"},"expire":14341212121,"timeout":2220000})
Date.now = now;
done();
})
})
it('rm', function(done){
var instance = FileCache();
instance.rm('name').then(function(){
done();
})
})
it('rm exist file', function(done){
var instance = FileCache();
instance.set('name', 'welefen').then(function(){
return instance.rm('name')
}).then(function(){
var filePath = instance.getStoredFile('name');
assert.equal(isFile(filePath), false)
done();
})
})
it('gc', function(){
var instance = FileCache();
instance.gc(Date.now());
})
})
describe('after', function(){
it('after', function(done){
var instance = FileCache();
rmdir(APP_PATH, false).then(function(){
done()
})
})
})