1+ const fs = require ( 'fs' ) ;
2+ const os = require ( 'os' ) ;
3+ const path = require ( 'path' ) ;
4+ const uuid = require ( 'uuid' ) ;
5+ const { pipeline : pump } = require ( 'stream' ) ;
6+ const compressing = require ( '../..' ) ;
7+ const assert = require ( 'assert' ) ;
8+
9+ describe ( 'test/xz/file_stream.test.js' , ( ) => {
10+ it ( 'should be a transform stream' , done => {
11+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
12+ const sourceStream = fs . createReadStream ( sourceFile ) ;
13+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
14+ // console.log('destFile', destFile);
15+ const xzStream = new compressing . xz . FileStream ( ) ;
16+ const destStream = fs . createWriteStream ( destFile ) ;
17+ pump ( sourceStream , xzStream , destStream , err => {
18+ assert ( ! err ) ;
19+ assert ( fs . existsSync ( destFile ) ) ;
20+ done ( ) ;
21+ } ) ;
22+ } ) ;
23+
24+ it ( 'should compress according to file path' , done => {
25+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
26+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
27+ // console.log('destFile', destFile);
28+ const xzStream = new compressing . xz . FileStream ( { source : sourceFile } ) ;
29+ const destStream = fs . createWriteStream ( destFile ) ;
30+ pump ( xzStream , destStream , err => {
31+ assert ( ! err ) ;
32+ assert ( fs . existsSync ( destFile ) ) ;
33+ done ( ) ;
34+ } ) ;
35+ } ) ;
36+
37+ it ( 'should compress file into Buffer' , async ( ) => {
38+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
39+ const xzStream = new compressing . xz . FileStream ( { source : sourceFile } ) ;
40+ const xzChunks = [ ] ;
41+ for await ( const chunk of xzStream ) {
42+ xzChunks . push ( chunk ) ;
43+ }
44+
45+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
46+ await fs . promises . writeFile ( destFile , Buffer . concat ( xzChunks ) ) ;
47+ // console.log(destFile);
48+ } ) ;
49+
50+ it ( 'should compress buffer' , done => {
51+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
52+ const sourceBuffer = fs . readFileSync ( sourceFile ) ;
53+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
54+ // console.log('destFile', destFile);
55+ const destStream = fs . createWriteStream ( destFile ) ;
56+ const xzStream = new compressing . xz . FileStream ( { source : sourceBuffer } ) ;
57+ pump ( xzStream , destStream , err => {
58+ assert ( ! err ) ;
59+ assert ( fs . existsSync ( destFile ) ) ;
60+ done ( ) ;
61+ } ) ;
62+
63+ } ) ;
64+
65+ it ( 'should compress stream' , done => {
66+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
67+ const sourceStream = fs . createReadStream ( sourceFile ) ;
68+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
69+ // console.log('destFile', destFile);
70+ const destStream = fs . createWriteStream ( destFile ) ;
71+ const xzStream = new compressing . xz . FileStream ( { source : sourceStream } ) ;
72+ pump ( xzStream , destStream , err => {
73+ assert ( ! err ) ;
74+ assert ( fs . existsSync ( destFile ) ) ;
75+ done ( ) ;
76+ } ) ;
77+ } ) ;
78+
79+ it ( 'should compress with custom level' , done => {
80+ const sourceFile = path . join ( __dirname , '..' , 'fixtures' , 'xx.log' ) ;
81+ const destFile = path . join ( os . tmpdir ( ) , uuid . v4 ( ) + '.log.xz' ) ;
82+ const xzStream = new compressing . xz . FileStream ( {
83+ source : sourceFile ,
84+ level : 6
85+ } ) ;
86+ const destStream = fs . createWriteStream ( destFile ) ;
87+ pump ( xzStream , destStream , err => {
88+ assert ( ! err ) ;
89+ assert ( fs . existsSync ( destFile ) ) ;
90+ done ( ) ;
91+ } ) ;
92+ } ) ;
93+
94+ it ( 'should emit error if sourceFile does not exit' , done => {
95+ const sourceFile = 'file-not-exist' ;
96+ const xzStream = new compressing . xz . FileStream ( { source : sourceFile } ) ;
97+ xzStream . on ( 'error' , err => {
98+ assert ( err ) ;
99+ done ( ) ;
100+ } ) ;
101+ } ) ;
102+
103+ it ( 'should emit error if sourceStream emit error' , done => {
104+ const sourceFile = 'file-not-exist' ;
105+ const sourceStream = fs . createReadStream ( sourceFile ) ;
106+ const xzStream = new compressing . xz . FileStream ( { source : sourceStream } ) ;
107+ xzStream . on ( 'error' , err => {
108+ assert ( err && err . code === 'ENOENT' ) ;
109+ done ( ) ;
110+ } ) ;
111+ } ) ;
112+
113+ } ) ;
0 commit comments