Skip to content

Commit

Permalink
Merge PR #1 from 'nodech/add-ci'
Browse files Browse the repository at this point in the history
  • Loading branch information
nodech committed Sep 19, 2023
2 parents 4ea7e1c + 514e4eb commit 6cad1fe
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 9 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build

on: [push, pull_request]

jobs:
lint:
name: Lint
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Setup
uses: actions/setup-node@v3
with:
node-version: 20.x

- name: Install tools
run: npm install --location=global bslint

- name: Install dependencies
run: npm install

- name: Lint
run: npm run lint

test:
name: Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
node: [16.x, 18.x, 20.x]

steps:
- uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}

- name: Install dependencies
run: npm install

- name: Test
run: npm test

4 changes: 3 additions & 1 deletion lib/btcp.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
'use strict';

module.exports = require('./tcp');
const TCP = require('./tcp');

module.exports = TCP;
1 change: 0 additions & 1 deletion lib/tcp-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class Socket extends EventEmitter {
/**
* Create a TCP server.
* @constructor
* @param {Function?} handler
*/

constructor() {
Expand Down
14 changes: 9 additions & 5 deletions lib/tcp.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
* https://github.com/bcoin-org/bcoin
*/

/* eslint prefer-arrow-callback: "off" */

'use strict';

const EventEmitter = require('events');
const net = require('net');

/**
* @callback SocketHandler
* @param {net.Socket} socket
* @returns {void}
*/

/**
* Server
* @extends EventEmitter
Expand All @@ -20,7 +24,7 @@ class Server extends EventEmitter {
/**
* Create a TCP server.
* @constructor
* @param {Function?} handler
* @param {SocketHandler} [handler]
*/

constructor(handler) {
Expand Down Expand Up @@ -186,8 +190,8 @@ exports.createConnection = net.connect;

/**
* Create a TCP server.
* @param {Function?} handler
* @returns {Object}
* @param {SocketHandler} [handler]
* @returns {Server}
*/

exports.createServer = function createServer(handler) {
Expand Down
32 changes: 32 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
"author": "Christopher Jeffrey <[email protected]>",
"main": "./lib/btcp.js",
"scripts": {
"lint": "eslint lib/ test/ || exit 0",
"lint": "eslint lib/ test/",
"test": "bmocha --reporter spec test/*-test.js"
},
"devDependencies": {
"bmocha": "^2.1.0"
"bmocha": "^2.1.8"
},
"engines": {
"node": ">=8.0.0"
Expand Down
81 changes: 81 additions & 0 deletions test/tcp-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
'use strict';

const assert = require('assert');
const tcp = require('../lib/btcp');

const PORT = 12000;

/**
* @param {tcp.Socket} socket
*/

function echoHandler(socket) {
socket.on('data', (...args) => {
socket.write(...args);
});
};

describe('TCP', function() {
let server;

beforeEach(async () => {
server = tcp.createServer(echoHandler);

server.listen(PORT);
await forEvent(server, 'listening');
});

afterEach(async () => {
await server.close();
});

it('should connect', async () => {
const client = tcp.connect(PORT);
await forEvent(client, 'connect');
client.destroy();
await forEvent(client, 'close');
});

it('should receive the same data', async () => {
const client = tcp.connect(PORT);
await forEvent(client, 'connect');

const data = Buffer.from('hello world');
client.write(data);
// Half close and wait for the server to echo back.
client.end();

let once = true;

for await (const chunk of client) {
assert(once);
assert.deepStrictEqual(chunk, data);
once = false;
}

client.destroy();
await forEvent(client, 'close');
});
});

/**
* @param {tcp.Server|tcp.Socket} ee
*/

function forEvent(ee, eventName, timeout = 1000) {
return new Promise((resolve, reject) => {
let timer = null;

const listener = () => {
clearTimeout(timer);
resolve();
};

ee.once(eventName, listener);

timer = setTimeout(() => {
ee.removeListener(eventName, listener);
reject('Timed out.');
}, timeout);
});
}

0 comments on commit 6cad1fe

Please sign in to comment.