1
0
Fork 0
arangodb/tests/js/common/shell/shell-fs.js

1149 lines
42 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*jshint globalstrict:false, strict:false, maxlen: 5000 */
/*global assertTrue, assertFalse, assertEqual, assertNotEqual, fail, Buffer */
////////////////////////////////////////////////////////////////////////////////
/// @brief test filesystem functions
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2012 triagens GmbH, Cologne, Germany
///
/// Licensed 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 CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is triAGENS GmbH, Cologne, Germany
///
/// @author Jan Steemann
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
var jsunity = require("jsunity");
var fs = require("fs");
var internal = require("internal");
////////////////////////////////////////////////////////////////////////////////
/// @brief test attributes
////////////////////////////////////////////////////////////////////////////////
function FileSystemSuite () {
'use strict';
var ERRORS = require("internal").errors;
var tempDir;
var binary = "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";
var hex = "89504e470d0a1a0a0000000d494844520000003c0000003c08060000003afcd9720000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000005864944415478daec5aeb4f1457143f2cbb2ccf7df07e594194425181150421d6941630184921f2413fd8176db0ff4e3f549b267d24b5a998d8362d9545686c95b2828891375520488102cb2eb02f5edb7bae9dcbccc0126109bb837392c9eebd73ef667e735ebf73ee06b8dd6e78954401af98283dddb85257b72f007e7ef5eacb01fe5fa46cef01dbd2304a5464245caaa9911cd2ebf5f5306b36cb3e2c039601cb8065c0326019b00c58062c03f649b5b45359b4d960f0ef21364e3f7c04c2c3c2f62fe0b9b939f8b5b1918d63a2a2fd0ab0d726fde06107bd38595a5e16dce78fc56b25a7617cf8c6e66666ca168b157a07fa056bbebf590f6fbc9e013a9d16eeb7b5b1f99327f2a405786272928145e183117410dc6ee8e9ef13cce1be0349c990101f2f1d93c6872d7dab64477b719f2fc07a6dd2f90603fcd17a1f5c2e179b43cd151716426c4c0c381c0eaa5d534707acaeaed2fb6ab51af27273a5e9c33dfdfd42b0c9c9507dfe3c68223474acd568203e2e0e82d5c1d0d6fe00ece405e07a7c09d9478f4907f097df7ef32205592c82f9b7cf9c6160f9525450004e97135a4d263a36b6b4407b6727fd5e7bf93dff078c016b33898b89dd743e202000921393d8d8e9747afc0d4951cb65510ee68b6bc9255de2811116afe0e060914ff76dcebe88e977f7aedfc37ddc6f48c28739bf7bdcfd047e6e6860f377efdd236042e07856169b3313aaf9cbeddf60746c8ccd9595946c19b4307737188d10131d051a12f8d01d768b9e7a15a5b332322989e022b5937c1a9bef80d96c86c48404b0d9edf0a4a75b0016d312eee3cbf4ec0c495b6b101ffb220658e7e7a1f37117bb5f5951b16b51dd2bc0f850fcb484e22001e9cfbf5a3dfb32598ffb386a895682da440d7ef2fe0734c03d1b1911ecd1697502ed7381d0a7d4723bc251cb7f2626a0a1c948e72c562b7cf1f55754bbe223dcb6f6769ad3954a25dcfce947389492026f1615ef2d608e5a36fddec2722d06a7fec141c103a32632d2d341afd3b13ccc514b3cbb329102843b0742d034922a14f45a5959a163acaf9f0e3f03955245f3f9f3f171ead7087c4f4dba303f7fc3f7a7c3c370bdfe069bbf78a106d25253e9f7b0d030c1daa0a0203875b28006354e424242208ef832e6748bd502f30b0b6027b1003f112c67d6b7ef34c1a7b51fef7d03800f9a8250a93c8ec56b5183ada6f52a0bfd187d3b2b3313d4e46510f380c9a949e2d3a324f8f5c0c2e2025d9748ace3c2bb55fed1f108230f6dc8ce118cc582c79976871d140410a62d4e728f6743415e1ef5554e0e1e788db8839ed4dac45d8606616d6d0d4ee41aa84ffb05e048bd1ece95976fb9e6dfe969a62dc68088cfa2aff3c172f33aad96fa7b606020053c3c3a0239c77696a6f6bc6b8965e2a26d71c33ce6e788f0708ffb30a723589481a121a8bf758b46f8a5a525ff076cc8c9818c23e9a012f9fbf4ecacc73dd6792baba991b3a37977767551adfb35608ccc15a56550535505e96987058404db44330434078cff22f8bebe1ee4c2b70d58093e94d49483ace040731d1b7f4eeae487904472ac9ef8ad56ab2104670afa060704b57712a1ad6b2435858684fa3e68bdac20a3ea78f468439a42e2323c3a4a5f40745414381ca4769e5aaf9d313a5fbe78694370f37bc0dfddf861c33f6d905060bb172f64681ccde433b7d38452ee14ac4f7c9893b3ef94b202007b5e625f4490a86531af36115ebdddc8ec17806901505c4c1b7f576a6ba1eec38fe839d466ed21ad462b2825bbfb7a7d531e7a2ba74f15d18b6a9a3032a49efc83b873e567e128a199a865aca4d0d42bcacabcaa8d7d0a585cd362b1c0172c3a308da1d4545513b357d0c3399f3500765bd2520f41756525d88826a76766411311c1ee71dd109f763c765bb05a12b77ffca26b29659101cb8065c0326019b00c58062c03de33d9925a6281fed9b56bfb0af07f020c009967495659aa8df80000000049454e44ae426082";
return {
////////////////////////////////////////////////////////////////////////////////
/// @brief set up
////////////////////////////////////////////////////////////////////////////////
setUp : function () {
// create a name for a temporary directory we will run all tests in
// as we are creating a new name, this shouldn't collide with any existing
// directories, and we can also remove our directory when the tests are
// over
tempDir = fs.join(fs.getTempFile('', false));
try {
// create this directory before any tests
fs.makeDirectoryRecursive(tempDir);
}
catch (err) {
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief tear down
////////////////////////////////////////////////////////////////////////////////
tearDown : function () {
// some sanity check as we don't want to unintentionally remove "." or "/"
if (tempDir.length > 5) {
// remove our temporary directory with all its subdirectories
// we created it, so we don't care what's in it
fs.removeDirectoryRecursive(tempDir);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief exists() - test if a file / directory exists
////////////////////////////////////////////////////////////////////////////////
testExists : function () {
var tempName;
// create the name for a new directory
tempName = fs.join(tempDir, 'foo');
try {
// remove it if it exists
fs.removeDirectory(tempName);
}
catch (err) {
}
// create the directory with all paths to it
fs.makeDirectoryRecursive(tempName);
// now the directory should exist
assertTrue(fs.exists(tempName));
// remove it again
fs.removeDirectory(tempName);
// non-existing directory/file
tempName = fs.join(tempDir, 'meow');
// this file should not exist
assertFalse(fs.exists(tempName));
// create a new file
tempName = fs.getTempFile('', true);
// the file should now exist
assertTrue(fs.exists(tempName));
// clean it up
fs.remove(tempName);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief getTempFile()
////////////////////////////////////////////////////////////////////////////////
testGetTempFile : function () {
var tempName;
// creating a new empty file with a temporary name
tempName = fs.getTempFile('', true);
assertTrue(tempName !== '');
// the file should be located inside the tempPath
assertEqual(fs.getTempPath(), tempName.substr(0, fs.getTempPath().length));
// the file should exist
assertTrue(fs.exists(tempName));
// clean up
fs.remove(tempName);
// create a filename only, without creating the file itself
tempName = fs.getTempFile('', false);
assertTrue(tempName !== '');
// filename should be located underneath tempPath
assertEqual(fs.getTempPath(), tempName.substr(0, fs.getTempPath().length));
// the file should not exist
assertFalse(fs.exists(tempName));
// create a temporary filename for a file in a subdirectory, without creating the file
tempName = fs.getTempFile('tests', false);
assertTrue(tempName !== '');
// filename should be located underneath tempPath
// we need to call join() for the right-hand part too to normalize driver letters on Windows
assertEqual(fs.join(fs.getTempPath(), 'test'), fs.join(tempName.substr(0, fs.join(fs.getTempPath(), 'test').length)));
// file should not yet exist
assertFalse(fs.exists(tempName));
// clean up
fs.removeDirectory(fs.join(fs.getTempPath(), 'tests'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief getTempPath() - test the system's temp path
////////////////////////////////////////////////////////////////////////////////
testGetTempPath : function () {
var tempName;
tempName = fs.getTempPath();
assertTrue(tempName !== '');
// the temp path should also be an existing directory
assertTrue(fs.isDirectory(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief isDirectory() - test if a directory exists
////////////////////////////////////////////////////////////////////////////////
testIsDirectory : function () {
var tempName;
// create a new directory name
tempName = fs.join(tempDir, 'foo');
try {
// remove any existing directory first
fs.removeDirectory(tempName);
}
catch (err) {
}
// create the directory with the full path to it
fs.makeDirectoryRecursive(tempName);
// check if it does exist
assertTrue(fs.exists(tempName));
// should also be a directory
assertTrue(fs.isDirectory(tempName));
// remove the directory
fs.removeDirectory(tempName);
// non-existing directory/file
tempName = fs.join(tempDir, 'meow');
// this file shouldn't exist
assertFalse(fs.exists(tempName));
// and thus shouldn't be a directory
assertFalse(fs.isDirectory(tempName));
// create a new file
tempName = fs.getTempFile('', true);
// should exist
assertTrue(fs.exists(tempName));
// but shouldn't be a directory
assertFalse(fs.isDirectory(tempName));
// clean up
fs.remove(tempName);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief isFile() - test if a file exists
////////////////////////////////////////////////////////////////////////////////
testIsFile : function () {
var tempName;
// create a new directory name
tempName = fs.join(tempDir, 'foo');
try {
// remove any existing directory if it exists
fs.removeDirectory(tempName);
}
catch (err) {
}
try {
// remove any existing file if it exists
fs.remove(tempName);
}
catch (err) {
}
// now create the whole directory with all paths to it
fs.makeDirectoryRecursive(tempName);
// directory should now exist
assertTrue(fs.exists(tempName));
// but should not be a file
assertFalse(fs.isFile(tempName));
// remove it
fs.removeDirectory(tempName);
// non-existing directory/file
tempName = fs.join(tempDir, 'meow');
// this file shouldn't exist
assertFalse(fs.exists(tempName));
// and shouldn't be a file
assertFalse(fs.isFile(tempName));
// now create a new file
tempName = fs.getTempFile('', true);
// should exist
assertTrue(fs.exists(tempName));
// and should be a file
assertTrue(fs.isFile(tempName));
// clean up and remove the file
fs.remove(tempName);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief listTree()
////////////////////////////////////////////////////////////////////////////////
testListTree : function () {
},
////////////////////////////////////////////////////////////////////////////////
/// @brief makeDirectory() - create a directory
////////////////////////////////////////////////////////////////////////////////
testMakeDirectory : function () {
var tempName;
// create the name for a subdirectory
tempName = fs.join(tempDir, 'bar');
try {
// remove an existing directory if it already exists
fs.removeDirectoryRecursive(tempName);
}
catch (err) {
}
// the directory shouldn't exist. we just deleted it if it was there
assertFalse(fs.exists(tempName));
// now create the directory
fs.makeDirectory(tempName);
// directory should be there after creation
assertTrue(fs.exists(tempName));
// now remove it
fs.removeDirectory(tempName);
// create the name for another subdirectory
tempName = fs.join(tempDir, 'baz');
try {
// remove it if it does exist
fs.removeDirectoryRecursive(tempName);
}
catch (err) {
}
// the directory shouldn't be there...
assertFalse(fs.exists(tempName));
// now create it
fs.makeDirectory(tempName);
// should have succeeded
assertTrue(fs.exists(tempName));
try {
// try to create the same directory again. this should fail
fs.makeDirectory(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_EXISTS.code, err.errorNum);
}
// create a subdirectory in the directory we created
tempName = fs.join(tempDir, 'baz', 'foo');
fs.makeDirectory(tempName);
// the subdirectory should now be there
assertTrue(fs.exists(tempName));
// create a file in the subdirecory
tempName = fs.join(tempDir, 'baz', 'foo', 'test');
// write something to the file
fs.write(tempName, "this is a test");
// the file should exist after writing to it
assertTrue(fs.exists(tempName));
try {
// create a directory with the name of an already existing file. this should fail.
fs.makeDirectory(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_EXISTS.code, err.errorNum);
}
// remove all stuff we created for testing
fs.removeDirectoryRecursive(fs.join(tempDir, 'baz'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief makeDirectoryRecursive() - create a directory will all paths to it
////////////////////////////////////////////////////////////////////////////////
testMakeDirectoryRecursive : function () {
var tempName;
// create the name for a new subdirectory
tempName = fs.join(tempDir, 'bar');
try {
// make sure it does not yet exist
fs.removeDirectoryRecursive(tempName);
}
catch (err) {
}
// create the subdirectory
fs.makeDirectoryRecursive(tempName);
// check if it is there
assertTrue(fs.isDirectory(tempName));
// create the subdirectory again. this should not fail
fs.makeDirectoryRecursive(tempName);
// should still be a directory
assertTrue(fs.isDirectory(tempName));
// create subdirectory in subdirectory of subdirectory
tempName = fs.join(tempDir, 'bar', 'baz', 'test');
fs.makeDirectoryRecursive(tempName);
assertTrue(fs.isDirectory(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief move()
////////////////////////////////////////////////////////////////////////////////
testMove : function () {
var tempName, tempName2;
// create a new file with a specific content
tempName = fs.join(tempDir, 'foo');
tempName2 = fs.join(tempDir, 'bar');
fs.write(tempName, "this is a test file");
fs.move(tempName, tempName2);
assertFalse(fs.isFile(tempName));
assertTrue(fs.isFile(tempName2));
assertEqual("this is a test file", fs.read(tempName2));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief move()
////////////////////////////////////////////////////////////////////////////////
testMoveDirectory : function () {
var tempName, tempName2;
// create a new file with a specific content
tempName = fs.join(tempDir, 'foo');
tempName2 = fs.join(tempDir, 'bar');
fs.makeDirectory(tempName);
fs.write(fs.join(tempName, "test"), "this is a test file");
fs.move(tempName, tempName2);
assertFalse(fs.isDirectory(tempName));
assertTrue(fs.isDirectory(tempName2));
assertTrue(fs.isFile(fs.join(tempName2, "test")));
assertEqual("this is a test file", fs.read(fs.join(tempName2, "test")));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief move()
////////////////////////////////////////////////////////////////////////////////
testMoveDirectoryExists : function () {
var tempName, tempName2;
// create a new file with a specific content
tempName = fs.join(tempDir, 'foo');
tempName2 = fs.join(tempDir, 'bar');
fs.makeDirectory(tempName);
fs.makeDirectory(tempName2);
fs.write(fs.join(tempName, "test"), "this is a test file");
try {
fs.move(tempName, tempName2);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_BAD_PARAMETER.code, err.errorNum);
}
// nothing moved
assertTrue(fs.isDirectory(tempName));
assertTrue(fs.isFile(fs.join(tempName, "test")));
assertEqual("this is a test file", fs.read(fs.join(tempName, "test")));
assertTrue(fs.isDirectory(tempName2));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief mtime()
////////////////////////////////////////////////////////////////////////////////
testMTime : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "this is a test file");
var now = Date.now() / 1000;
var mtime = fs.mtime(tempName);
// tolerate a max deviation of 60 seconds
// (deviation needs to be > 1 to make the tests succeed even on busy
// test servers)
if (require("internal").platform.substr(0, 3) === 'win') {
// Windows is bugged. For details see:
// http://stackoverflow.com/questions/19800811/last-modification-time-reported-by-stat-changes-depending-on-daylight-savings
// we just work around it here.
var deltaModulo = Math.abs(mtime - now);
assertTrue(deltaModulo <= 60 || (deltaModulo > 3540));
}
else {
assertTrue(Math.abs(mtime - now) <= 60);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief mtime()
////////////////////////////////////////////////////////////////////////////////
testMTimeUpdate : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "this is a test file");
var mtime = fs.mtime(tempName);
internal.wait(2, false);
fs.write(tempName, "this is an updated test file");
assertNotEqual(fs.mtime(tempName), mtime);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief mtime()
////////////////////////////////////////////////////////////////////////////////
testMTimeNonExisting : function () {
var tempName = fs.join(tempDir, 'test');
try {
fs.mtime(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read()
////////////////////////////////////////////////////////////////////////////////
testRead : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "this is a test file");
assertEqual("this is a test file", fs.read(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read()
////////////////////////////////////////////////////////////////////////////////
testReadMultiline : function () {
var text = "this is a test file\r\nit contains multiple lines\r\nand\ttabs.";
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, text);
assertEqual(text, fs.read(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read()
////////////////////////////////////////////////////////////////////////////////
testReadUnicode : function () {
var text = "der Möter ging mit viel Geklöter hündert Meter wäiter" +
"코리아닷컴 메일알리미 서비스 중단안내 [안내] 개인정보취급방침 변경 안내 회사소개 | 광고안내 | 제휴안내 | 개인정보취급방침 | 청소년보호정책 | 스팸방지정책 | 사이버고객센터 | 약관안내 | 이메일 무단수집거부 | 서비스 전체보기" +
"中华网以中国的市场为核心,致力为当地用户提供流动增值服务、网上娱乐及互联网服务。本公司亦推出网上游戏,及透过其门户网站提供包罗万有的网上产品及服务。" +
"Голкипер мадридского «Реала» Икер Касильяс призвал своих партнеров сосредоточить все мысли на предстоящем дерби с «Атлетико»";
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, text);
assertEqual(text, fs.read(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read()
////////////////////////////////////////////////////////////////////////////////
testReadEmpty : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "");
assertEqual("", fs.read(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief readBuffer()
////////////////////////////////////////////////////////////////////////////////
testReadBuffer : function () {
var tempName = fs.join(tempDir, 'test');
var data = new Buffer(binary, 'base64');
// write binary data
fs.write(tempName, data);
assertEqual(binary, fs.readBuffer(tempName).toString('base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief readFileSync()
////////////////////////////////////////////////////////////////////////////////
testReadFileSyncBase64 : function () {
var tempName = fs.join(tempDir, 'test');
var data = new Buffer(binary, 'base64');
// write binary data
fs.write(tempName, data);
assertEqual(binary, fs.readFileSync(tempName, 'base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief readFileSync()
////////////////////////////////////////////////////////////////////////////////
testReadFileSyncHex : function () {
var tempName = fs.join(tempDir, 'test');
// write binary data
fs.write(tempName, hex);
assertEqual(hex, fs.readFileSync(tempName, 'ascii'));
var data = fs.readBuffer(tempName).toString('ascii');
var data2 = new Buffer(data, 'hex');
assertEqual(binary, data2.toString('base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief readFileSync()
////////////////////////////////////////////////////////////////////////////////
testReadFileSyncUtf8 : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "der mötör ging mit großem Geklöter tröten");
assertEqual("der mötör ging mit großem Geklöter tröten", fs.readFileSync(tempName, 'utf-8'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief readFileSync()
////////////////////////////////////////////////////////////////////////////////
testReadFileSyncUtf16 : function () {
var tempName = fs.join(tempDir, 'test');
var text = "der mötör ging tröten mit Geklöter im größen Gärten";
var data = new Buffer(text, 'utf16le');
fs.write(tempName, data);
var data2 = fs.readFileSync(tempName);
assertEqual(text, data2.toString('utf16le'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read64()
////////////////////////////////////////////////////////////////////////////////
testRead64 : function () {
var tempName = fs.join(tempDir, 'test');
var data = new Buffer(binary, 'base64');
// write binary data
fs.write(tempName, data);
// read back as base64-encoded
assertEqual(binary, fs.read64(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read64()
////////////////////////////////////////////////////////////////////////////////
testRead64Empty : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "");
// read back as base64-encoded
assertEqual("", fs.read64(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief read64()
////////////////////////////////////////////////////////////////////////////////
testRead64Short : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "XXX");
// read back as base64-encoded
assertEqual("WFhY", fs.read64(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief remove()
////////////////////////////////////////////////////////////////////////////////
testRemove : function () {
var tempName = fs.join(tempDir, 'test');
fs.write(tempName, "abc");
assertTrue(fs.isFile(tempName));
fs.remove(tempName);
assertFalse(fs.isFile(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief remove()
////////////////////////////////////////////////////////////////////////////////
testRemoveNonExisting : function () {
var tempName = fs.join(tempDir, 'test');
try {
fs.remove(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
// directory
fs.makeDirectory(tempName);
try {
fs.remove(tempName);
fail();
}
catch (err) {
assertTrue(err.errorNum === ERRORS.ERROR_SYS_ERROR.code ||
err.errorNum === ERRORS.ERROR_FORBIDDEN.code);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test size() - the filesize of a file
////////////////////////////////////////////////////////////////////////////////
testSize : function () {
// create a new file with a specific content
var tempName = fs.join(tempDir, 'foo');
fs.write(tempName, "this is a test file");
// test the size of the new file
assertEqual(19, fs.size(tempName));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test size() - the filesize of a file
////////////////////////////////////////////////////////////////////////////////
testSizeNonExisting : function () {
var tempName = fs.join(tempDir, 'foo');
// now the file does not exist
try {
// try to read filesize. this should fail
fs.size(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
// directory
fs.makeDirectory(tempName);
try {
// try to read the filesize of a directory. this should fail
fs.size(tempName);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
// remove the directory
fs.removeDirectory(tempName);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWrite : function () {
var text = "this is a test";
var filename = fs.join(tempDir, "test");
assertEqual(true, fs.write(filename, text));
assertEqual(text.length, fs.size(filename));
var content = fs.read(filename);
assertEqual(text, content);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteEmpty : function () {
var filename = fs.join(tempDir, "test");
assertEqual(true, fs.write(filename, ""));
assertTrue(fs.isFile(filename));
var content = fs.read(filename);
assertEqual(0, fs.size(filename));
assertEqual("", content);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteJson : function () {
var filename = fs.join(tempDir, "test");
assertEqual(true, fs.write(filename, JSON.stringify({
values: [ 1, 2, 3 ],
foo: "bar",
test: true
})));
var content = fs.read(filename);
assertEqual("{\"values\":[1,2,3],\"foo\":\"bar\",\"test\":true}", content);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteMultiline : function () {
var text = "the\nquick\r\nbrown\nfoxx\tjumped over\r\n\r\nthe lazy dog.";
var filename = fs.join(tempDir, "test");
assertEqual(true, fs.write(filename, text));
assertEqual(text.length, fs.size(filename));
var content = fs.read(filename);
assertEqual(text, content);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteOverwrite : function () {
var filename = fs.join(tempDir, "test");
assertEqual(true, fs.write(filename, "this is a test"));
assertEqual(true, fs.write(filename, "this is another test"));
var content = fs.read(filename);
assertEqual("this is another test", content);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteBuffer : function () {
var filename = fs.join(tempDir, "test");
var data = new Buffer(binary, "base64");
assertEqual(true, fs.write(filename, data));
assertEqual(binary, fs.read64(filename));
assertEqual(binary, fs.readFileSync(filename, 'base64'));
assertEqual(binary, fs.readBuffer(filename).toString('base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test write()
////////////////////////////////////////////////////////////////////////////////
testWriteBufferHex : function () {
var filename = fs.join(tempDir, "test");
var data = new Buffer(binary, "base64");
assertEqual(true, fs.write(filename, data.toString('hex')));
assertEqual(hex, fs.read(filename));
var data3 = fs.read(filename);
var data2 = new Buffer(data3.toString('ascii'), 'hex');
assertEqual(binary, data2.toString('base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test writeFileSync()
////////////////////////////////////////////////////////////////////////////////
testWriteFileSync : function () {
var filename = fs.join(tempDir, "test");
var data = new Buffer(binary, "base64");
assertEqual(true, fs.writeFileSync(filename, data));
assertEqual(binary, fs.read64(filename));
assertEqual(binary, fs.readFileSync(filename, 'base64'));
assertEqual(binary, fs.readBuffer(filename).toString('base64'));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test zipFile()
////////////////////////////////////////////////////////////////////////////////
testZipFile : function () {
var tempName = fs.join(tempDir, "out.zip");
try {
// outfile must not exist
fs.remove(tempName);
}
catch (err1) {
}
fs.write(fs.join(tempDir, "one"), "some input for\r\nfile one");
fs.write(fs.join(tempDir, "two"), "some input for\r\nfile two");
assertTrue(fs.zipFile(tempName, tempDir, [ "one", "two" ]));
fs.remove(fs.join(tempDir, "one"));
fs.remove(fs.join(tempDir, "two"));
assertFalse(fs.isFile(fs.join(tempDir, "one")));
assertFalse(fs.isFile(fs.join(tempDir, "two")));
assertTrue(fs.unzipFile(tempName, tempDir, false, false));
assertTrue(fs.isFile(fs.join(tempDir, "one")));
assertTrue(fs.isFile(fs.join(tempDir, "two")));
assertEqual(fs.read(fs.join(tempDir, "one")), "some input for\r\nfile one");
assertEqual(fs.read(fs.join(tempDir, "two")), "some input for\r\nfile two");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test zipFile()
////////////////////////////////////////////////////////////////////////////////
testZipFileOverwrite : function () {
var tempName = fs.join(tempDir, "out.zip");
fs.write(tempName, "something");
fs.write(fs.join(tempDir, "one"), "some input for\r\nfile one");
try {
fs.zipFile(tempName, tempDir, [ "one" ]);
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_CANNOT_OVERWRITE_FILE.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test zipFile()
////////////////////////////////////////////////////////////////////////////////
testZipFilePasswordWrong : function () {
var tempName = fs.join(tempDir, "out.zip");
try {
// outfile must not exist
fs.remove(tempName);
}
catch (err1) {
}
fs.write(fs.join(tempDir, "one"), "some input for\r\nfile one");
fs.write(fs.join(tempDir, "two"), "some input for\r\nfile two");
assertTrue(fs.zipFile(tempName, tempDir, [ "one", "two" ], "SeCR3t"));
fs.remove(fs.join(tempDir, "one"));
fs.remove(fs.join(tempDir, "two"));
assertFalse(fs.isFile(fs.join(tempDir, "one")));
assertFalse(fs.isFile(fs.join(tempDir, "two")));
try {
// wrong password
fs.unzipFile(tempName, tempDir, false, false, "wrong!");
fail();
}
catch (err2) {
assertEqual(ERRORS.ERROR_CANNOT_WRITE_FILE.code, err2.errorNum);
}
try {
fs.remove(fs.join(tempDir, "one"));
}
catch (e1) {
}
try {
fs.remove(fs.join(tempDir, "two"));
}
catch (e2) {
}
try {
// no password
fs.unzipFile(tempName, tempDir, false, false);
fail();
}
catch (err3) {
assertEqual(ERRORS.ERROR_CANNOT_WRITE_FILE.code, err3.errorNum);
}
try {
fs.remove(fs.join(tempDir, "one"));
}
catch (e3) {
}
try {
fs.remove(fs.join(tempDir, "two"));
}
catch (e4) {
}
// correct password
assertTrue(fs.unzipFile(tempName, tempDir, false, false, "SeCR3t"));
assertTrue(fs.isFile(fs.join(tempDir, "one")));
assertTrue(fs.isFile(fs.join(tempDir, "two")));
assertEqual(fs.read(fs.join(tempDir, "one")), "some input for\r\nfile one");
assertEqual(fs.read(fs.join(tempDir, "two")), "some input for\r\nfile two");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test zipFile()
////////////////////////////////////////////////////////////////////////////////
testZipFileSubDirectory : function () {
var tempName = fs.join(tempDir, "out.zip");
try {
// outfile must not exist
fs.remove(tempName);
}
catch (err1) {
}
var subDir = fs.join(tempDir, "files");
fs.makeDirectory(subDir);
fs.write(fs.join(subDir, "one"), "some input for\r\nfile one");
fs.write(fs.join(subDir, "two"), "some input for\r\nfile two");
assertTrue(fs.zipFile(tempName, tempDir, [ "files/one", "files/two" ]));
fs.remove(fs.join(subDir, "one"));
fs.remove(fs.join(subDir, "two"));
fs.removeDirectory(subDir);
assertTrue(fs.unzipFile(tempName, tempDir, false, false));
assertTrue(fs.isDirectory(subDir));
assertTrue(fs.isFile(fs.join(subDir, "one")));
assertTrue(fs.isFile(fs.join(subDir, "two")));
assertEqual(fs.read(fs.join(subDir, "one")), "some input for\r\nfile one");
assertEqual(fs.read(fs.join(subDir, "two")), "some input for\r\nfile two");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test zipFile()
////////////////////////////////////////////////////////////////////////////////
testZipFileSubDirectorySkipPaths : function () {
var tempName = fs.join(tempDir, "out.zip");
try {
// outfile must not exist
fs.remove(tempName);
}
catch (err1) {
}
var subDir = fs.join(tempDir, "files");
fs.makeDirectory(subDir);
fs.write(fs.join(subDir, "one"), "some input for\r\nfile one");
fs.write(fs.join(subDir, "two"), "some input for\r\nfile two");
assertTrue(fs.zipFile(tempName, tempDir, [ "files/one", "files/two" ]));
fs.remove(fs.join(subDir, "one"));
fs.remove(fs.join(subDir, "two"));
fs.removeDirectory(subDir);
assertTrue(fs.unzipFile(tempName, tempDir, true, false));
assertTrue(fs.isFile(fs.join(tempDir, "one")));
assertTrue(fs.isFile(fs.join(tempDir, "two")));
assertEqual(fs.read(fs.join(tempDir, "one")), "some input for\r\nfile one");
assertEqual(fs.read(fs.join(tempDir, "two")), "some input for\r\nfile two");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test alder32()
////////////////////////////////////////////////////////////////////////////////
testAdler32EmptyFile : function() {
const file = fs.join(tempDir, 'empty.txt');
try {
fs.remove(file);
} catch (err) {
}
fs.writeFileSync(file, '');
const checksum = fs.adler32(file);
assertEqual(checksum, '1');
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test alder32()
////////////////////////////////////////////////////////////////////////////////
testAdler32File : function() {
const internal = require('internal');
const file = fs.makeAbsolute(fs.join(internal.pathForTesting('common'), 'test-data', 'foxx','toomanysecrets.txt'));
const checksum = fs.adler32(file);
assertEqual(checksum, '583533794');
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test alder32()
////////////////////////////////////////////////////////////////////////////////
testAdler32NotExistingFile : function() {
const file = fs.join(tempDir, 'ne.txt');
try {
fs.remove(file);
} catch (err) {
}
try {
fs.adler32(file);
fail();
} catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test alder32()
////////////////////////////////////////////////////////////////////////////////
testAdler32Folder : function() {
const internal = require('internal');
const folder = fs.makeAbsolute(fs.join(internal.pathForTesting('common'), 'test-data', 'foxx'));
try {
fs.adler32(folder);
fail();
} catch (err) {
assertEqual(ERRORS.ERROR_FILE_NOT_FOUND.code, err.errorNum);
}
}
};
}
////////////////////////////////////////////////////////////////////////////////
/// @brief executes the test suite
////////////////////////////////////////////////////////////////////////////////
jsunity.run(FileSystemSuite);
return jsunity.done();