| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | // Set the umask, so that it works the same everywhere.process.umask(parseInt('22', 8))var tap = require("tap")  , tar = require("../tar.js")  , fs = require("fs")  , gfs = require("graceful-fs")  , path = require("path")  , file = path.resolve(__dirname, "fixtures/dir.tar")  , target = path.resolve(__dirname, "tmp/extract-test")  , index = 0  , fstream = require("fstream")  , rimraf = require("rimraf")  , mkdirp = require("mkdirp")  , ee = 0  , expectEntries = [      {        "path" : "dir/",        "mode" : "750",        "type" : "5",        "depth" : undefined,        "size" : 0,        "linkpath" : "",        "nlink" : undefined,        "dev" : undefined,        "ino" : undefined      },      {        "path" : "dir/sub/",        "mode" : "750",        "type" : "5",        "depth" : undefined,        "size" : 0,        "linkpath" : "",        "nlink" : undefined,        "dev" : undefined,        "ino" : undefined      } ]function slow (fs, method, t1, t2) {  var orig = fs[method]  if (!orig) return null  fs[method] = function () {    var args = [].slice.call(arguments)    console.error("slow", method, args[0])    var cb = args.pop()    setTimeout(function () {      orig.apply(fs, args.concat(function(er, data) {        setTimeout(function() {          cb(er, data)        }, t2)      }))    }, t1)  }}// Make sure we get the graceful-fs that fstream is using.var gfs2try {  gfs2 = require("fstream/node_modules/graceful-fs")} catch (er) {}var slowMethods = ["chown", "chmod", "utimes", "lutimes"]slowMethods.forEach(function (method) {  var t1 = 500  var t2 = 0  slow(fs, method, t1, t2)  slow(gfs, method, t1, t2)  if (gfs2) {    slow(gfs2, method, t1, t2)  }})// The extract class basically just pipes the input// to a Reader, and then to a fstream.DirWriter// So, this is as much a test of fstream.Reader and fstream.Writer// as it is of tar.Extract, but it sort of makes sense.tap.test("preclean", function (t) {  rimraf.sync(target)  /mkdirp.sync(target)  t.pass("cleaned!")  t.end()})tap.test("extract test", function (t) {  var extract = tar.Extract(target)  var inp = fs.createReadStream(file)  // give it a weird buffer size to try to break in odd places  inp.bufferSize = 1234  inp.pipe(extract)  extract.on("end", function () {    rimraf.sync(target)    t.equal(ee, expectEntries.length, "should see "+ee+" entries")    // should get no more entries after end    extract.removeAllListeners("entry")    extract.on("entry", function (e) {      t.fail("Should not get entries after end!")    })    t.end()  })  extract.on("entry", function (entry) {    var found =      { path: entry.path      , mode: entry.props.mode.toString(8)      , type: entry.props.type      , depth: entry.props.depth      , size: entry.props.size      , linkpath: entry.props.linkpath      , nlink: entry.props.nlink      , dev: entry.props.dev      , ino: entry.props.ino      }    var wanted = expectEntries[ee ++]    t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path)  })})
 |