UNPKG

node-smb-server

Version:

A Pure JavaScript SMB Server Implementation

699 lines (651 loc) 26.5 kB
/* * 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'); describe('LocalTreeTests', function () { var c; beforeEach(function () { c = new RQCommon(); }); it('testCacheInfoExists', function (done) { c.localTree.cacheInfoExists('/test', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeFalsy(); c.addFile(c.localRawTree, '/.aem/test.json', function () { c.localTree.cacheInfoExists('/test', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeTruthy(); done(); }); }); }); }); it('testGetInfoFilePath', function () { expect(c.localTree.getInfoFilePath('/test')).toEqual('/.aem/test.json'); }); describe('Downloading', function () { it('testIsDownloading', function () { expect(c.localTree.isDownloading('/testfile')).toBeFalsy(); c.localTree.setDownloading('/testfile', true); expect(c.localTree.isDownloading('/testfile')).toBeTruthy(); c.localTree.setDownloading('/testfile', false); expect(c.localTree.isDownloading('/testfile')).toBeFalsy(); }); it('testDownloadingMultiple', function () { c.localTree.setDownloading('/testfile', false); expect(c.localTree.isDownloading('/testfile')).toBeFalsy(); c.localTree.setDownloading('/testfile', true); expect(c.localTree.isDownloading('/testfile')).toBeTruthy(); }); it('testWaitDownload', function (done) { var waited = false; c.localTree.setDownloading('/testfile', true); c.localTree.waitOnDownload('/testfile', function (err) { expect(err).toBeFalsy(); expect(waited).toBeTruthy(); // it shouldn't wait a second time c.localTree.waitOnDownload('/testfile', function (err) { expect(err).toBeFalsy(); done(); }); }); setTimeout(function () { waited = true; c.localTree.setDownloading('/testfile', false); }, 500); }); it('testWaitDownloadNotDownloading', function (done) { c.localTree.waitOnDownload('/testfile', function (err) { expect(err).toBeFalsy(); done(); }); }); it('testDownload', function (done) { c.addFile(c.remoteTree, '/test', function () { c.expectLocalFileExist('/test', false, false, function () { c.localTree.download(c.remoteTree, '/test', function (err, file) { expect(err).toBeFalsy(); expect(file).toBeTruthy(); c.expectLocalFileExistExt('/test', true, true, false, done); }); }); }); }); }); describe('RefreshCacheInfo', function () { it('testRefreshCacheInfo', function (done) { c.addFile(c.remoteTree, '/test', function (remote) { c.localTree.createFile('/test', function (err, local) { expect(err).toBeFalsy(); var lastModified = local.lastModified(); var lastSynced = local.getLastSyncDate(); expect(lastModified).toBeTruthy(); expect(lastSynced).toBeTruthy(); expect(local.getDownloadedRemoteModifiedDate()).toBeFalsy(); expect(local.isCreatedLocally()).toBeTruthy(); setTimeout(function () { c.localTree.refreshCacheInfo('/test', remote, function (err) { expect(err).toBeFalsy(); c.localTree.open('/test', function (err, local) { expect(err).toBeFalsy(); expect(local.lastModified()).toEqual(local.lastModified()); expect(local.getLastSyncDate()).not.toEqual(lastSynced); expect(local.getDownloadedRemoteModifiedDate()).toEqual(remote.lastModified()); expect(local.isCreatedLocally()).toBeFalsy(); done(); }); }); }, 5); }); }); }); it('testRefreshCacheInfoAfterUpdate', function (done) { // verify that if a remote file is updated to a local version, the local modified date is still used c.addFile(c.remoteTree, '/test', function (remote) { c.localTree.download(c.remoteTree, '/test', function (err, local) { expect(err).toBeFalsy(); local.setLastModified(local.lastModified() + 10); var localModified = local.lastModified(); local.close(function (err) { expect(err).toBeFalsy(); remote.setLastModified(local.lastModified() + 10); remote.close(function (err) { expect(err).toBeFalsy(); c.localTree.refreshCacheInfo('/test', remote, function (err) { expect(err).toBeFalsy(); c.localTree.open('/test', function (err, local) { expect(err).toBeFalsy(); expect(local.lastModified()).toEqual(localModified); done(); }); }); }); }); }); }); }); it('testRefreshCacheInfoNoExist', function (done) { c.addFile(c.remoteTree, '/test', function (remote) { c.addFile(c.localRawTree, '/test', function () { c.localTree.refreshCacheInfo('/test', remote, function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', true, false, done); }); }); }); }); }); describe('CreateFile', function () { it('testCreateFromSource', function (done) { c.addFile(c.remoteTree, '/test', function (remote) { c.addFile(c.localRawTree, '/test', function (file) { c.addFile(c.localRawTree, '/test2', function (file2) { c.localTree.createFromSource(file, remote, true, function (err, local) { expect(err).toBeFalsy(); expect(local).toBeTruthy(); expect(local.getDownloadedRemoteModifiedDate()).toEqual(remote.lastModified()); expect(local.isCreatedLocally()).toBeTruthy(); remote.setLastModified(12345); c.expectLocalFileExist('/test', true, true, function () { c.localTree.createFromSource(file, remote, false, function (err, local2) { expect(err).toBeFalsy(); expect(local2).toBeTruthy(); expect(local2.getDownloadedRemoteModifiedDate()).toEqual(local.getDownloadedRemoteModifiedDate()); expect(local2.isCreatedLocally()).toBeTruthy(); c.expectLocalFileExist('/test', true, true, function () { c.localTree.createFromSource(file2, remote, false, function (err, local3) { expect(err).toBeFalsy(); expect(local3).toBeTruthy(); expect(local3.getDownloadedRemoteModifiedDate()).toEqual(12345); expect(local3.isCreatedLocally()).toBeFalsy(); done(); }); }); }); }); }); }); }); }); }); it('testCreateFromSourceDir', function (done) { c.addDirectory(c.remoteTree, '/test', function (remote) { c.addDirectory(c.localRawTree, '/test', function (dir) { c.localTree.createFromSource(dir, remote, true, function (err, local) { expect(err).toBeFalsy(); expect(local).toBeTruthy(); expect(local.getDownloadedRemoteModifiedDate()).toBeFalsy(); expect(local.isCreatedLocally()).toBeFalsy(); c.expectLocalFileExistExt('/test', true, false, false, done); }); }); }); }); it('testCreateFromSourceTempFile', function (done) { c.addFile(c.remoteTree, '/.test', function (remote) { c.addFile(c.localRawTree, '/.test', function (file) { c.localTree.createFromSource(file, remote, true, function (err, local) { expect(err).toBeFalsy(); expect(local).toBeTruthy(); expect(local.getDownloadedRemoteModifiedDate()).toBeFalsy(); expect(local.isCreatedLocally()).toBeFalsy(); c.expectLocalFileExistExt('/.test', true, false, false, done); }); }); }); }); }); it('testExists', function (done) { c.localTree.exists('/test', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeFalsy(); c.addFile(c.localTree, '/test', function () { c.localTree.exists('/test', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeTruthy(); done(); }); }); }); }); describe('OpenTest', function () { it('testOpen', function (done) { c.localTree.createFile('/test', function (err) { expect(err).toBeFalsy(); c.localTree.open('/test', function (err, file) { expect(err).toBeFalsy(); expect(file).toBeTruthy(); c.expectLocalFileExistExt('/test', true, true, true, done); }); }); }); it('testOpenNoExist', function (done) { c.localTree.open('/test', function (err) { expect(err).toBeTruthy(); done(); }); }); it('testOpenNoWork', function (done) { c.addFile(c.localRawTree, '/test', function () { c.localTree.open('/test', function (err, file) { expect(err).toBeFalsy(); expect(file).toBeTruthy(); c.expectLocalFileExistExt('/test', true, true, false, done); }); }); }); }); describe('ListTest', function () { it('testList', function (done) { c.localTree.createFile('/test', function (err) { expect(err).toBeFalsy(); c.localTree.createFile('/test2', function (err) { expect(err).toBeFalsy(); c.localTree.list('/*', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(2); expect(files[0].isCreatedLocally()).toBeTruthy(); expect(files[1].isCreatedLocally()).toBeTruthy(); expect(files[0].getPath()).not.toEqual(files[1].getPath()); done(); }); }); }); }); it('testListDangling', function (done) { c.addFile(c.localRawTree, '/test', function () { c.expectLocalFileExistExt('/test', true, false, false, function () { c.localTree.list('/*', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(1); expect(files[0].isCreatedLocally()).toBeFalsy(); c.expectLocalFileExistExt('/test', true, true, false, done); }); }); }); }); it('testListMix', function (done) { c.addDirectory(c.localTree, '/test', function () { c.addFile(c.localTree, '/file', function () { c.addFile(c.localTree, '/.tempfile', function () { c.localTree.list('/*', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(3); expect(files[0].isCreatedLocally()).toBeFalsy(); expect(files[1].isCreatedLocally()).toBeFalsy(); expect(files[2].isCreatedLocally()).toBeFalsy(); expect(files[0].getPath()).not.toEqual(files[1].getPath()); expect(files[0].getPath()).not.toEqual(files[2].getPath()); expect(files[1].getPath()).not.toEqual(files[2].getPath()); c.expectLocalFileExistExt('/test', true, false, false, function () { c.expectLocalFileExistExt('/file', true, true, false, function () { c.expectLocalFileExistExt('/.tempfile', true, false, false, done); }); }); }); }); }); }); }); it('testListOneItem', function (done) { var validateItem = function (name, workExist, cb) { c.localTree.list(name, function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(1); expect(files[0].isCreatedLocally()).toBeFalsy(); expect(files[0].getPath()).toEqual(name); c.expectLocalFileExistExt(name, true, workExist, false, cb); }); }; c.addDirectory(c.localTree, '/test', function () { c.addFile(c.localTree, '/file', function () { c.addFile(c.localTree, '/.tempfile', function () { validateItem('/test', false, function () { validateItem('/file', true, function () { validateItem('/.tempfile', false, done); }); }); }); }); }); }); it('testListEmpty', function (done) { c.localTree.list('/*', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(0); c.localTree.list('/test/*', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(0); c.localTree.list('/test', function (err, files) { expect(err).toBeFalsy(); expect(files.length).toEqual(0); done(); }); }); }); }); }); describe('Create', function () { it('testCreateFile', function (done) { c.localTree.createFile('/test', function (err, file) { expect(err).toBeFalsy(); expect(file).toBeTruthy(); expect(file.getDownloadedRemoteModifiedDate()).toBeFalsy(); expect(file.isCreatedLocally()).toBeTruthy(); c.expectLocalFileExistExt('/test', true, true, true, done); }); }); it('testCreateFileWorkAlreadyExist', function (done) { c.addFile(c.remoteTree, '/test', function (remote) { c.addFile(c.localRawTree, '/test', function (file) { c.localTree.createFromSource(file, remote, false, function (err) { expect(err).toBeFalsy(); c.localRawTree.delete('/test', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExistExt('/test', false, true, false, function () { c.localTree.createFile('/test', function (err, file) { expect(err).toBeFalsy(); expect(file.getDownloadedRemoteModifiedDate()).toBeFalsy(); expect(file.isCreatedLocally()).toBeTruthy(); done(); }); }); }); }); }); }); }); it('testCreateDirectory', function (done) { c.localTree.createDirectory('/test', function (err, file) { expect(err).toBeFalsy(); expect(file.isDirectory()).toBeTruthy(); c.expectLocalFileExistExt('/test', true, false, false, done); }); }); }); describe('Delete', function () { it('testDelete', function (done) { c.localTree.createFile('/test', function (err) { expect(err).toBeFalsy(); c.localTree.delete('/test', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExistExt('/test', false, false, false, done); }); }); }); it('testDeleteNoExist', function (done) { c.addFile(c.localRawTree, '/test', function () { c.expectLocalFileExistExt('/test', true, false, false, function () { c.localTree.delete('/test', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', false, false, function () { c.localTree.delete('/test', function (err) { expect(err).toBeTruthy(); done(); }); }); }); }); }); }); it('testDeleteDirectory', function (done) { c.localTree.createDirectory('/test', function (err) { expect(err).toBeFalsy(); c.localTree.createFile('/test/file', function (err) { expect(err).toBeFalsy(); c.localTree.delete('/test/file', function (err) { expect(err).toBeFalsy(); c.localTree.deleteDirectory('/test', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', false, false, function () { c.localRawTree.exists('/test/.aem', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeFalsy(); c.localTree.deleteDirectory('/test', function (err) { expect(err).toBeTruthy(); done(); }); }); }); }); }); }); }); }); it('testDeleteDirectoryNotEmpty', function (done) { c.localTree.createDirectory('/test', function (err) { expect(err).toBeFalsy(); c.localTree.createFile('/test/file', function (err) { expect(err).toBeFalsy(); c.localTree.deleteDirectory('/test', function (err) { expect(err).toBeTruthy(); c.expectLocalFileExist('/test/file', true, true, function () { c.localRawTree.delete('/test/file', function (err) { expect(err).toBeFalsy(); c.localTree.deleteDirectory('/test', function (err) { expect(err).toBeFalsy(); c.localRawTree.exists('/test/.aem', function (err, exists) { expect(err).toBeFalsy(); expect(exists).toBeFalsy(); done(); }); }); }); }); }); }); }); }); }); describe('Rename', function () { it('testRename', function (done) { c.localTree.createFile('/test', function (err) { expect(err).toBeFalsy(); c.localTree.rename('/test', '/test2', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', false, false, function () { c.expectLocalFileExist('/test2', true, true, done); }); }); }); }); it('testRenameNoWork', function (done) { c.addFile(c.localRawTree, '/test', function () { c.expectLocalFileExistExt('/test', true, false, false, function () { c.localTree.rename('/test', '/test1', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', false, false, function () { c.expectLocalFileExistExt('/test1', true, true, true, done); }); }); }); }); }); it('testRenameTargetWorkExists', function (done) { c.localTree.createFile('/test', function (err) { expect(err).toBeFalsy(); c.addFile(c.localRawTree, c.localTree.getInfoFilePath('/test1'), function () { c.expectLocalFileExist('/test', true, true, function () { c.expectLocalFileExistExt('/test1', false, true, false, function () { c.localTree.rename('/test', '/test1', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/test', false, false, function () { c.expectLocalFileExist('/test1', true, true, done); }); }); }); }); }); }); }); it('testRenameTempToReal', function (done) { c.localTree.createFile('/.temp', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExistExt('/.temp', true, false, false, function () { c.localTree.rename('/.temp', '/file', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/.temp', false, false, function () { c.expectLocalFileExist('/file', true, true, done); }); }); }); }); }); it('testRenameRealToTemp', function (done) { c.testTree.createFile('/file', function (err, file) { expect(err).toBeFalsy(); c.testTree.rename('/file', '/.temp', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/file', false, false, function () { c.expectLocalFileExistExt('/.temp', true, false, false, done); }); }); }); }); it('testRenameQueuedFile', function (done) { c.addQueuedFile('/testnewfile', function () { c.addFile(c.remoteTree, '/testfile', function () { c.testTree.open('/testfile', function (err, file) { expect(err).toBeFalsy(); file.cacheFile(function (err) { expect(err).toBeFalsy(); c.testTree.delete('/testfile', function (err) { expect(err).toBeFalsy(); c.testTree.rename('/testnewfile', '/testfile', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/testnewfile', false, false, function () { c.expectLocalFileExistExt('/testfile', true, true, false, function () { c.expectQueuedMethod('/', 'testfile', 'POST', function () { c.expectQueuedMethod('/', 'testnewfile', false, done); }) }); }); }); }); }); }); }); }); }); it('testRenameQueuedFileCached', function (done) { c.addFile(c.remoteTree, '/testfile', function () { c.testTree.open('/testfile', function (err, file) { expect(err).toBeFalsy(); file.cacheFile(function (err) { expect(err).toBeFalsy(); c.addFile(c.remoteTree, '/testfile1', function () { c.testTree.open('/testfile1', function (err, file) { expect(err).toBeFalsy(); file.cacheFile(function (err) { expect(err).toBeFalsy(); c.testTree.delete('/testfile1', function (err) { expect(err).toBeFalsy(); c.testTree.rename('/testfile', '/testfile1', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/testfile', false, false, function () { c.expectLocalFileExistExt('/testfile1', true, true, false, function () { c.expectQueuedMethod('/', 'testfile', 'DELETE', function () { c.expectQueuedMethod('/', 'testfile1', 'POST', done); }); }); }); }); }); }); }); }); }); }); }); }); it('testRenameFileExisting', function (done) { c.addFile(c.remoteTree, '/testfile', function () { c.testTree.open('/testfile', function (err, file) { expect(err).toBeFalsy(); file.cacheFile(function (err) { expect(err).toBeFalsy(); c.addFile(c.remoteTree, '/testfile1', function () { c.testTree.open('/testfile1', function (err, file) { expect(err).toBeFalsy(); file.cacheFile(function (err) { expect(err).toBeFalsy(); c.testTree.rename('/testfile', '/testfile1', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/testfile', false, false, function () { c.expectLocalFileExistExt('/testfile1', true, true, false, function () { c.expectQueuedMethod('/', 'testfile', 'DELETE', function () { c.expectQueuedMethod('/', 'testfile1', 'POST', done); }); }); }); }); }); }); }); }); }); }); }); it('testRenameTempToExisting', function (done) { c.addCachedFile('/testfile', function () { c.testTree.createFile('/.temp', function (err, file) { expect(err).toBeFalsy(); c.testTree.rename('/.temp', '/testfile', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/.temp', false, false, function () { c.expectLocalFileExistExt('/testfile', true, true, false, function () { c.expectQueuedMethod('/', 'testfile', 'POST', done); }); }); }); }); }); }); it('testRenameToExistingQueued', function (done) { c.addQueuedFile('/testfile', function () { c.addQueuedFile('/testfile1', function () { c.testTree.rename('/testfile', '/testfile1', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/testfile', false, false, function () { c.expectLocalFileExist('/testfile1', true, true, function () { c.expectQueuedMethod('/', 'testfile', false, function () { c.expectQueuedMethod('/', 'testfile1', 'PUT', done); }); }); }); }); }); }); }); it('testRenameTempToExistingCreated', function (done) { c.addFile(c.localTree, '/.temp', function () { c.addQueuedFile('/testfile', function () { c.testTree.rename('/.temp', '/testfile', function (err) { expect(err).toBeFalsy(); c.expectLocalFileExist('/.temp', false, false, function () { c.expectLocalFileExist('/testfile', true, true, function () { c.expectQueuedMethod('/', '.temp', false, function () { c.expectQueuedMethod('/', 'testfile', 'PUT', done); }); }); }); }); }); }); }); }); it('testDisconnect', function (done) { c.localTree.disconnect(function (err) { expect(err).toBeFalsy(); done(); }); }); });