node-smb-server
Version:
A Pure JavaScript SMB Server Implementation
315 lines (276 loc) • 10.6 kB
JavaScript
/*
* Copyright 2016 Adobe Systems Incorporated. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
var RQCommon = require('./rq-common');
var RQLocalFile = RQCommon.require(__dirname, '../../../../lib/backends/rq/localfile');
describe('LocalFileTest', function () {
var c;
beforeEach(function () {
c = new RQCommon();
});
function _getCacheInfo(localLastModified, remoteLastModified, created) {
return _getCacheInfoExt(localLastModified, remoteLastModified, 0, created, false);
}
function _getCacheInfoExt(
localLastModified,
remoteLastModified,
remoteCreated,
created,
refreshed) {
var data = {
local: {
lastModified: localLastModified
},
created: created,
refreshed: refreshed,
synced: new Date().getTime()
};
if (remoteLastModified || remoteCreated) {
data['remote'] = {
lastModified: remoteLastModified,
created: remoteCreated,
};
}
return data;
}
describe('CreateInstanceTest', function () {
function _createInfoFile(info, cb) {
if (info) {
info = JSON.stringify(info);
}
c.addFileWithDates(c.localRawTree, '/.aem/test', info, 12345, 123456, function () {
c.addFile(c.localRawTree, '/test', function (file) {
c.localRawTree.open('/.aem/test', function (err, infoFile) {
expect(err).toBeFalsy();
cb(file, infoFile);
});
});
});
}
it('testCreateInstance', function (done) {
_createInfoFile(_getCacheInfo(54321, 54321, true), function (file, infoFile) {
RQLocalFile.createInstance(file, infoFile, c.localTree, function (err, local) {
expect(err).toBeFalsy();
expect(local).toBeTruthy();
expect(local.isCreatedLocally()).toBeTruthy();
done();
});
});
});
it('testCreateInstanceBadInfo', function (done) {
_createInfoFile('', function (file, infoFile) {
RQLocalFile.createInstance(file, infoFile, c.localTree, function (err, local) {
expect(err).toBeFalsy();
expect(local).toBeTruthy();
expect(local.isCreatedLocally()).toBeFalsy();
done();
});
});
});
it('testCreateInstanceNoInfo', function (done) {
c.addFile(c.localRawTree, '/test', function (file) {
RQLocalFile.createInstance(file, null, c.localTree, function (err, local) {
expect(err).toBeFalsy();
expect(local).toBeTruthy();
expect(local.isCreatedLocally()).toBeFalsy();
done();
});
});
});
});
it('testAccessors', function (done) {
c.addFile(c.remoteTree, '/test', function (remote) {
c.addFile(c.localRawTree, '/test', function (source) {
var file = new RQLocalFile(source, RQLocalFile.getCacheInfo(source, remote, true), c.localTree);
expect(file.isCreatedLocally()).toBeTruthy();
expect(file.getDownloadedRemoteModifiedDate()).toEqual(remote.lastModified());
expect(file.getLastSyncDate()).toBeTruthy();
expect(file.isFile()).toEqual(source.isFile());
expect(file.isDirectory()).toEqual(source.isDirectory());
expect(file.isReadOnly()).toEqual(source.isReadOnly());
expect(file.size()).toEqual(source.size());
expect(file.allocationSize()).toEqual(source.allocationSize());
file = new RQLocalFile(file, null, c.localTree);
expect(file.isCreatedLocally()).toBeFalsy();
expect(file.getDownloadedRemoteModifiedDate()).toEqual(0);
expect(file.getLastSyncDate()).toEqual(0);
done();
});
});
});
describe('CanDeleteTest', function () {
it('testCanDelete', function (done) {
c.addFile(c.localRawTree, '/test', function (file) {
var file = new RQLocalFile(file, _getCacheInfo(file.lastModified(), 1234, false), c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeTruthy();
done();
});
});
});
it('testCanDeleteModified', function (done) {
c.addFile(c.localRawTree, '/test', function (file) {
var file = new RQLocalFile(file, _getCacheInfo(12345, 1234, false), c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeFalsy();
done();
});
});
});
it('testCanDeleteCreated', function (done) {
c.addFile(c.localRawTree, '/test', function (file) {
var file = new RQLocalFile(file, _getCacheInfo(file.lastModified(), 1234, true), c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeFalsy();
done();
});
});
});
it('testCanDeleteDirectory', function (done) {
c.addDirectory(c.localRawTree, '/test', function (dir) {
var file = new RQLocalFile(dir, null, c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeTruthy();
done();
});
});
});
it('testCanDeleteTempFile', function (done) {
c.addFile(c.localRawTree, '/.test', function (file) {
var file = new RQLocalFile(file, null, c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeTruthy();
done();
});
});
});
it('testCanDeleteDangling', function (done) {
c.addFile(c.localRawTree, '/test', function (file) {
var file = new RQLocalFile(file, _getCacheInfo(file.lastModified(), 0, false), c.localTree);
file.canDelete(function (err, canDelete) {
expect(err).toBeFalsy();
expect(canDelete).toBeFalsy();
done();
});
});
});
});
describe('TimeTests', function () {
it('testDatesRemote', function (done) {
c.addFile(c.localRawTree, '/test', function (local) {
var file = new RQLocalFile(local, _getCacheInfoExt(
local.lastModified(), 12345, 12346,
false, false
), c.localTree);
expect(file.lastModified()).toEqual(12345);
expect(file.lastChanged()).toEqual(file.lastModified());
expect(file.created()).toEqual(12346);
expect(file.lastAccessed()).toEqual(local.lastAccessed());
file.setLastModified(54321);
expect(file.lastModified()).toEqual(54321);
expect(file.lastChanged()).toEqual(54321);
expect(file.created()).toEqual(12346);
expect(file.lastAccessed()).toEqual(local.lastChanged());
done();
});
});
it('testDatesCreated', function (done) {
c.addFile(c.localRawTree, '/test', function (local) {
var file = new RQLocalFile(local, _getCacheInfoExt(
local.lastModified(), 0, 0,
true, false
), c.localTree);
expect(file.lastModified()).toEqual(local.lastModified());
expect(file.lastChanged()).toEqual(local.lastChanged());
expect(file.created()).toEqual(local.created());
expect(file.lastAccessed()).toEqual(local.lastAccessed());
file.setLastModified(54321);
expect(file.lastModified()).toEqual(54321);
expect(file.lastChanged()).toEqual(54321);
expect(file.created()).toEqual(local.created());
expect(file.lastAccessed()).toEqual(local.lastAccessed());
done();
});
});
it('testDatesDangling', function (done) {
c.addFile(c.localRawTree, '/test', function (local) {
var file = new RQLocalFile(local, _getCacheInfoExt(
local.lastModified(), 0, 0,
false, false
), c.localTree);
expect(file.lastModified()).toEqual(local.lastModified());
expect(file.lastChanged()).toEqual(local.lastChanged());
expect(file.created()).toEqual(local.created());
expect(file.lastAccessed()).toEqual(local.lastAccessed());
file.setLastModified(54321);
expect(file.lastModified()).toEqual(54321);
expect(file.lastChanged()).toEqual(54321);
expect(file.created()).toEqual(local.created());
expect(file.lastAccessed()).toEqual(local.lastAccessed());
done();
});
});
});
it('testReadWrite', function (done) {
c.addFile(c.localRawTree, '/test', function (local) {
var file = new RQLocalFile(local, _getCacheInfo(local.lastModified(), 12345, false), c.localTree);
file.setLength(5, function (err) {
expect(err).toBeFalsy();
file.write('hello', 0, function (err) {
expect(err).toBeFalsy();
var buff = new Array(5);
file.read(buff, 0, 5, 0, function (err, read, buffer) {
expect(err).toBeFalsy();
expect(read).toEqual(5);
expect(buffer.toString('utf8')).toEqual('hello');
expect(buff.join('')).toEqual('hello');
done();
});
});
});
});
});
it('testDelete', function (done) {
c.localTree.createFile('/test', function (err, local) {
expect(err).toBeFalsy();
local.delete(function (err) {
expect(err).toBeFalsy();
c.expectLocalFileExist('/test', false, false, done);
});
});
});
it('testDeleteDir', function (done) {
c.localTree.createDirectory('/test', function (err, dir) {
expect(err).toBeFalsy();
dir.delete(function (err) {
expect(err).toBeFalsy();
c.expectLocalFileExist('/test', false, false, done);
});
});
});
it('testFlushClose', function (done) {
c.localTree.createFile('/test', function (err, local) {
expect(err).toBeFalsy();
local.flush(function (err) {
expect(err).toBeFalsy();
local.close(function (err) {
expect(err).toBeFalsy();
done();
});
});
});
});
});