'use strict'

const t = require('tap')
const { join } = require('path')
const { file } = require('./helper')
const { stat } = require('fs')
const ThreadStream = require('..')

t.setTimeout(30000)

const dest = file()
const stream = new ThreadStream({
  filename: join(__dirname, 'to-file.js'),
  workerData: { dest },
  sync: false
})

let length = 0

stream.on('ready', () => {
  t.pass('ready emitted')

  const buf = Buffer.alloc(1024).fill('x').toString() // 1 KB

  // This writes 1 GB of data
  for (let i = 0; i < 1024 * 1024; i++) {
    length += buf.length
    stream.write(buf)
  }

  stream.end()
})

stream.on('close', () => {
  stat(dest, (err, f) => {
    t.error(err)
    t.equal(f.size, length)
    t.end()
  })
})
