summaryrefslogtreecommitdiffstats
path: root/src/at/deb-split.at
diff options
context:
space:
mode:
Diffstat (limited to 'src/at/deb-split.at')
-rw-r--r--src/at/deb-split.at225
1 files changed, 225 insertions, 0 deletions
diff --git a/src/at/deb-split.at b/src/at/deb-split.at
new file mode 100644
index 0000000..69e777b
--- /dev/null
+++ b/src/at/deb-split.at
@@ -0,0 +1,225 @@
+AT_SETUP([dpkg-split options])
+AT_KEYWORDS([dpkg-split command-line])
+
+AT_CHECK([dpkg-split --version], [], [ignore])
+AT_CHECK([dpkg-split --help], [], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([dpkg-split .deb format])
+AT_KEYWORDS([dpkg-split deb-split])
+
+DPKG_GEN_CONTROL([pkg-split])
+DPKG_MOD_CONTROL([pkg-split],
+ [s/^Description:.*$/$& - normal package to be split/])
+AT_CHECK([
+# Initialize the template package
+chmod -R u+w pkg-split
+$PERL -E 'print "fade" foreach 1 .. 1024 * 512' >pkg-split/data-file
+find pkg-split | xargs touch -t 197001010100.00
+dpkg-deb --root-owner-group -Znone -b pkg-split >/dev/null
+])
+
+AT_CHECK([
+# Test splitting a package (in 10 parts: 9 * 210 KiB B + 158 KiB)
+dpkg-split -S 210 -s pkg-split.deb pkg-split-part
+for p in DPKG_SEQ([10]); do
+ test -f pkg-split-part.${p}of10.deb
+done
+ar x pkg-split-part.1of10.deb data.1
+], [], [Splitting package pkg-split into 10 parts: 1 2 3 4 5 6 7 8 9 10 done
+])
+
+DEB_SPLIT_MD5SUM=1684b6cdb72bf035ccafd653f307d3da
+DEB_SPLIT_LENGTH=2109632
+DEB_SPLIT_PART_LENGTH=214016
+DEB_SPLIT_PART_SIZE=214222
+DEB_SPLIT_LAST_LENGTH=183488
+DEB_SPLIT_LAST_SIZE=183694
+
+DEB_SPLIT_PART_SIZE_VERSION=$((DEB_SPLIT_PART_SIZE + 2))
+
+AT_CHECK_UNQUOTED([
+# Test debian-split with 2.x version
+ar x pkg-split-part.1of10.deb debian-split
+$PERL -p -i -E 's/.*/2.999/ if $. == 1' debian-split
+ar qSc pkg-split-part-version-2x.deb debian-split data.1
+ar t pkg-split-part-version-2x.deb
+dpkg-split -I pkg-split-part-version-2x.deb
+], [], [debian-split
+data.1
+pkg-split-part-version-2x.deb:
+ Part format version: 2.999
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 1/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 0 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE_VERSION bytes
+
+])
+
+DEB_SPLIT_PART_SIZE_MAGIC_EXTRA=$((DEB_SPLIT_PART_SIZE + 10))
+
+AT_CHECK_UNQUOTED([
+# Test debian-split with extra lines
+ar x pkg-split-part.1of10.deb debian-split
+echo "extra line" >>debian-split
+ar qSc pkg-split-part-magic-extra.deb debian-split data.1
+ar t pkg-split-part-magic-extra.deb
+dpkg-split -I pkg-split-part-magic-extra.deb
+], [], [debian-split
+data.1
+pkg-split-part-magic-extra.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 1/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 0 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE_MAGIC_EXTRA bytes
+
+])
+
+AT_CHECK([
+# Test missing debian-split
+cp pkg-split-part.1of10.deb pkg-split-part-missing-magic.deb
+ar d pkg-split-part-missing-magic.deb debian-split
+ar t pkg-split-part-missing-magic.deb
+dpkg-split -I pkg-split-part-missing-magic.deb
+], [], [data.1
+file 'pkg-split-part-missing-magic.deb' is not an archive part
+])
+
+AT_CHECK([
+# Test missing data part member
+cp pkg-split-part.1of10.deb pkg-split-part-missing-data.deb
+ar d pkg-split-part-missing-data.deb data.1
+ar t pkg-split-part-missing-data.deb
+dpkg-split -I pkg-split-part-missing-data.deb
+], [2], [debian-split
+], [dpkg-split: error: unexpected end of file in reading data part member ar header in pkg-split-part-missing-data.deb
+])
+
+AT_CHECK([
+# Test duplicate debian-split member
+ar x pkg-split-part.1of10.deb debian-split data.1
+ar qSc pkg-split-part-duplicate-magic.deb debian-split debian-split data.1
+ar t pkg-split-part-duplicate-magic.deb
+dpkg-split -I pkg-split-part-duplicate-magic.deb
+], [2], [debian-split
+debian-split
+data.1
+], [dpkg-split: error: file 'pkg-split-part-duplicate-magic.deb' is corrupt - second member is not data member
+])
+
+AT_CHECK_UNQUOTED([
+# Test unknown extra member
+cp pkg-split-part.1of10.deb pkg-split-part-extra-member.deb
+echo "some content" >unknown
+ar qS pkg-split-part-extra-member.deb unknown
+ar t pkg-split-part-extra-member.deb
+dpkg-split -I pkg-split-part-extra-member.deb
+], [], [debian-split
+data.1
+unknown
+pkg-split-part-extra-member.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 1/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 0 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE bytes
+
+])
+
+AT_CHECK_UNQUOTED([
+# Test getting information about the split parts (parsing verification)
+dpkg-split -I pkg-split-part.1of10.deb
+], [], [pkg-split-part.1of10.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 1/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 0 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE bytes
+
+])
+AT_CHECK_UNQUOTED([
+# Test getting information about the split parts (parsing verification)
+dpkg-split -I pkg-split-part.2of10.deb
+], [], [pkg-split-part.2of10.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 2/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 214016 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE bytes
+
+])
+AT_CHECK_UNQUOTED([
+# Test getting information about the split parts (parsing verification)
+dpkg-split -I pkg-split-part.9of10.deb
+], [], [pkg-split-part.9of10.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 9/10
+ Part length: $DEB_SPLIT_PART_LENGTH bytes
+ Part offset: 1712128 bytes
+ Part file size (used portion): $DEB_SPLIT_PART_SIZE bytes
+
+])
+AT_CHECK_UNQUOTED([
+# Test getting information about the split parts (parsing verification)
+dpkg-split -I pkg-split-part.10of10.deb
+], [], [pkg-split-part.10of10.deb:
+ Part format version: 2.1
+ Part of package: pkg-split
+ ... version: 0.0-1
+ ... architecture: all
+ ... MD5 checksum: $DEB_SPLIT_MD5SUM
+ ... length: $DEB_SPLIT_LENGTH bytes
+ ... split every: $DEB_SPLIT_PART_LENGTH bytes
+ Part number: 10/10
+ Part length: $DEB_SPLIT_LAST_LENGTH bytes
+ Part offset: 1926144 bytes
+ Part file size (used portion): $DEB_SPLIT_LAST_SIZE bytes
+
+])
+
+AT_CHECK([
+# Test joining the split parts back together
+dpkg-split -o pkg-joined.deb -j pkg-split-part.*.deb
+cmp pkg-split.deb pkg-joined.deb
+], [], [Putting package pkg-split together from 10 parts: 1 2 3 4 5 6 7 8 9 10 done
+])
+
+AT_CLEANUP