Remove tmp files
This commit is contained in:
@@ -1,116 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
const fsp = require("fs-promise");
|
|
||||||
const path = require("path");
|
|
||||||
const Db = require("./db");
|
|
||||||
const Store = require("./store");
|
|
||||||
const uploadDir = path.resolve(__dirname, "data");
|
|
||||||
|
|
||||||
describe("psitransfer db", () => {
|
|
||||||
let db;
|
|
||||||
let store;
|
|
||||||
beforeEach(() => {
|
|
||||||
// TODO: atomic name
|
|
||||||
store = new Store(uploadDir);
|
|
||||||
db = new Db(
|
|
||||||
uploadDir,
|
|
||||||
store
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach((next) => {
|
|
||||||
fsp.remove(uploadDir, next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should properly construct", () => {
|
|
||||||
expect(db.initialized).toBeFalsy();
|
|
||||||
expect(db.db).toEqual({});
|
|
||||||
expect(db.expireTimers).toEqual({});
|
|
||||||
expect(db.store).toBe(store);
|
|
||||||
expect(db.uploadDir).toEqual(uploadDir);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should call sync on init", () => {
|
|
||||||
spyOn(db, "sync");
|
|
||||||
db.initialized = false;
|
|
||||||
db.init();
|
|
||||||
expect(db.sync).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("shouldn't call sync on initialize if already bootstrapped ", () => {
|
|
||||||
spyOn(db, "sync");
|
|
||||||
db.initialized = true;
|
|
||||||
db.init();
|
|
||||||
expect(db.sync).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("testing CRUD", () => {
|
|
||||||
let sid;
|
|
||||||
let uuid;
|
|
||||||
let metaData;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
sid = "221813e1688d";
|
|
||||||
uuid = "e40bc20e-5be3-4906-903c-895f05e49efe";
|
|
||||||
metaData = {
|
|
||||||
uploadLength: 0,
|
|
||||||
metadata: {
|
|
||||||
sid,
|
|
||||||
retention: "259200",
|
|
||||||
password: "",
|
|
||||||
name: "test.txt",
|
|
||||||
key: uuid,
|
|
||||||
createdAt: "" + Date.now()
|
|
||||||
},
|
|
||||||
size: 0,
|
|
||||||
offset: 0
|
|
||||||
};
|
|
||||||
|
|
||||||
fsp.ensureDirSync(uploadDir);
|
|
||||||
fsp.ensureDirSync(path.resolve(uploadDir, sid));
|
|
||||||
fsp.writeFileSync(path.resolve(uploadDir, sid, uuid), "");
|
|
||||||
fsp.writeFileSync(path.resolve(uploadDir, sid, uuid + ".json"), JSON.stringify(metaData));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should sync upload dir", () => {
|
|
||||||
spyOn(db, "import");
|
|
||||||
db.sync();
|
|
||||||
expect(db.import).toHaveBeenCalledWith(sid);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should import existing files", async() => {
|
|
||||||
spyOn(db.store, "info").and.returnValue(Promise.resolve(metaData));
|
|
||||||
spyOn(db, "add");
|
|
||||||
db.initialized = true;
|
|
||||||
await db.import(sid);
|
|
||||||
expect(db.add).toHaveBeenCalledWith(sid, uuid, metaData);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should remove files", async() => {
|
|
||||||
db.initialized = true;
|
|
||||||
db.db[sid] = [ metaData ];
|
|
||||||
spyOn(store, "del").and.returnValue(Promise.resolve());
|
|
||||||
spyOn(fsp, "rmdir").and.returnValue(Promise.resolve());
|
|
||||||
|
|
||||||
await db.remove(sid, uuid);
|
|
||||||
|
|
||||||
expect(store.del).toHaveBeenCalledWith(sid + '++' + uuid);
|
|
||||||
expect(db.db[sid]).not.toBeDefined();
|
|
||||||
expect(fsp.rmdir).toHaveBeenCalledWith(path.resolve(uploadDir, sid));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should add new files to sid", () => {
|
|
||||||
db.initialized = true;
|
|
||||||
spyOn(db, "registerRemove");
|
|
||||||
db.add(sid, uuid, metaData);
|
|
||||||
expect(db.registerRemove).toHaveBeenCalled();
|
|
||||||
expect(db.db[sid]).toEqual([metaData]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should update already existing files", () => {
|
|
||||||
db.initialized = true;
|
|
||||||
db.add(sid, uuid, Object.assign(metaData, { bacon: "yammie"}));
|
|
||||||
db.add(sid, uuid, metaData);
|
|
||||||
expect(db.db[sid]).toEqual([metaData]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"spec_dir": "lib",
|
|
||||||
"spec_files": [
|
|
||||||
"**/*.[sS]pec.js"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
"jasmine": "^2.5.2",
|
|
||||||
"nodemon": "^1.11.0",
|
|
||||||
"request": "^2.79.0"
|
|
||||||
|
|
||||||
"test": "node spec-runner.js"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
const Jasmine = require('jasmine');
|
|
||||||
|
|
||||||
const jasmine = new Jasmine();
|
|
||||||
jasmine.loadConfigFile('jasmine.json');
|
|
||||||
jasmine.execute();
|
|
||||||
@@ -1,148 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
const fsp = require("fs-promise");
|
|
||||||
const path = require("path");
|
|
||||||
const Store = require("./store");
|
|
||||||
const httpErrors = require('http-errors');
|
|
||||||
|
|
||||||
const uploadDir = path.resolve(__dirname, "data");
|
|
||||||
|
|
||||||
describe("psitransfer store", () => {
|
|
||||||
|
|
||||||
let store;
|
|
||||||
let sid;
|
|
||||||
let uuid;
|
|
||||||
let fid;
|
|
||||||
let metaData;
|
|
||||||
let info;
|
|
||||||
let stat;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
store = new Store(uploadDir);
|
|
||||||
|
|
||||||
sid = "221813e1688d";
|
|
||||||
uuid = "e40bc20e-5be3-4906-903c-895f05e49efe";
|
|
||||||
|
|
||||||
fsp.ensureDirSync(path.resolve(uploadDir, sid));
|
|
||||||
|
|
||||||
fid = `${sid}++${uuid}`;
|
|
||||||
metaData = {
|
|
||||||
uploadLength: 0,
|
|
||||||
metadata: {
|
|
||||||
sid,
|
|
||||||
retention: "259200",
|
|
||||||
password: "",
|
|
||||||
name: "test.txt",
|
|
||||||
key: uuid,
|
|
||||||
createdAt: "" + Date.now()
|
|
||||||
},
|
|
||||||
size: 0,
|
|
||||||
offset: 0
|
|
||||||
};
|
|
||||||
|
|
||||||
info = {
|
|
||||||
offset: 100,
|
|
||||||
uploadLength: 100,
|
|
||||||
metadata: {
|
|
||||||
sid: 'fea60a1beba6',
|
|
||||||
retention: '259200',
|
|
||||||
password: '',
|
|
||||||
name: 'bacon.ham',
|
|
||||||
key: '1215182b-ca57-4212-9e87-c7028190ff69',
|
|
||||||
createdAt: '1483890816120'
|
|
||||||
},
|
|
||||||
isPartial: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
stat = {
|
|
||||||
size: 287
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach((next) => {
|
|
||||||
fsp.remove(uploadDir, next);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should properly construct", () => {
|
|
||||||
expect(store.dir).toEqual(uploadDir);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should create new files", async() => {
|
|
||||||
|
|
||||||
let fileName = store.getFilename(fid);
|
|
||||||
|
|
||||||
spyOn(store, "getFilename").and.callThrough();
|
|
||||||
spyOn(fsp, "ensureDir").and.returnValue(Promise.resolve());
|
|
||||||
spyOn(fsp, "writeJson").and.returnValue(Promise.resolve());
|
|
||||||
|
|
||||||
expect(await store.create(fid, metaData)).toEqual({
|
|
||||||
uploadId: fid
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(store.getFilename).toHaveBeenCalled();
|
|
||||||
expect(fsp.ensureDir).toHaveBeenCalled();
|
|
||||||
expect(fsp.writeJson).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should evaluate file info", async() => {
|
|
||||||
|
|
||||||
spyOn(fsp, "readJson").and.returnValue(Promise.resolve(info));
|
|
||||||
spyOn(fsp, "stat").and.returnValue(Promise.resolve(stat));
|
|
||||||
expect(await store.info(fid)).toEqual(Object.assign({}, info, stat));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should throw an http error on file info if file doesn't exist", (next) => {
|
|
||||||
store.info(fid)
|
|
||||||
// TODO use always when available
|
|
||||||
// .always(() => next());
|
|
||||||
.then(() => {
|
|
||||||
// if this test fails you accidently created that file and didn't cleanup
|
|
||||||
expect(true).toBeFalsy();
|
|
||||||
next();
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
expect(e).toEqual(jasmine.any(httpErrors.NotFound().constructor));
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should append file content", async() => {
|
|
||||||
let readStream = fsp.createReadStream('/dev/urandom', {start: 0, end: 99});
|
|
||||||
|
|
||||||
spyOn(store, "info").and.returnValue(Promise.resolve(info));
|
|
||||||
spyOn(fsp, "writeJson").and.returnValue(Promise.resolve());
|
|
||||||
spyOn(fsp, "createWriteStream").and.callThrough();
|
|
||||||
|
|
||||||
let retVal = await store.append(fid, readStream, 0);
|
|
||||||
expect(retVal).toEqual({offset: 100, upload: info});
|
|
||||||
|
|
||||||
expect(store.info).toHaveBeenCalledWith(fid);
|
|
||||||
expect(fsp.writeJson).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should create a read stream", (next) => {
|
|
||||||
let cb = jasmine.createSpy('cb');
|
|
||||||
spyOn(store, "info").and.returnValue(Promise.resolve(info));
|
|
||||||
spyOn(store, "getFilename");
|
|
||||||
spyOn(fsp, "createReadStream");
|
|
||||||
|
|
||||||
store.createReadStream(fid, 0, 100, cb);
|
|
||||||
|
|
||||||
expect(store.getFilename).toHaveBeenCalledTimes(2);
|
|
||||||
expect(store.info).toHaveBeenCalled();
|
|
||||||
expect(fsp.createReadStream).toHaveBeenCalled();
|
|
||||||
setTimeout(() => {
|
|
||||||
expect(cb).toHaveBeenCalled();
|
|
||||||
next();
|
|
||||||
}, 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should delete files", async() => {
|
|
||||||
spyOn(fsp, "unlink");
|
|
||||||
spyOn(store, "getFilename");
|
|
||||||
|
|
||||||
await store.del(fid);
|
|
||||||
|
|
||||||
expect(fsp.unlink).toHaveBeenCalledTimes(2);
|
|
||||||
expect(store.getFilename).toHaveBeenCalledTimes(3);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Reference in New Issue
Block a user