var test = require('tape') var tar = require('../index') var fixtures = require('./fixtures') var concat = require('concat-stream') var fs = require('fs') test('one-file', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'test.txt', mtime: new Date(1387580181000), mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20 }, 'hello world\n') pack.finalize() pack.pipe(concat(function (data) { t.same(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.ONE_FILE_TAR)) })) }) test('multi-file', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'file-1.txt', mtime: new Date(1387580181000), mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20 }, 'i am file-1\n') pack.entry({ name: 'file-2.txt', mtime: new Date(1387580181000), mode: parseInt('644', 8), size: 12, uname: 'maf', gname: 'staff', uid: 501, gid: 20 }).end('i am file-2\n') pack.finalize() pack.pipe(concat(function (data) { t.same(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.MULTI_FILE_TAR)) })) }) test('pax', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'pax.txt', mtime: new Date(1387580181000), mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20, pax: {special: 'sauce'} }, 'hello world\n') pack.finalize() pack.pipe(concat(function (data) { // fs.writeFileSync('tmp.tar', data) t.same(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.PAX_TAR)) })) }) test('types', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'directory', mtime: new Date(1387580181000), type: 'directory', mode: parseInt('755', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20 }) pack.entry({ name: 'directory-link', mtime: new Date(1387580181000), type: 'symlink', linkname: 'directory', mode: parseInt('755', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20, size: 9 // Should convert to zero }) pack.finalize() pack.pipe(concat(function (data) { t.equal(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.TYPES_TAR)) })) }) test('long-name', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'my/file/is/longer/than/100/characters/and/should/use/the/prefix/header/foobarbaz/foobarbaz/foobarbaz/foobarbaz/foobarbaz/foobarbaz/filename.txt', mtime: new Date(1387580181000), type: 'file', mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20 }, 'hello long name\n') pack.finalize() pack.pipe(concat(function (data) { t.equal(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.LONG_NAME_TAR)) })) }) test('large-uid-gid', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'test.txt', mtime: new Date(1387580181000), mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 1000000001, gid: 1000000002 }, 'hello world\n') pack.finalize() pack.pipe(concat(function (data) { t.same(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.LARGE_UID_GID)) fs.writeFileSync('/tmp/foo', data) })) }) test('unicode', function (t) { t.plan(2) var pack = tar.pack() pack.entry({ name: 'høstål.txt', mtime: new Date(1387580181000), type: 'file', mode: parseInt('644', 8), uname: 'maf', gname: 'staff', uid: 501, gid: 20 }, 'høllø\n') pack.finalize() pack.pipe(concat(function (data) { t.equal(data.length & 511, 0) t.deepEqual(data, fs.readFileSync(fixtures.UNICODE_TAR)) })) })