makedrive
Version:
Webmaker Filesystem
100 lines (81 loc) • 2.94 kB
JavaScript
var expect = require('chai').expect;
var util = require('../../lib/util.js');
var MakeDrive = require('../../../client/src');
var Filer = require('../../../lib/filer.js');
describe('MakeDrive Client - sync many small files', function(){
var provider;
beforeEach(function(done) {
util.ready(function() {
provider = new Filer.FileSystem.providers.Memory(util.username());
done();
});
});
afterEach(function() {
provider = null;
});
function smallFile(number) {
return '<!doctype html> '+
'<head> '+
'<meta charset="utf-8"> '+
'<title> Small File ' + number + ' </title> '+
'</head> '+
'<body> '+
'<p>This is small file ' + number + '.</p> '+
'</body> '+
'</html>';
}
/**
* This test creates 100 small files in a dir, syncs, and checks that
* they exist on the server. It then removes them, and makes sure a
* downstream sync brings them back.
*/
it('should sync many small files', function(done) {
util.authenticatedConnection(function( err, result ) {
expect(err).not.to.exist;
var fs = MakeDrive.fs({provider: provider, manual: true, forceCreate: true});
var sync = fs.sync;
// Make a layout with /project and 100 small html files inside
var layout = {};
for(var i=0; i<100; i++) {
layout['/project/small-file' + i + '.html'] = smallFile(i);
}
sync.once('connected', function onConnected() {
util.createFilesystemLayout(fs, layout, function(err) {
expect(err).not.to.exist;
expect(sync.state).to.equal(sync.SYNC_CONNECTED);
sync.request();
});
});
sync.once('error', function onError(err){
expect(err).not.to.exist;
});
sync.once('completed', function onUpstreamCompleted() {
util.ensureRemoteFilesystem(layout, result.jar, function(err) {
expect(err).not.to.exist;
sync.disconnect();
});
});
sync.once('disconnected', function onDisconnected() {
util.deleteFilesystemLayout(fs, null, function(err) {
expect(err).not.to.exist;
// Re-sync with server and make sure we get our deep dir back
sync.once('connected', function onSecondDownstreamSync() {
sync.once('disconnected', function onSecondDisconnected() {
util.ensureFilesystem(fs, layout, function(err) {
expect(err).not.to.exist;
done();
});
});
sync.disconnect();
});
// Get a new token for this second connection
util.getWebsocketToken(result, function(err, result) {
expect(err).not.to.exist;
sync.connect(util.socketURL, result.token);
});
});
});
sync.connect(util.socketURL, result.token);
});
});
});