CoolFace
Apppublic

strong-tie/inbound-calls

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
reopen.test.js240 linesDownload Raw Back to test
1'use strict'2 3const fs = require('fs')4const proxyquire = require('proxyquire')5const SonicBoom = require('../')6const { file, runTests } = require('./helper')7 8runTests(buildTests)9 10function buildTests (test, sync) {11  // Reset the umask for testing12  process.umask(0o000)13 14  test('reopen', (t) => {15    t.plan(9)16 17    const dest = file()18    const stream = new SonicBoom({ dest, sync })19 20    t.ok(stream.write('hello world\n'))21    t.ok(stream.write('something else\n'))22 23    const after = dest + '-moved'24 25    stream.once('drain', () => {26      t.pass('drain emitted')27 28      fs.renameSync(dest, after)29      stream.reopen()30 31      stream.once('ready', () => {32        t.pass('ready emitted')33        t.ok(stream.write('after reopen\n'))34 35        stream.once('drain', () => {36          fs.readFile(after, 'utf8', (err, data) => {37            t.error(err)38            t.equal(data, 'hello world\nsomething else\n')39            fs.readFile(dest, 'utf8', (err, data) => {40              t.error(err)41              t.equal(data, 'after reopen\n')42              stream.end()43            })44          })45        })46      })47    })48  })49 50  test('reopen with buffer', (t) => {51    t.plan(9)52 53    const dest = file()54    const stream = new SonicBoom({ dest, minLength: 4096, sync })55 56    t.ok(stream.write('hello world\n'))57    t.ok(stream.write('something else\n'))58 59    const after = dest + '-moved'60 61    stream.once('ready', () => {62      t.pass('drain emitted')63 64      stream.flush()65      fs.renameSync(dest, after)66      stream.reopen()67 68      stream.once('ready', () => {69        t.pass('ready emitted')70        t.ok(stream.write('after reopen\n'))71        stream.flush()72 73        stream.once('drain', () => {74          fs.readFile(after, 'utf8', (err, data) => {75            t.error(err)76            t.equal(data, 'hello world\nsomething else\n')77            fs.readFile(dest, 'utf8', (err, data) => {78              t.error(err)79              t.equal(data, 'after reopen\n')80              stream.end()81            })82          })83        })84      })85    })86  })87 88  test('reopen if not open', (t) => {89    t.plan(3)90 91    const dest = file()92    const stream = new SonicBoom({ dest, sync })93 94    t.ok(stream.write('hello world\n'))95    t.ok(stream.write('something else\n'))96 97    stream.reopen()98 99    stream.end()100    stream.on('close', function () {101      t.pass('ended')102    })103  })104 105  test('reopen with file', (t) => {106    t.plan(10)107 108    const dest = file()109    const stream = new SonicBoom({ dest, minLength: 0, sync })110 111    t.ok(stream.write('hello world\n'))112    t.ok(stream.write('something else\n'))113 114    const after = dest + '-new'115 116    stream.once('drain', () => {117      t.pass('drain emitted')118 119      stream.reopen(after)120      t.equal(stream.file, after)121 122      stream.once('ready', () => {123        t.pass('ready emitted')124        t.ok(stream.write('after reopen\n'))125 126        stream.once('drain', () => {127          fs.readFile(dest, 'utf8', (err, data) => {128            t.error(err)129            t.equal(data, 'hello world\nsomething else\n')130            fs.readFile(after, 'utf8', (err, data) => {131              t.error(err)132              t.equal(data, 'after reopen\n')133              stream.end()134            })135          })136        })137      })138    })139  })140 141  test('reopen throws an error', (t) => {142    t.plan(sync ? 10 : 9)143 144    const fakeFs = Object.create(fs)145    const SonicBoom = proxyquire('../', {146      fs: fakeFs147    })148 149    const dest = file()150    const stream = new SonicBoom({ dest, sync })151 152    t.ok(stream.write('hello world\n'))153    t.ok(stream.write('something else\n'))154 155    const after = dest + '-moved'156 157    stream.on('error', () => {158      t.pass('error emitted')159    })160 161    stream.once('drain', () => {162      t.pass('drain emitted')163 164      fs.renameSync(dest, after)165      if (sync) {166        fakeFs.openSync = function (file, flags) {167          t.pass('fake fs.openSync called')168          throw new Error('open error')169        }170      } else {171        fakeFs.open = function (file, flags, mode, cb) {172          t.pass('fake fs.open called')173          setTimeout(() => cb(new Error('open error')), 0)174        }175      }176 177      if (sync) {178        try {179          stream.reopen()180        } catch (err) {181          t.pass('reopen throwed')182        }183      } else {184        stream.reopen()185      }186 187      setTimeout(() => {188        t.ok(stream.write('after reopen\n'))189 190        stream.end()191        stream.on('finish', () => {192          fs.readFile(after, 'utf8', (err, data) => {193            t.error(err)194            t.equal(data, 'hello world\nsomething else\nafter reopen\n')195          })196        })197        stream.on('close', () => {198          t.pass('close emitted')199        })200      }, 0)201    })202  })203 204  test('reopen emits drain', (t) => {205    t.plan(9)206 207    const dest = file()208    const stream = new SonicBoom({ dest, sync })209 210    t.ok(stream.write('hello world\n'))211    t.ok(stream.write('something else\n'))212 213    const after = dest + '-moved'214 215    stream.once('drain', () => {216      t.pass('drain emitted')217 218      fs.renameSync(dest, after)219      stream.reopen()220 221      stream.once('drain', () => {222        t.pass('drain emitted')223        t.ok(stream.write('after reopen\n'))224 225        stream.once('drain', () => {226          fs.readFile(after, 'utf8', (err, data) => {227            t.error(err)228            t.equal(data, 'hello world\nsomething else\n')229            fs.readFile(dest, 'utf8', (err, data) => {230              t.error(err)231              t.equal(data, 'after reopen\n')232              stream.end()233            })234          })235        })236      })237    })238  })239}240