forwardemail / forwardemail/supertest

[fix] write EPIPE error when attaching a file. (small repro)

Open
#830 5 comments 13 reactions 0 assignees View on GitHub
bug
Dominant language
JavaScript
Stars
14.4k
Forks
782
PR merge metrics
No merged PRs in 30d

Description

## Describe the bug

**Node.js version:** v20.11.0

**OS version:** macOS Sonoma 14.2.1

**Description:**
When trying to attach 2 cat images (7mb and 560kb) node throws "write EPIPE" error.
The list of facts:
1. The occurrence is intermittent
2. Only when the suit of tests is run altogether.
3. Running individual tests doesn't trigger anything.
4. Even ridiculously small files (8 bytes) fail because of this.
5. This scenario is also noticeable on v18 version of node.

A test snippet:
```javascript
it('should upload cat test 1', async () => {
const res = await request(app).post('/api')
.attach('file', 'cat1.png')
.attach('file2', 'cat2.png');

expect(res.statusCode).toEqual(200);
expect(res.body).toEqual({
message: 'pass!'
})
});
```

When I run ~14 of these in a single test suite the error occurs. (The test suit in the repro)
Also, for simplicity of this test suite I didn't use any multipart/form-data parser.

Perhaps, connected to #824 or #491.

We're unable to upgrade our repo with thousands of tests from v16 to v20 or even v18 because of this. Not sure how to proceed. Any advice will be highly appreciated!

## Actual behavior

Node throws write EPIPE error supposedly due to how **supertest** handles streaming of these files.
```javascript
Error: write EPIPE

at afterWriteDispatched (node:internal/stream_base_commons:160:15)
at writevGeneric (node:internal/stream_base_commons:143:3)
at Socket._writeGeneric (node:net:950:11)
at Socket._writev (node:net:959:8)
at doWrite (node:internal/streams/writable:588:12)
at clearBuffer (node:internal/streams/writable:765:5)
at Socket.Writable.uncork (node:internal/streams/writable:523:7)
at connectionCorkNT (node:_http_outgoing:955:8)
at processTicksAndRejections (node:internal/process/task_queues:81:21)
```

## Expected behavior

Should upload files without this error occurring.

## Code to reproduce

A small repo with a test to reproduce the issue:
https://github.com/eddienubes/supertest-write-epipe-bug-repro

## Checklist

- [x] I have searched through GitHub issues for similar issues.
- [x] I have completely read through the README and documentation.
- [x] I have tested my code with the latest version of Node.js and this package and confirmed it is still not working.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.