2018-03-21 19:32:29 +00:00
|
|
|
var test = require('tape')
|
|
|
|
var stream = require('readable-stream')
|
|
|
|
var zlib = require('zlib')
|
|
|
|
var fs = require('fs')
|
|
|
|
var tar = require('../')
|
|
|
|
var fixtures = require('./fixtures')
|
|
|
|
|
|
|
|
test('huge', function (t) {
|
|
|
|
t.plan(1)
|
|
|
|
|
|
|
|
var extract = tar.extract()
|
|
|
|
var noEntries = false
|
2018-04-26 14:57:03 +00:00
|
|
|
var hugeFileSize = 8804630528 // ~8.2GB
|
2018-03-21 19:32:29 +00:00
|
|
|
var dataLength = 0
|
|
|
|
|
|
|
|
var countStream = new stream.Writable()
|
|
|
|
countStream._write = function (chunk, encoding, done) {
|
|
|
|
dataLength += chunk.length
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make sure we read the correct pax size entry for a file larger than 8GB.
|
|
|
|
extract.on('entry', function (header, stream, callback) {
|
|
|
|
t.deepEqual(header, {
|
|
|
|
devmajor: 0,
|
|
|
|
devminor: 0,
|
|
|
|
gid: 20,
|
|
|
|
gname: 'staff',
|
|
|
|
linkname: null,
|
|
|
|
mode: 420,
|
|
|
|
mtime: new Date(1521214967000),
|
|
|
|
name: 'huge.txt',
|
|
|
|
pax: {
|
|
|
|
'LIBARCHIVE.creationtime': '1521214954',
|
|
|
|
'SCHILY.dev': '16777218',
|
|
|
|
'SCHILY.ino': '91584182',
|
|
|
|
'SCHILY.nlink': '1',
|
|
|
|
atime: '1521214969',
|
|
|
|
ctime: '1521214967',
|
|
|
|
size: hugeFileSize.toString()
|
|
|
|
},
|
|
|
|
size: hugeFileSize,
|
|
|
|
type: 'file',
|
|
|
|
uid: 502,
|
|
|
|
uname: 'apd4n'
|
|
|
|
})
|
|
|
|
|
|
|
|
noEntries = true
|
|
|
|
stream.pipe(countStream)
|
|
|
|
})
|
|
|
|
|
|
|
|
extract.on('finish', function () {
|
|
|
|
t.ok(noEntries)
|
|
|
|
t.equal(dataLength, hugeFileSize)
|
|
|
|
})
|
|
|
|
|
|
|
|
var gunzip = zlib.createGunzip()
|
|
|
|
var reader = fs.createReadStream(fixtures.HUGE)
|
|
|
|
reader.pipe(gunzip).pipe(extract)
|
|
|
|
})
|