diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9ba9626..62ebbbf1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,21 +6,35 @@ on: schedule: - cron: '0 0 * * 0' +permissions: + contents: read + jobs: test-node: runs-on: ubuntu-latest + timeout-minutes: 10 strategy: matrix: - node-version: [14, 16] + node-version: + - 10 + - 18 steps: - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm test - env: - CI: true + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + + - name: Run tests with µWebSockets.js + run: npm run test:uws + if: ${{ matrix.node-version == '18' }} diff --git a/package-lock.json b/package-lock.json index 79099ff1..65353c7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ }, "devDependencies": { "babel-eslint": "^8.0.2", - "eiows": "^3.8.0", + "eiows": "^4.1.2", "engine.io-client": "6.2.0", "engine.io-client-v3": "npm:engine.io-client@3.5.2", "expect.js": "^0.3.1", @@ -31,7 +31,7 @@ "rimraf": "^3.0.2", "superagent": "^3.8.1", "typescript": "^4.4.3", - "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.0.0" + "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.15.0" }, "engines": { "node": ">=10.0.0" @@ -542,13 +542,13 @@ } }, "node_modules/eiows": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eiows/-/eiows-3.8.0.tgz", - "integrity": "sha512-ElPW+EakV8NSsA5QWJCWEx88LO/xyqMFilvsZ4P9+uyVS4ikbq2zndnYC++XLKysC+c922bGkAKeNrqWNmwNyg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eiows/-/eiows-4.1.2.tgz", + "integrity": "sha512-dNu+yOdp/mPROgEIW9pFnx+iBLob130BPqspXxSt63OvICtitrpYQSmdJ2M7irIwqh3oj1JfDKadHPCocKPBpg==", "dev": true, "hasInstallScript": true, "engines": { - "node": ">=8.12.0 <18.0" + "node": ">=14.13.0 <19.0" } }, "node_modules/emoji-regex": { @@ -1751,8 +1751,8 @@ "dev": true }, "node_modules/uWebSockets.js": { - "version": "20.0.0", - "resolved": "git+https://git@github.com/uNetworking/uWebSockets.js.git#4558ee00f9f1f686fffe1accbfc2e85b1af9c50f", + "version": "20.15.0", + "resolved": "git+https://git@github.com/uNetworking/uWebSockets.js.git#77bc1fd5577ae42b56675912eb8481a31f3fefd2", "dev": true }, "node_modules/vary": { @@ -2363,9 +2363,9 @@ "dev": true }, "eiows": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eiows/-/eiows-3.8.0.tgz", - "integrity": "sha512-ElPW+EakV8NSsA5QWJCWEx88LO/xyqMFilvsZ4P9+uyVS4ikbq2zndnYC++XLKysC+c922bGkAKeNrqWNmwNyg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eiows/-/eiows-4.1.2.tgz", + "integrity": "sha512-dNu+yOdp/mPROgEIW9pFnx+iBLob130BPqspXxSt63OvICtitrpYQSmdJ2M7irIwqh3oj1JfDKadHPCocKPBpg==", "dev": true }, "emoji-regex": { @@ -3258,9 +3258,9 @@ "dev": true }, "uWebSockets.js": { - "version": "git+https://git@github.com/uNetworking/uWebSockets.js.git#4558ee00f9f1f686fffe1accbfc2e85b1af9c50f", + "version": "git+https://git@github.com/uNetworking/uWebSockets.js.git#77bc1fd5577ae42b56675912eb8481a31f3fefd2", "dev": true, - "from": "uWebSockets.js@github:uNetworking/uWebSockets.js#v20.0.0" + "from": "uWebSockets.js@github:uNetworking/uWebSockets.js#v20.15.0" }, "vary": { "version": "1.1.2", diff --git a/package.json b/package.json index 99d537f2..e03057fd 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "devDependencies": { "babel-eslint": "^8.0.2", - "eiows": "^3.8.0", + "eiows": "^4.1.2", "engine.io-client": "6.2.0", "engine.io-client-v3": "npm:engine.io-client@3.5.2", "expect.js": "^0.3.1", @@ -53,17 +53,17 @@ "rimraf": "^3.0.2", "superagent": "^3.8.1", "typescript": "^4.4.3", - "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.0.0" + "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.15.0" }, "scripts": { "compile": "rimraf ./build && tsc", - "test": "npm run compile && npm run format:check && npm run test:default && npm run test:compat-v3 && npm run test:eiows && npm run test:uws", + "test": "npm run compile && npm run format:check && npm run test:default && npm run test:compat-v3", "test:default": "mocha --bail --exit", "test:compat-v3": "EIO_CLIENT=3 mocha --exit", "test:eiows": "EIO_WS_ENGINE=eiows mocha --exit", "test:uws": "EIO_WS_ENGINE=uws mocha --exit", "format:check": "prettier --check \"lib/**/*.ts\" \"test/**/*.js\"", - "format:fix": "prettier --write \"lib/**/*.ts' 'test/**/*.js\"", + "format:fix": "prettier --write \"lib/**/*.ts\" \"test/**/*.js\"", "prepack": "npm run compile" }, "repository": { diff --git a/test/common.js b/test/common.js index c02d6a42..bb3cebdb 100644 --- a/test/common.js +++ b/test/common.js @@ -1,5 +1,4 @@ const { listen, uServer } = require(".."); -const { App, us_socket_local_port } = require("uWebSockets.js"); const { Socket } = process.env.EIO_CLIENT === "3" ? require("engine.io-client-v3") @@ -18,6 +17,7 @@ exports.listen = (opts, fn) => { opts.allowEIO3 = true; if (process.env.EIO_WS_ENGINE === "uws") { + const { App, us_socket_local_port } = require("uWebSockets.js"); const engine = new uServer(opts); const app = App(); engine.attach(app, opts); diff --git a/test/fixtures/client.crt b/test/fixtures/client.crt index 7264aa0d..2957b4ab 100644 --- a/test/fixtures/client.crt +++ b/test/fixtures/client.crt @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIDojCCAYoCAQIwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNV -BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 -ZDAeFw0xNTExMTgxNzM4MDVaFw0yNTExMTUxNzM4MDVaMG0xCzAJBgNVBAYTAkZJ -MRMwEQYDVQQIEwpTb21lLVN0YXRlMREwDwYDVQQHEwhIZWxzaW5raTEhMB8GA1UE -ChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQDEwpGb28gQ2xpZW50 -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD66Rn8P8O+MK13sPxIIEMHXDRZ -heRLqGNlNsXzaBLWnKSlV+Wxi1OdCimtAh4ZAVRt1JkK9mQEAGdxC8TRwDMS02+E -UK1H1zvh77Ek4ZcHW8p5CVEm53FTmO+jhL+7BQYXW1yi/XURBv2xm3Q95I7895ag -prMFI8HiOu/Hdi/iDQIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQBynfI9C5/zcukL -oQmUSEg5ys99bGUa8QyhSRbp5nb8Wl76KRIxpqGxl+3wcyhES3cH1Vgv4CMvrVag -Qov4TG4B30MvEvd17BMD1BmDNqjOInW72ujS9wo+2K6NASw1r/96Ay7dJ7+3HE0r -gs9yaiRL5UG4y7Sp1gy5JynXNozNowVP/cy84L9K2oyiJpyc5Owg93i3E7X+/eXd -JfFTO6ZfTGNdN+hMjleyj/LXOsoeaYg3GhO9i99nzf3u0HBXI1wRbkRPJ0aNSkH0 -VEValjOGeRdKvlZhsf7x8Kg7Nk7fyIyhmYU/tBOSUasFiB7CfKN/m0P1e6DMqihW -U/k4bzoVND3KuNH5EZmfSs3BE/w5fakObCpkxAMMm6Lxtb6qBV2HlWFfatcL2WoM -nqdCEPjct7crPbgtn3Pa/erlvmAWFoqsCu4Xn4SRGP1JtGXbCLaAW4S5CffaODRp -4urgxD8bfk9Mm/9b/xAAMNkcAi4oBikVTnVWrpul/qIhY0iMfqIu6MkbWAthMT4h -th5AggLxl6+dcPGNaliC5JpRtCis+fWuKxwbf8YKSEIwi0VBQbPP2ATinqfOJ1Yo -/tymAa3IKukil6RuTECTpE06x+Ns0rMJTSN2SGd4AG/n1/SAjhBHoH1J0J4JG30f -5fx0ax5MzGuTrt9yNEUvIrKj6MIgmw== +MIIDtTCCAZ0CFCt+tjtA9647yZp8eNZurQtNp4x+MA0GCSqGSIb3DQEBDQUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjIxMTE4MjEyMzU4WhcNMzIxMTE1MjEy +MzU4WjBtMQswCQYDVQQGEwJGSTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UE +BxMISGVsc2lua2kxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDET +MBEGA1UEAxMKRm9vIENsaWVudDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA ++ukZ/D/DvjCtd7D8SCBDB1w0WYXkS6hjZTbF82gS1pykpVflsYtTnQoprQIeGQFU +bdSZCvZkBABncQvE0cAzEtNvhFCtR9c74e+xJOGXB1vKeQlRJudxU5jvo4S/uwUG +F1tcov11EQb9sZt0PeSO/PeWoKazBSPB4jrvx3Yv4g0CAwEAATANBgkqhkiG9w0B +AQ0FAAOCAgEAMgC3j2XJ5IPB1raLrnJh8vTncnqMe6OmXpaxk0ZYb42Y66BJKlaE +UpLmLYIiICmuH6R4lc00W5nexPyCT4g+1CUs3PhOJGEwWOBodv6dFJ4ayGWln1aD +QX+W+PRuJAazd7wruVnPxVoEspVO+hcr5byX0F3Auqd9jdQZwFXsWvAo7tZxUnvC +gdjnHt5QgMxqeqzZPTw7dreMsIjN6NrUPWaa26VCvLH0Nv+Jgs+RSVwBKp8tO3e+ +763bi8Htpzt4YfAB7EuRykGlAI42C5ZDzcsq30NpSGgOwveHnlvdl6KhC0QaK71h +QmXwBmEUNX1f+XRnvk+fNb1acfddLLYoPP0zS1BEYOOs7KkyScagsUMsnUSOfv3d ++etklFvaXFD3+b/KwljH3WH1dG4ro3J6GHXX05ncDydDDksYi6aC3wpPZYY7eMFx +RWSxMZHX/bD1YH80a2+jBoskTqz3ZFkkGySMfUcpDCUwQuiwjhLp4sew9RDRB/lv +kJezNSoYgnT44CT+IPoPEL1m5Evkm3C7fVzvnldO3TsWmOoza99xrQ+9gtzlWxgb +Av6jNbnGG1HgDYcvxpRMKWe+6fUAHCcP0PuO+2rcygemNtEKzfMY6Py66w5L9/WW +t0UJWU1rR+kLDS3qLfQqvnbvUMroZ9zxE9CJq6+aKEQEpc79lfiv464= -----END CERTIFICATE----- diff --git a/test/fixtures/client.pfx b/test/fixtures/client.pfx index 11e66334..381a0a4f 100644 Binary files a/test/fixtures/client.pfx and b/test/fixtures/client.pfx differ diff --git a/test/fixtures/server.crt b/test/fixtures/server.crt index 0b49d96e..acc6c646 100644 --- a/test/fixtures/server.crt +++ b/test/fixtures/server.crt @@ -1,22 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIDoTCCAYkCAQEwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNV -BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 -ZDAeFw0xNTExMTgxNzM4MDhaFw0yNTExMTUxNzM4MDhaMGwxCzAJBgNVBAYTAkZJ -MRMwEQYDVQQIEwpTb21lLVN0YXRlMREwDwYDVQQHEwhIZWxzaW5raTEhMB8GA1UE -ChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRIwEAYDVQQDEwlsb2NhbGhvc3Qw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBAs08Mguowi6W8+BrqiByLr3Fh -pKnnRTtO/wfDDebgP3Da5vIapHt0NbbSIYkju1M1y/9S0uqCScSIIFeSr8wOvmB1 -c0jRX+P6oA6p8lJXG/HEfEuu3uK+Olkds7sHcrtuRaYLEAXNYCUTlT0VdfVvxV96 -0m/5wMRpexjC5h+jAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBACvxt9oSl8zDz2i9 -DFtBVA87TYkv7MPqc6HKzpzKjUpay1CmTrXxaw9WKXGC47aoj/wXNqe1W/w5KUdH -79Z7n/TKpQJ9hj3NQJerFGD5EGu+rL4/FshMiwjp0/AiuAIThVa11BDzmEltwf86 -mHfIhRG89m3LmJbCzOLTjqjnt3vL5fcW0KEN+5TDFxINbXC6o+ioZgMeh3n+d01D -MZImN01A0ZwKch81IDmPZD/IrtCLGwG/YfTaQUshMHUaQIKqDIyzDb/VgWGh1vET -J6Zpbvr3xc+mg34588qd6JcyND6X1LKBvLUNqcIrcAaChbabyPUCy1w+XDgcATZg -uerXcELSApivaSVGZVNkrbUskDySjZp2NhpEhDFim3HZye7CUvVIM5AI8BPeI5ZA -nYi2kcya3e9/u3YxfsCklbxCiBUMhVYT3EVHNILr0Eik4NJp92xBLyRk770WvwMc -MAiRNK5+XM0DffzHe9PrcopWRwvPsh8ce9IUsTJQjx0zALc8JKT6VN8J1cNseZR5 -ALuTasgFliRFYCwUJcwCpoXUDJas7hbBDcbecMbFKDCrmUbG6moRqETtljDtn4na -cKwaAk2sp9CSaNoLAsWd45ElXpeoKtNz7dFsRf1nSu2GPdE2SdaPJ6br+bKcO6TW -LRObFtVqZM7TTrPUuVji72CfFMtl +MIIDtDCCAZwCFCt+tjtA9647yZp8eNZurQtNp4x/MA0GCSqGSIb3DQEBDQUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjIxMTE4MjEyNDExWhcNMzIxMTE1MjEy +NDExWjBsMQswCQYDVQQGEwJGSTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UE +BxMISGVsc2lua2kxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDES +MBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA +QLNPDILqMIulvPga6ogci69xYaSp50U7Tv8Hww3m4D9w2ubyGqR7dDW20iGJI7tT +Ncv/UtLqgknEiCBXkq/MDr5gdXNI0V/j+qAOqfJSVxvxxHxLrt7ivjpZHbO7B3K7 +bkWmCxAFzWAlE5U9FXX1b8VfetJv+cDEaXsYwuYfowIDAQABMA0GCSqGSIb3DQEB +DQUAA4ICAQCDSuFPJ++HY5WBhpnumbZ7+T0ReWKaerdNnQ2Xgrna5mZfB2xeRkvY +XeJ9VBCpGgEZKCKkhZCjomn/kLkYzRk4Sqr1ivN5NWl6G/9UTttHdRa3xiR1NhKI +AMYghpel30w5e+cWtsdR06P2FvZMuiMFCyqsbPf1xcEIAXN7HJDswq6g0ppTVZ4L +sXljG/J0vp+jAst4XKGLaGqnt8JaBnpNX9NO2Up3h5j7Pa4Nhm/LZ3Ku5ZVDmS1d +B98Bsgr6tQSSyPNfZW0tGXELsNX1I+wUFw9IXFadRTHkhjeT/GhFw3i12uY7rqzm +uJegTtWDkp1QOajhYhLD9WGXb9teldkAAgZawD6ax/uAzqx/4mBFvsUa3FMcua8k +HF9P2lLzKAcyaKt1cvlfUYmDVZ2Gh+9PgM8SqRpMIqK5jMRvFgemxJXS9BMBrQLp +TCvgRwQZD4mUloRlGNewKfJ0oQ1rY29vwdjTL8+BBS/GR8EuzYnqJG/D2nK0guIN +ze+cSDghA5N2pp/ffnpLWmkIDO+fsGAj3eApLhbPQ1xCXnEv6fOjgUmnxdt41m8d ++pEVBICohnvYgoEERDNAi1onJlBd/eyk0Jn37QiwqhQyrmfgwncvlt2SyzS1IZ7s +cEYreG6QHghBhgYiYo0FMuDCjT6g6Ga+T8nOp0xpZtGEWvHwjLjxvQ== -----END CERTIFICATE----- diff --git a/test/server.js b/test/server.js index 5de0e259..74ad2a17 100644 --- a/test/server.js +++ b/test/server.js @@ -3646,7 +3646,8 @@ describe("server", () => { } }); - it("should allow loading of other websocket server implementation like eiows", done => { + // FIXME eiows fails to build on Node.js 18 (and has dropped support for Node.js 10) + it.skip("should allow loading of other websocket server implementation like eiows", done => { const engine = listen( { allowUpgrades: false, wsEngine: require("eiows").Server }, port => { @@ -3667,19 +3668,20 @@ describe("server", () => { }); describe("remoteAddress", () => { + const POSSIBLE_VALUES = [ + "0000:0000:0000:0000:0000:0000:0000:0001", + "0000:0000:0000:0000:0000:ffff:7f00:0001", + "::ffff:127.0.0.1", + "::1" + ]; + it("should be defined (polling)", done => { const engine = listen({ transports: ["polling"] }, port => { new ClientSocket(`ws://localhost:${port}`, { transports: ["polling"] }); engine.on("connection", socket => { - if (process.env.EIO_WS_ENGINE === "uws") { - expect(socket.remoteAddress).to.be( - "0000:0000:0000:0000:0000:ffff:7f00:0001" - ); - } else { - expect(socket.remoteAddress).to.be("::ffff:127.0.0.1"); - } + expect(POSSIBLE_VALUES).to.contain(socket.remoteAddress); done(); }); }); @@ -3691,13 +3693,7 @@ describe("server", () => { transports: ["websocket"] }); engine.on("connection", socket => { - if (process.env.EIO_WS_ENGINE === "uws") { - expect(socket.remoteAddress).to.be( - "0000:0000:0000:0000:0000:ffff:7f00:0001" - ); - } else { - expect(socket.remoteAddress).to.be("::ffff:127.0.0.1"); - } + expect(POSSIBLE_VALUES).to.contain(socket.remoteAddress); done(); }); });