diff options
Diffstat (limited to 'modules/libmar/tests/unit/test_create.js')
-rw-r--r-- | modules/libmar/tests/unit/test_create.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/modules/libmar/tests/unit/test_create.js b/modules/libmar/tests/unit/test_create.js new file mode 100644 index 000000000..b6db280c9 --- /dev/null +++ b/modules/libmar/tests/unit/test_create.js @@ -0,0 +1,78 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function run_test() { + + /** + * Creates MAR from the passed files, compares it to the reference MAR. + * + * @param refMARFileName The name of the MAR file that should match + * @param files The files that should go in the created MAR + * @param checkNoMAR If true return an error if a file already exists + */ + function run_one_test(refMARFileName, files, checkNoMAR) { + if (checkNoMAR === undefined) { + checkNoMAR = true; + } + + // Ensure the MAR we will create doesn't already exist. + let outMAR = tempDir.clone(); + outMAR.append("out.mar"); + if (checkNoMAR) { + do_check_false(outMAR.exists()); + } + + // Create the actual MAR file. + createMAR(outMAR, do_get_file("data"), files); + + // Get the reference MAR data. + let refMAR = do_get_file("data/" + refMARFileName); + let refMARData = getBinaryFileData(refMAR); + + // Verify the data of the MAR is what it should be. + let outMARData = getBinaryFileData(outMAR); + compareBinaryData(outMARData, refMARData); + } + + // Define the unit tests to run. + let tests = { + // Test creating a MAR file with a 0 byte file. + test_zero_sized: function() { + return run_one_test(refMARPrefix + "0_sized_mar.mar", ["0_sized_file"]); + }, + // Test creating a MAR file with a 1 byte file. + test_one_byte: function() { + return run_one_test(refMARPrefix + "1_byte_mar.mar", ["1_byte_file"]); + }, + // Test creating a MAR file with binary data. + test_binary_data: function() { + return run_one_test(refMARPrefix + "binary_data_mar.mar", + ["binary_data_file"]); + }, + // Test creating a MAR file with multiple files inside of it. + test_multiple_file: function() { + return run_one_test(refMARPrefix + "multiple_file_mar.mar", + ["0_sized_file", "1_byte_file", "binary_data_file"]); + }, + // Test creating a MAR file on top of a different one that already exists + // at the location the new one will be created at. + test_overwrite_already_exists: function() { + let differentFile = do_get_file("data/1_byte_mar.mar"); + let outMARDir = tempDir.clone(); + differentFile.copyTo(outMARDir, "out.mar"); + return run_one_test(refMARPrefix + "binary_data_mar.mar", + ["binary_data_file"], false); + }, + // Between each test make sure the out MAR does not exist. + cleanup_per_test: function() { + let outMAR = tempDir.clone(); + outMAR.append("out.mar"); + if (outMAR.exists()) { + outMAR.remove(false); + } + } + }; + + // Run all the tests + do_check_eq(run_tests(tests), Object.keys(tests).length - 1); +} |