| @echo off |
| rem Copyright 2008 Google Inc. |
| rem Author: Lincoln Smith |
| rem |
| rem Licensed under the Apache License, Version 2.0 (the "License"); |
| rem you may not use this file except in compliance with the License. |
| rem You may obtain a copy of the License at |
| rem |
| rem http:#www.apache.org/licenses/LICENSE-2.0 |
| rem |
| rem Unless required by applicable law or agreed to in writing, software |
| rem distributed under the License is distributed on an "AS IS" BASIS, |
| rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| rem See the License for the specific language governing permissions and |
| rem limitations under the License. |
| rem |
| rem This script tests the correctness of the vcdiff.exe command-line |
| rem executable. It is the Windows equivalent of the src/vcdiff_test.sh |
| rem shell script for Unix systems, though some of the tests from that |
| rem script are not included here. |
| rem |
| rem If you add a new test here, please add the same test to |
| rem src/vcdiff_test.sh. |
| |
| rem The script should be passed one argument which is the location of the |
| rem vcdiff.exe executable. |
| if not exist %1 ^ |
| ( echo Must pass location of vcdiff.exe as script argument ^ |
| &&exit /b 1 ) |
| set VCDIFF=%1 |
| |
| rem These options are only needed for the encoder; |
| rem the decoder will recognize the interleaved and checksum formats |
| rem without needing to specify any options. |
| set TESTDATA_DIR=..\..\testdata |
| set VCD_OPTIONS=-interleaved -checksum |
| set DICTIONARY_FILE=%TESTDATA_DIR%\configure.ac.v0.1 |
| set TARGET_FILE=%TESTDATA_DIR%\configure.ac.v0.2 |
| set DELTA_FILE=%TEMP%\configure.ac.vcdiff |
| set OUTPUT_TARGET_FILE=%TEMP%\configure.ac.output |
| set MALICIOUS_ENCODING=%TESTDATA_DIR%\allocates_4gb.vcdiff |
| set EMPTY_FILE=%TESTDATA_DIR%\empty_file.txt |
| |
| rem vcdiff with no arguments shows usage information & error result |
| %VCDIFF% ^ |
| && ( echo vcdiff with no arguments should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 1 ok |
| |
| rem vcdiff with three arguments but without "encode" or "decode" |
| rem shows usage information & error result |
| %VCDIFF% %VCD_OPTIONS% ^ |
| -dictionary %DICTIONARY_FILE% -target %TARGET_FILE% -delta %DELTA_FILE% ^ |
| && ( echo vcdiff without operation argument should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 2 ok |
| |
| rem vcdiff with all three arguments. Verify that output file matches target file |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| || ( echo Encode with three arguments failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode with three arguments failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original ^ |
| &&exit /b 1 ) |
| echo Test 3 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| rem open-vcdiff Issue 7 |
| rem (http://code.google.com/p/open-vcdiff/issues/detail?id=7) |
| rem vcdiff using stdin/stdout. Verify that output file matches target file |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| < %TARGET_FILE% ^ |
| > %DELTA_FILE% ^ |
| || ( echo Encode using stdin/stdout failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| < %DELTA_FILE% ^ |
| > %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode using stdin/stdout failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original ^ |
| &&exit /b 1 ) |
| echo Test 4 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| rem vcdiff with mixed stdin/stdout. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| > %DELTA_FILE% ^ |
| || ( echo Encode with mixed arguments failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| > %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode with mixed arguments failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original ^ |
| &&exit /b 1 ) |
| echo Test 5 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| < %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| || ( echo Encode with mixed arguments failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| < %DELTA_FILE% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode with mixed arguments failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original ^ |
| &&exit /b 1 ) |
| echo Test 6 ok |
| |
| del %OUTPUT_TARGET_FILE% |
| rem Don't remove %DELTA_FILE%; use it for the next test |
| |
| rem If using the wrong dictionary, and dictionary is smaller than the original |
| rem dictionary, vcdiff will spot the mistake and return an error. (It can't |
| rem detect the case where the wrong dictionary is larger than the right one.) |
| %VCDIFF% decode -dictionary %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| && ( echo Decode using larger dictionary should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 7 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| rem "vcdiff test" with all three arguments. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| || ( echo vcdiff test with three arguments failed ^ |
| &&exit /b 1 ) |
| echo Test 8 ok |
| |
| del %DELTA_FILE% |
| |
| rem Dictionary file not found. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %TEMP%\nonexistent_file ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo vcdiff with missing dictionary file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 9 ok |
| |
| rem Target file not found. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TEMP%\nonexistent_file ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo vcdiff with missing target file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 10 ok |
| |
| rem Delta file not found. |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %TEMP%\nonexistent_file ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| && ( echo vcdiff with missing delta file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 11 ok |
| |
| rem Test using -stats flag |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -stats ^ |
| || ( echo Encode with -stats failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% -stats ^ |
| decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode with -stats failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original ^ |
| &&exit /b 1 ) |
| echo Test 13 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| rem open-vcdiff Issue 6 |
| rem (http://code.google.com/p/open-vcdiff/issues/detail?id=6) |
| rem Using empty file as dictionary should work, but (because dictionary is empty) |
| rem it will not produce a small delta file. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %EMPTY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -stats ^ |
| || ( echo vcdiff test with empty file as dictionary failed ^ |
| &&exit /b 1 ) |
| echo Test 14 ok |
| |
| del %DELTA_FILE% |
| |
| rem Decode using something that isn't a delta file |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %DICTIONARY_FILE% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| && ( echo vcdiff with invalid delta file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 17 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -dictionary ^ |
| && ( echo -dictionary option with no file name should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 18 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -target ^ |
| && ( echo -target option with no file name should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 19 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta ^ |
| && ( echo -delta option with no file name should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 20 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -buffersize ^ |
| && ( echo -buffersize option with no argument should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 21 ok |
| |
| rem Using -buffersize=1 should still work. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -buffersize 1 ^ |
| -stats ^ |
| || ( echo vcdiff test with -buffersize=1 failed ^ |
| &&exit /b 1 ) |
| echo Test 22 ok |
| |
| del %DELTA_FILE% |
| |
| rem Using -buffersize=1 with stdin/stdout means that vcdiff |
| rem will create a separate target window for each byte read. |
| %VCDIFF% encode -dictionary %DICTIONARY_FILE% ^ |
| -buffersize 1 ^ |
| -stats ^ |
| < %TARGET_FILE% ^ |
| > %DELTA_FILE% ^ |
| || ( echo Encode using stdin/stdout with -buffersize=1 failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| -buffersize 1 ^ |
| -stats ^ |
| < %DELTA_FILE% ^ |
| > %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode using stdin/stdout with -buffersize=1 failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original with -buffersize=1 ^ |
| &&exit /b 1 ) |
| echo Test 23 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| rem Using -buffersize=0 should fail. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -buffersize 0 ^ |
| && ( echo vcdiff test with -buffersize=0 should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 24 ok |
| |
| del %DELTA_FILE% |
| |
| rem Using -buffersize=128M (larger than default maximum) should still work. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -buffersize 134217728 ^ |
| -stats ^ |
| || ( echo vcdiff test with -buffersize=128M failed ^ |
| &&exit /b 1 ) |
| echo Test 25 ok |
| |
| del %DELTA_FILE% |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -froobish ^ |
| && ( echo vdiff test with unrecognized option should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 26 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| encode -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo encode with no dictionary option should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 27 ok |
| |
| %VCDIFF% decode -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo decode with no dictionary option should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 28 ok |
| |
| rem Remove -interleaved and -checksum options |
| %VCDIFF% encode -dictionary %DICTIONARY_FILE% ^ |
| < %TARGET_FILE% ^ |
| > %DELTA_FILE% ^ |
| || ( echo Encode without -interleaved and -checksum options failed ^ |
| &&exit /b 1 ) |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| < %DELTA_FILE% ^ |
| > %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode non-interleaved output failed ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original with -interleaved ^ |
| &&exit /b 1 ) |
| echo Test 29 ok |
| |
| rem -target_matches option |
| %VCDIFF% encode -dictionary %DICTIONARY_FILE% ^ |
| -target_matches ^ |
| -stats ^ |
| < %TARGET_FILE% ^ |
| > %DELTA_FILE% ^ |
| || ( echo Encode with -target_matches option failed ^ |
| &&exit /b 1 ) |
| rem The decode operation ignores the -target_matches option. |
| %VCDIFF% decode -dictionary %DICTIONARY_FILE% ^ |
| < %DELTA_FILE% ^ |
| > %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decode output failed with -target_matches ^ |
| &&exit /b 1 ) |
| fc /b %TARGET_FILE% %OUTPUT_TARGET_FILE% ^ |
| || ( echo Decoded target does not match original with -target_matches ^ |
| &&exit /b 1 ) |
| echo Test 30 ok |
| |
| del %DELTA_FILE% |
| del %OUTPUT_TARGET_FILE% |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| dencode -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo vdiff with unrecognized action should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 31 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| && ( echo vdiff test without delta option should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 32 ok |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| && ( echo vdiff test without target option should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 33 ok |
| |
| rem open-vcdiff Issue 8 |
| rem (http://code.google.com/p/open-vcdiff/issues/detail?id=8) |
| rem A malicious encoding that tries to produce a 4GB target file made up of 64 |
| rem windows, each window having a size of 64MB. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %MALICIOUS_ENCODING% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| -max_target_file_size=65536 ^ |
| && ( echo Decoding malicious file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 34 ok |
| |
| del %OUTPUT_TARGET_FILE% |
| |
| %VCDIFF% %VCD_OPTIONS% ^ |
| decode -dictionary %DICTIONARY_FILE% ^ |
| -delta %MALICIOUS_ENCODING% ^ |
| -target %OUTPUT_TARGET_FILE% ^ |
| -max_target_window_size=65536 ^ |
| && ( echo Decoding malicious file should fail, but succeeded ^ |
| &&exit /b 1 ) |
| echo Test 35 ok |
| |
| del %OUTPUT_TARGET_FILE% |
| |
| rem Decoding a small target with the -max_target_file_size option should succeed. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -max_target_file_size=65536 ^ |
| || ( echo vcdiff test with -max_target_file_size failed ^ |
| &&exit /b 1 ) |
| echo Test 36 ok |
| |
| rem Decoding a small target with -max_target_window_size option should succeed. |
| %VCDIFF% %VCD_OPTIONS% ^ |
| test -dictionary %DICTIONARY_FILE% ^ |
| -target %TARGET_FILE% ^ |
| -delta %DELTA_FILE% ^ |
| -max_target_window_size=65536 ^ |
| || ( echo vcdiff test with -max_target_window_size failed ^ |
| &&exit /b 1 ) |
| echo Test 37 ok |
| |
| del %DELTA_FILE% |
| |
| echo PASS |