aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/singlejar/zip64_test.sh
diff options
context:
space:
mode:
authorGravatar Sasha Smundak <asmundak@google.com>2016-08-23 17:21:47 +0000
committerGravatar John Cater <jcater@google.com>2016-08-23 22:58:27 +0000
commit207349e0e97c8b171d8cde6b3e3d5ae6b14d289e (patch)
treee83fc5ea85bef8593f0fdb017b9c6cf0e00a333b /src/tools/singlejar/zip64_test.sh
parent30a91955420e6b6fa9a5fc6b7488ca4a9e12597d (diff)
Generate Zip64 End Of Central Directory record if the output archive is >4G or has >64K entries.
RELNOTES: -- MOS_MIGRATED_REVID=131069270
Diffstat (limited to 'src/tools/singlejar/zip64_test.sh')
-rwxr-xr-xsrc/tools/singlejar/zip64_test.sh61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/tools/singlejar/zip64_test.sh b/src/tools/singlejar/zip64_test.sh
new file mode 100755
index 0000000000..3986ed0f92
--- /dev/null
+++ b/src/tools/singlejar/zip64_test.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+# Copyright 2015 The Bazel Authors. All rights reserved.
+#
+# 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.
+#
+#
+# Arguments:
+# unittest.bash script
+# singlejar path
+# jar tool path
+
+(($# >= 3)) || \
+ { echo "Usage: $0 <unittest.bash dir> <singlejar> <jartool>" >&2; exit 1; }
+
+# Load test environment
+source $1/unittest.bash \
+ || { echo "unittest.bash not found!" >&2; exit 1; }
+
+set -e
+declare -r singlejar="$2"
+declare -r jartool="$3"
+
+
+# Test that an archive with >64K entries can be created.
+function test_65Kentries() {
+ local -r top="$TEST_TMPDIR/65Kentries"
+ date
+ mkdir -p "$top"
+ dd if=/dev/zero of="$top/file" bs=256 count=1
+ for dir in {1..256}; do
+ # Create 256 tiny files in $dirpath
+ local dirpath="$top/dir$dir"
+ mkdir -p "$dirpath"
+ split -b 1 "$top/file" "$dirpath/x."
+ done
+ # Now we have 256 directories with 256 files in each. Zipping them together
+ # yields an archive with >64K entries.
+ local -r inzip="$TEST_TMPDIR/in65K.zip"
+ local -r outzip="$TEST_TMPDIR/out65K.zip"
+ rm -f "$inzip" "$outzip"
+ "$jartool" -cf "$inzip" "$top"
+
+ "$singlejar" --output "$outzip" --sources "$inzip"
+ # Verify jar can read it.
+ local -ir n_entries=$("$jartool" -tf "$outzip" | wc -l)
+ ((${n_entries:-0} > 65536)) || \
+ { echo Expected 65536 entries, got "$n_entries" >&2; exit 1; }
+}
+
+run_suite "singlejar Zip64 handling"