diff --git a/test/cert.pem b/test/cert.pem new file mode 100644 index 0000000..f1aac9d --- /dev/null +++ b/test/cert.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6DCCAdACCQD/lk51johyKjANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJ1 +czELMAkGA1UECAwCY2ExCzAJBgNVBAcMAmxhMQ0wCwYDVQQKDAR0ZXN0MB4XDTIx +MTIyMjA3NDk1NFoXDTQ5MDUwODA3NDk1NFowNjELMAkGA1UEBhMCdXMxCzAJBgNV +BAgMAmNhMQswCQYDVQQHDAJsYTENMAsGA1UECgwEdGVzdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMGOnd6gl6vTB6FayQeSgaB9VPJfG7ldBLFGev9x +h1DJSy+j10qKocYmZ8H0Gc3VgkEqvt1jJe96c27wsKjZQjGDuzQJIur1tWOpy50z +fw+dqz71ZAC0ToAenM1sQrwDy3ZgShjpv9PUm6o7sGLG+H4A2AAu4jLlCt4ilrU4 +zxGsLc68l+tEwdGmweFEOVjdMy5Q9v+WjleWB71G2zaQ3+EsczUeNHhi+mQXe5CE +elVhFodFJmSf9a4TBFFXSpfvtpbNt6Sp5yiYuxkZzzsdxEBfwdEXIuedPsVbf8Ui +xyM3KpRkTCh39mVJV9IzNpCvYkxwXBA2Vhf9SOf99SIFJ50CAwEAATANBgkqhkiG +9w0BAQUFAAOCAQEAOjvGvD9xEo9rwEfh7ShDCAqSJbvwLTKeIdarWYN7DeUH5MoH +V8QdoXu+bzOKzn2KFRTszKfgpYOvjaPcYl5F3pOlkwweM22Z4y2Jw1xS4nHouazk +3/JgaDjH0adqnfpUrYwCQOLf+X/oACdFQ9uOMk/fhxrmCwppRjh/ZReq1ulwSEsA +gZouTdmo5DL1ovO91pnpDoY29m3jhYzENyKCS8FgkvdIKHZf9nk2EXJayaJtXMKY +WLni24RT7dLqrATdmaaqfwp3hBNGePNeRTGI37x2hDmtkJaBOzch7Oq8pYiDrG5M +mbh2at3090tcnyZo6pbR7IQwviYBUvVUdKHfhg== +-----END CERTIFICATE----- diff --git a/test.js b/test/index.js similarity index 84% rename from test.js rename to test/index.js index e145d38..cf9b03f 100644 --- a/test.js +++ b/test/index.js @@ -1,9 +1,13 @@ +import fs from "node:fs"; import http from "node:http"; +import https from "node:https"; +import path from "node:path"; +import url from "node:url"; import { test } from "uvu"; import * as assert from "uvu/assert"; -import HttpRecorder from "./index.js"; +import HttpRecorder from "../index.js"; test.before.each(() => { HttpRecorder.disable(); @@ -197,6 +201,42 @@ test("request.end(callback)", () => { }); }); +test("https", () => { + return new Promise((resolve, reject) => { + const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); + const server = https.createServer( + { + key: fs.readFileSync(path.resolve(__dirname, "key.pem")), + cert: fs.readFileSync(path.resolve(__dirname, "cert.pem")), + }, + function (req, res) { + res.writeHead(200); + res.end("Hello, World!"); + } + ); + const { port } = server.listen().address(); + + HttpRecorder.enable(); + HttpRecorder.on("record", async ({ responseBody }) => { + try { + assert.equal(Buffer.concat(responseBody).toString(), "Hello, World!"); + server.close(); + resolve(); + } catch (error) { + reject(error); + } + }); + + const emitWarning = process.emitWarning; + process.emitWarning = () => {}; + process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; + const request = https.request(`https://localhost:${port}`, () => { + process.emitWarning = emitWarning; + }); + request.end(); + }); +}); + test("Calling .enable() multiple times is a no-op", () => { HttpRecorder.enable(); HttpRecorder.enable(); diff --git a/test/key.pem b/test/key.pem new file mode 100644 index 0000000..01acacc --- /dev/null +++ b/test/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAwY6d3qCXq9MHoVrJB5KBoH1U8l8buV0EsUZ6/3GHUMlLL6PX +SoqhxiZnwfQZzdWCQSq+3WMl73pzbvCwqNlCMYO7NAki6vW1Y6nLnTN/D52rPvVk +ALROgB6czWxCvAPLdmBKGOm/09SbqjuwYsb4fgDYAC7iMuUK3iKWtTjPEawtzryX +60TB0abB4UQ5WN0zLlD2/5aOV5YHvUbbNpDf4SxzNR40eGL6ZBd7kIR6VWEWh0Um +ZJ/1rhMEUVdKl++2ls23pKnnKJi7GRnPOx3EQF/B0Rci550+xVt/xSLHIzcqlGRM +KHf2ZUlX0jM2kK9iTHBcEDZWF/1I5/31IgUnnQIDAQABAoIBAQCFjMTKzl24VcRH +Bd/9VI4SUUfib9MuQ8swEiRdylSGXk19UnwC18KleOxQe/+t8SqNklPdZ0LOiNvK +6VHLPxSYG394ePFZ0y1T1d1C2zxJZw24RBK7Fa2wYu7oIlGtbqTdSbT2mZodK+44 +ODUNAqKENkrTXYX/fd/Qw2bfJZJiawkqVZx35liMYpuOE4QFFiFMBzfYy0GpOCCv +Zo/xVcpuaT2i+tliz/aM0Osr7w1O/8anQNmVBI3BgSeknpog+ICw0rUH7dqIda0r +lOvuxmhlXfYkQj0AOBBjJTYJqPCJKFo4JEK3ih0jiaZ4TvfuxFemnrmxM7y58dkJ +eONobsGVAoGBAPSHZtSBYVQ0hCMJo0Pj30mG5DqGK61mGgaHWUpQMek4ABQGOKGC +brAn/K3G6AILU4xnTTnUN5HPJOwHfzfSsSjmsxIfOU3QwjtXMqCk1vuUV2iGY52H +AVXuJWSB2KRMFE/j4kdEK1jQszbjC5qiDYIpFl0K223mVG29Oyxd2U47AoGBAMqj +FXrfPNXLletrWYA5aq/+DTaT85vVKXOfj70dkgwNy0vtf/qzdbqOlQJxyR6VyLvP +ALkEs8LCmepmIG6q8C4Jq3s7rc6HlCleoBWA25RvpZKT3zPRTC1wGovLQg/aCQ8f +OscTqEZAJ4pAlbzcKGdNf4GlNju3rVtji2T3Z8wHAoGAXA0owbCe0hMe9w2mv2Tl +5oj4G6vsf08jVvfWvinoUBI7vU4GPY6bWocDEOwC5NocrosowC9KaAJhtNSxqHMR +LAOEv7qvWMLQi4Qs09qZ74UNTpTgpSlwcEfBHc/fnSHit5xiz08zPjD6dhwMfz6n +9SrAd3Ah4IJHoDQPNYlyx4cCgYBHmap8WScQ0DfwEGV2llMpTpZyo4KfnIliDo5m +n208jx83e/sNpZ3CxqDGVVhgU0Kzgehad9vgxIxIM7/f+syVJ9uM1sCKSoPCvmnI +T1jHMVAK4+8pSxoksAjhPnfgTAWJb1qAf2SlNgQCqOF/8zbfkZWtRKhOH4/Ey/60 +NWtavwKBgQCoOt5ftns8JcE7g+ZwRBG6K/2EgiSI8f1v0iG5FY/w5UNGD+fL39wA +X7J7FI3FSLmGRjKm08rR/d81XQkW0KZUPNgp3jqmO2dr1QFveRLE8Kscxxpw4P4X +MBXgfZDaOMOujRsVJZnauqsX9ACY1F7/+FamXpL1JKTbyUV4/lAy0Q== +-----END RSA PRIVATE KEY-----