diff --git a/packages/bun-types/globals.d.ts b/packages/bun-types/globals.d.ts index ab3685cfff..56fb8515d9 100644 --- a/packages/bun-types/globals.d.ts +++ b/packages/bun-types/globals.d.ts @@ -1564,6 +1564,12 @@ declare var AbortController: Bun.__internal.UseLibDomIfAvailable< } >; +interface AbortSignal extends EventTarget { + readonly aborted: boolean; + onabort: ((this: AbortSignal, ev: Event) => any) | null; + readonly reason: any; + throwIfAborted(): void; +} declare var AbortSignal: Bun.__internal.UseLibDomIfAvailable< "AbortSignal", { @@ -1948,3 +1954,21 @@ declare namespace fetch { ): void; } //#endregion + +interface RegExpConstructor { + /** + * Escapes any potential regex syntax characters in a string, and returns a + * new string that can be safely used as a literal pattern for the RegExp() + * constructor. + * + * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape) + * + * @example + * ```ts + * const re = new RegExp(RegExp.escape("foo.bar")); + * re.test("foo.bar"); // true + * re.test("foo!bar"); // false + * ``` + */ + escape(string: string): string; +} diff --git a/test/harness.ts b/test/harness.ts index 2183e7585d..01b5e79373 100644 --- a/test/harness.ts +++ b/test/harness.ts @@ -1301,11 +1301,15 @@ export const expiredTls = Object.freeze({ passphrase: "1234", }); -// ❯ openssl x509 -enddate -noout -in -// notAfter=Sep 5 23:27:34 2025 GMT +// openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ +// -keyout localhost.key \ +// -out localhost.crt \ +// -subj "/C=US/ST=CA/L=San Francisco/O=Oven/OU=Team Bun/CN=server-bun" \ +// -addext "subjectAltName = DNS:localhost,IP:127.0.0.1,IP:::1" +// notAfter=Sep 4 03:00:49 2035 GMT export const tls = Object.freeze({ - cert: "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIUHaenuNcUAu0tjDZGpc7fK4EX78gwDQYJKoZIhvcNAQEL\nBQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJh\nbmNpc2NvMQ0wCwYDVQQKDARPdmVuMREwDwYDVQQLDAhUZWFtIEJ1bjETMBEGA1UE\nAwwKc2VydmVyLWJ1bjAeFw0yMzA5MDYyMzI3MzRaFw0yNTA5MDUyMzI3MzRaMGkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj\nbzENMAsGA1UECgwET3ZlbjERMA8GA1UECwwIVGVhbSBCdW4xEzARBgNVBAMMCnNl\ncnZlci1idW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+7odzr3yI\nYewRNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MB\nKw3rl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwP\ndwVUeR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn\n0oH9HbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOF\nzDpcp1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FU\nIDHtnUsoHX3RAgMBAAGjTzBNMCwGA1UdEQQlMCOCCWxvY2FsaG9zdIcEfwAAAYcQ\nAAAAAAAAAAAAAAAAAAAAATAdBgNVHQ4EFgQUF3y/su4J/8ScpK+rM2LwTct6EQow\nDQYJKoZIhvcNAQELBQADggEBAGWGWp59Bmrk3Gt0bidFLEbvlOgGPWCT9ZrJUjgc\nhY44E+/t4gIBdoKOSwxo1tjtz7WsC2IYReLTXh1vTsgEitk0Bf4y7P40+pBwwZwK\naeIF9+PC6ZoAkXGFRoyEalaPVQDBg/DPOMRG9OH0lKfen9OGkZxmmjRLJzbyfAhU\noI/hExIjV8vehcvaJXmkfybJDYOYkN4BCNqPQHNf87ZNdFCb9Zgxwp/Ou+47J5k4\n5plQ+K7trfKXG3ABMbOJXNt1b0sH8jnpAsyHY4DLEQqxKYADbXsr3YX/yy6c0eOo\nX2bHGD1+zGsb7lGyNyoZrCZ0233glrEM4UxmvldBcWwOWfk=\n-----END CERTIFICATE-----\n", - key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+7odzr3yIYewR\nNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MBKw3r\nl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwPdwVU\neR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn0oH9\nHbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOFzDpc\np1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FUIDHt\nnUsoHX3RAgMBAAECggEAAckMqkn+ER3c7YMsKRLc5bUE9ELe+ftUwfA6G+oXVorn\nE+uWCXGdNqI+TOZkQpurQBWn9IzTwv19QY+H740cxo0ozZVSPE4v4czIilv9XlVw\n3YCNa2uMxeqp76WMbz1xEhaFEgn6ASTVf3hxYJYKM0ljhPX8Vb8wWwlLONxr4w4X\nOnQAB5QE7i7LVRsQIpWKnGsALePeQjzhzUZDhz0UnTyGU6GfC+V+hN3RkC34A8oK\njR3/Wsjahev0Rpb+9Pbu3SgTrZTtQ+srlRrEsDG0wVqxkIk9ueSMOHlEtQ7zYZsk\nlX59Bb8LHNGQD5o+H1EDaC6OCsgzUAAJtDRZsPiZEQKBgQDs+YtVsc9RDMoC0x2y\nlVnP6IUDXt+2UXndZfJI3YS+wsfxiEkgK7G3AhjgB+C+DKEJzptVxP+212hHnXgr\n1gfW/x4g7OWBu4IxFmZ2J/Ojor+prhHJdCvD0VqnMzauzqLTe92aexiexXQGm+WW\nwRl3YZLmkft3rzs3ZPhc1G2X9QKBgQDOQq3rrxcvxSYaDZAb+6B/H7ZE4natMCiz\nLx/cWT8n+/CrJI2v3kDfdPl9yyXIOGrsqFgR3uhiUJnz+oeZFFHfYpslb8KvimHx\nKI+qcVDcprmYyXj2Lrf3fvj4pKorc+8TgOBDUpXIFhFDyM+0DmHLfq+7UqvjU9Hs\nkjER7baQ7QKBgQDTh508jU/FxWi9RL4Jnw9gaunwrEt9bxUc79dp+3J25V+c1k6Q\nDPDBr3mM4PtYKeXF30sBMKwiBf3rj0CpwI+W9ntqYIwtVbdNIfWsGtV8h9YWHG98\nJ9q5HLOS9EAnogPuS27walj7wL1k+NvjydJ1of+DGWQi3aQ6OkMIegap0QKBgBlR\nzCHLa5A8plG6an9U4z3Xubs5BZJ6//QHC+Uzu3IAFmob4Zy+Lr5/kITlpCyw6EdG\n3xDKiUJQXKW7kluzR92hMCRnVMHRvfYpoYEtydxcRxo/WS73SzQBjTSQmicdYzLE\ntkLtZ1+ZfeMRSpXy0gR198KKAnm0d2eQBqAJy0h9AoGBAM80zkd+LehBKq87Zoh7\ndtREVWslRD1C5HvFcAxYxBybcKzVpL89jIRGKB8SoZkF7edzhqvVzAMP0FFsEgCh\naClYGtO+uo+B91+5v2CCqowRJUGfbFOtCuSPR7+B3LDK8pkjK2SQ0mFPUfRA5z0z\nNVWtC0EYNBTRkqhYtqr3ZpUc\n-----END PRIVATE KEY-----\n", + cert: "-----BEGIN CERTIFICATE-----\nMIID4jCCAsqgAwIBAgIUcaRq6J/YF++Bo01Zc+HeQvCbnWMwDQYJKoZIhvcNAQEL\nBQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJh\nbmNpc2NvMQ0wCwYDVQQKDARPdmVuMREwDwYDVQQLDAhUZWFtIEJ1bjETMBEGA1UE\nAwwKc2VydmVyLWJ1bjAeFw0yNTA5MDYwMzAwNDlaFw0zNTA5MDQwMzAwNDlaMGkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj\nbzENMAsGA1UECgwET3ZlbjERMA8GA1UECwwIVGVhbSBCdW4xEzARBgNVBAMMCnNl\ncnZlci1idW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDlYzosgRgX\nHL6vMh1V0ERFhsvlZrtRojSw6tafr3SQBphU793/rGiYZlL/lJ9HIlLkx9JMbuTj\nNm5U2eRwHiTQIeWD4aCIESwPlkdaVYtC+IOj55bJN8xNa7h5GyJwF7PnPetAsKyE\n8DMBn1gKMhaIis7HHOUtk4/K3Y4peU44d04z0yPt6JtY5Sbvi1E7pGX6T/2c9sHs\ndIDeDctWnewpXXs8zkAla0KNWQfpDnpS53wxAfStTA4lSrA9daxC7hZopQlLxFIb\nJk+0BLbEsXtrJ54T5iguHk+2MDVAy4MOqP9XbKV7eGHk73l6+CSwmHyHBxh4ChxR\nQeT5BP0MUTn1AgMBAAGjgYEwfzAdBgNVHQ4EFgQUw7nEnh4uOdZVZUapQzdAUaVa\nAn0wHwYDVR0jBBgwFoAUw7nEnh4uOdZVZUapQzdAUaVaAn0wDwYDVR0TAQH/BAUw\nAwEB/zAsBgNVHREEJTAjgglsb2NhbGhvc3SHBH8AAAGHEAAAAAAAAAAAAAAAAAAA\nAAEwDQYJKoZIhvcNAQELBQADggEBAEA8r1fvDLMSCb8bkAURpFk8chn8pl5MChzT\nYUDaLdCCBjPXJkSXNdyuwS+T/ljAGyZbW5xuDccCNKltawO4CbyEXUEZbYr3w9eq\nj8uqymJPhFf0O1rKOI2han5GBCgHwG13QwKI+4uu7390nD+TlzLOhxFfvOG7OadH\nQNMNLNyldgF4Nb8vWdz0FtQiGUIrO7iq4LFhhd1lCxe0q+FAYSEYcc74WtF/Yo8V\nJQauXuXyoP5FqLzNt/yeNQhceyIXJGKCsjr5/bASBmVlCwgRfsD3jpG37L8YCJs1\nL4WEikcY4Lzb2NF9e94IyZdQsRqd9DFBF5zP013MSUiuhiow32k=\n-----END CERTIFICATE-----\n", + key: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDlYzosgRgXHL6v\nMh1V0ERFhsvlZrtRojSw6tafr3SQBphU793/rGiYZlL/lJ9HIlLkx9JMbuTjNm5U\n2eRwHiTQIeWD4aCIESwPlkdaVYtC+IOj55bJN8xNa7h5GyJwF7PnPetAsKyE8DMB\nn1gKMhaIis7HHOUtk4/K3Y4peU44d04z0yPt6JtY5Sbvi1E7pGX6T/2c9sHsdIDe\nDctWnewpXXs8zkAla0KNWQfpDnpS53wxAfStTA4lSrA9daxC7hZopQlLxFIbJk+0\nBLbEsXtrJ54T5iguHk+2MDVAy4MOqP9XbKV7eGHk73l6+CSwmHyHBxh4ChxRQeT5\nBP0MUTn1AgMBAAECggEABtPvC5uVGr0DjQX2GxONsK8cOxoVec7U+C4pUMwBcXcM\nyjxwlHdujpi/IDXtjsm+A2rSPu2vGPdKDfMFanPvPxW/Ne99noc6U0VzHsR8lnP8\nwSB328nyJhzOeyZcXk9KTtgIPF7156gZsJLsZTNL+ej90i3xQWvKxCxXmrLuad5O\nz/TrgZkC6wC3fgj1d3e8bMljQ7tLxbshJMYVI5o6RFTxy84DLI+rlvPkf7XbiMPf\n2lsm4jcJKvfx+164HZJ9QVlx8ncqOHAnGvxb2xHHfqv4JAbz615t7yRvtaw4Paj5\n6kQSf0VWnsVzgxNJWvnUZym/i/Qf5nQafjChCyKOEQKBgQD9f4SkvJrp/mFKWLHd\nkDvRpSIIltfJsa5KShn1IHsQXFwc0YgyP4SKQb3Ckv+/9UFHK9EzM+WlPxZi7ZOS\nhsWhIfkI4c4ORpxUQ+hPi0K2k+HIY7eYyONqDAzw5PGkKBo3mSGMHDXYywSqexhB\nCCMHuHdMhwyHdz4PWYOK3C2VMQKBgQDnpsrHK7lM9aVb8wNhTokbK5IlTSzH/5oJ\nlAVu6G6H3tM5YQeoDXztbZClvrvKU8DU5UzwaC+8AEWQwaram29QIDpAI3nVQQ0k\ndmHHp/pCeADdRG2whaGcl418UJMMv8AUpWTRm+kVLTLqfTHBC0ji4NlCQMHCUCfd\nU8TeUi5QBQKBgQDvJNd7mboDOUmLG7VgMetc0Y4T0EnuKsMjrlhimau/OYJkZX84\n+BcPXwmnf4nqC3Lzs3B9/12L0MJLvZjUSHQ0mJoZOPxtF0vvasjEEbp0B3qe0wOn\nDQ0NRCUJNNKJbJOfE8VEKnDZ/lx+f/XXk9eINwvElDrLqUBQtr+TxjbyYQKBgAxQ\nlZ8Y9/TbajsFJDzcC/XhzxckjyjisbGoqNFIkfevJNN8EQgiD24f0Py+swUChtHK\njtiI8WCxMwGLCiYs9THxRKd8O1HW73fswy32BBvcfU9F//7OW9UTSXY+YlLfLrrq\nP/3UqAN0L6y/kxGMJAfLpEEdaC+IS1Y8yc531/ZxAoGASYiasDpePtmzXklDxk3h\njEw64QAdXK2p/xTMjSeTtcqJ7fvaEbg+Mfpxq0mdTjfbTdR9U/nzAkwS7OoZZ4Du\nueMVls0IVqcNnBtikG8wgdxN27b5JPXS+GzQ0zDSpWFfRPZiIh37BAXr0D1voluJ\nrEHkcals6p7hL98BoxjFIvA=\n-----END PRIVATE KEY-----\n", }); export const invalidTls = Object.freeze({ diff --git a/test/integration/bun-types/fixture/index.ts b/test/integration/bun-types/fixture/index.ts index a178c91a4b..c459e92ec1 100644 --- a/test/integration/bun-types/fixture/index.ts +++ b/test/integration/bun-types/fixture/index.ts @@ -455,3 +455,9 @@ Bun.serve({ cert, }, }); + +const signal = AbortSignal.timeout(1000); +expectType(signal).is(); +expectType(signal.aborted).is(); + +expectType(RegExp.escape("foo.bar")).is(); diff --git a/test/js/bun/http/bun-server.test.ts b/test/js/bun/http/bun-server.test.ts index 74834a4e32..aa5f9a79cf 100644 --- a/test/js/bun/http/bun-server.test.ts +++ b/test/js/bun/http/bun-server.test.ts @@ -1,6 +1,6 @@ import type { Server, ServerWebSocket, Socket } from "bun"; import { describe, expect, test } from "bun:test"; -import { bunEnv, bunExe, rejectUnauthorizedScope, tempDirWithFiles } from "harness"; +import { bunEnv, bunExe, rejectUnauthorizedScope, tempDirWithFiles, tls } from "harness"; import path from "path"; describe("Server", () => { @@ -405,10 +405,7 @@ describe("Server", () => { test("handshake failures should not impact future connections", async () => { using server = Bun.serve({ - tls: { - cert: "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIUHaenuNcUAu0tjDZGpc7fK4EX78gwDQYJKoZIhvcNAQEL\nBQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJh\nbmNpc2NvMQ0wCwYDVQQKDARPdmVuMREwDwYDVQQLDAhUZWFtIEJ1bjETMBEGA1UE\nAwwKc2VydmVyLWJ1bjAeFw0yMzA5MDYyMzI3MzRaFw0yNTA5MDUyMzI3MzRaMGkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj\nbzENMAsGA1UECgwET3ZlbjERMA8GA1UECwwIVGVhbSBCdW4xEzARBgNVBAMMCnNl\ncnZlci1idW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+7odzr3yI\nYewRNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MB\nKw3rl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwP\ndwVUeR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn\n0oH9HbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOF\nzDpcp1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FU\nIDHtnUsoHX3RAgMBAAGjTzBNMCwGA1UdEQQlMCOCCWxvY2FsaG9zdIcEfwAAAYcQ\nAAAAAAAAAAAAAAAAAAAAATAdBgNVHQ4EFgQUF3y/su4J/8ScpK+rM2LwTct6EQow\nDQYJKoZIhvcNAQELBQADggEBAGWGWp59Bmrk3Gt0bidFLEbvlOgGPWCT9ZrJUjgc\nhY44E+/t4gIBdoKOSwxo1tjtz7WsC2IYReLTXh1vTsgEitk0Bf4y7P40+pBwwZwK\naeIF9+PC6ZoAkXGFRoyEalaPVQDBg/DPOMRG9OH0lKfen9OGkZxmmjRLJzbyfAhU\noI/hExIjV8vehcvaJXmkfybJDYOYkN4BCNqPQHNf87ZNdFCb9Zgxwp/Ou+47J5k4\n5plQ+K7trfKXG3ABMbOJXNt1b0sH8jnpAsyHY4DLEQqxKYADbXsr3YX/yy6c0eOo\nX2bHGD1+zGsb7lGyNyoZrCZ0233glrEM4UxmvldBcWwOWfk=\n-----END CERTIFICATE-----\n", - key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+7odzr3yIYewR\nNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MBKw3r\nl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwPdwVU\neR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn0oH9\nHbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOFzDpc\np1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FUIDHt\nnUsoHX3RAgMBAAECggEAAckMqkn+ER3c7YMsKRLc5bUE9ELe+ftUwfA6G+oXVorn\nE+uWCXGdNqI+TOZkQpurQBWn9IzTwv19QY+H740cxo0ozZVSPE4v4czIilv9XlVw\n3YCNa2uMxeqp76WMbz1xEhaFEgn6ASTVf3hxYJYKM0ljhPX8Vb8wWwlLONxr4w4X\nOnQAB5QE7i7LVRsQIpWKnGsALePeQjzhzUZDhz0UnTyGU6GfC+V+hN3RkC34A8oK\njR3/Wsjahev0Rpb+9Pbu3SgTrZTtQ+srlRrEsDG0wVqxkIk9ueSMOHlEtQ7zYZsk\nlX59Bb8LHNGQD5o+H1EDaC6OCsgzUAAJtDRZsPiZEQKBgQDs+YtVsc9RDMoC0x2y\nlVnP6IUDXt+2UXndZfJI3YS+wsfxiEkgK7G3AhjgB+C+DKEJzptVxP+212hHnXgr\n1gfW/x4g7OWBu4IxFmZ2J/Ojor+prhHJdCvD0VqnMzauzqLTe92aexiexXQGm+WW\nwRl3YZLmkft3rzs3ZPhc1G2X9QKBgQDOQq3rrxcvxSYaDZAb+6B/H7ZE4natMCiz\nLx/cWT8n+/CrJI2v3kDfdPl9yyXIOGrsqFgR3uhiUJnz+oeZFFHfYpslb8KvimHx\nKI+qcVDcprmYyXj2Lrf3fvj4pKorc+8TgOBDUpXIFhFDyM+0DmHLfq+7UqvjU9Hs\nkjER7baQ7QKBgQDTh508jU/FxWi9RL4Jnw9gaunwrEt9bxUc79dp+3J25V+c1k6Q\nDPDBr3mM4PtYKeXF30sBMKwiBf3rj0CpwI+W9ntqYIwtVbdNIfWsGtV8h9YWHG98\nJ9q5HLOS9EAnogPuS27walj7wL1k+NvjydJ1of+DGWQi3aQ6OkMIegap0QKBgBlR\nzCHLa5A8plG6an9U4z3Xubs5BZJ6//QHC+Uzu3IAFmob4Zy+Lr5/kITlpCyw6EdG\n3xDKiUJQXKW7kluzR92hMCRnVMHRvfYpoYEtydxcRxo/WS73SzQBjTSQmicdYzLE\ntkLtZ1+ZfeMRSpXy0gR198KKAnm0d2eQBqAJy0h9AoGBAM80zkd+LehBKq87Zoh7\ndtREVWslRD1C5HvFcAxYxBybcKzVpL89jIRGKB8SoZkF7edzhqvVzAMP0FFsEgCh\naClYGtO+uo+B91+5v2CCqowRJUGfbFOtCuSPR7+B3LDK8pkjK2SQ0mFPUfRA5z0z\nNVWtC0EYNBTRkqhYtqr3ZpUc\n-----END PRIVATE KEY-----\n", - }, + tls, fetch() { return new Response("Hello"); }, diff --git a/test/js/node/test/fixtures/.gitignore b/test/js/node/test/fixtures/.gitignore deleted file mode 100644 index 736e8ae58a..0000000000 --- a/test/js/node/test/fixtures/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!node_modules \ No newline at end of file diff --git a/test/js/node/test/fixtures/.node_repl_history_multiline b/test/js/node/test/fixtures/.node_repl_history_multiline new file mode 100644 index 0000000000..9f1ccf5e9a --- /dev/null +++ b/test/js/node/test/fixtures/.node_repl_history_multiline @@ -0,0 +1,4 @@ +] } ] } b: 4, a: 3, { c: [{ a: 1, b: 2 }, b: 4, a: 3, { }, b: 2, a: 1, { var d = [ +] } b: 2, a: 1, { const c = [ +]` 4, 3, 2, 1, `const b = [ +I can be as long as I want` I am a multiline string a = ` \ No newline at end of file diff --git a/test/js/node/test/fixtures/agent8-cert.pem b/test/js/node/test/fixtures/agent8-cert.pem deleted file mode 100644 index ee976a4528..0000000000 --- a/test/js/node/test/fixtures/agent8-cert.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDUDCCAjgCAQMwDQYJKoZIhvcNAQELBQAwfTELMAkGA1UEBhMCSUwxFjAUBgNV -BAoMDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsMIlNlY3VyZSBEaWdpdGFsIENlcnRp -ZmljYXRlIFNpZ25pbmcxKTAnBgNVBAMMIFN0YXJ0Q29tIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MCAXDTE2MTAyMDIzNTk1OVoYDzIyOTYwNjE3MTQ0NjUyWjBdMQsw -CQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExCzAJBgNVBAcMAlNGMQ8wDQYDVQQKDAZO -T0RFSlMxDzANBgNVBAsMBmFnZW50ODESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8qCR7vlhx6Fr109bIS6dQUU2Iqwn -4CbYXjxfKMPj4cdCB9l68cRDNystAgNzc7RPUoiz7+gdvY9o8QCL+hiZOArH5xpR -lBq57hp9uXIMiZLKuZEZODWr2h1eE0rg8x4aqfWR0/JgPup3d9bOvD47pF7wGmFz -mtWlpptjXA6y7mt0ZamYdNoWkoUabrQIheEV/zspbgTJ1mhFkVeGnch5DE/AfNvs -M+cml5ZzQnm5FLKtp1CcHPaPDGUd5D3jNmNq55iZTEPQtcYErwHX9aLWQxrl8ZSq -4Xo67HP6TjL0zTzzcoJz5H68+FDVoa/gVxwpv/Cka0ief0nNgl17V8aWIQIDAQAB -MA0GCSqGSIb3DQEBCwUAA4IBAQB2z3MF4x/1WXcpzqEcyPyowEzczsCZLkhy0cG4 -eY0mt/+8+JbXdPDgrWNtfqCT2h4KMZu41kquRb63cUYy9DPwFrg8a09picvJWoBp -PMXv0o/CttFLYkQ+o0kXTy5DvGUPw9FLoPVncTkGhhX/lOvHKReplhS6lot/5r0g -nXlRaMAbzCDRxW5AAUK2p0WR4Ih84lI++1M2m6ac0q7efz3TGpyz0lukHYxNJak0 -dh7ToIpvQ54MZkxFgG0ej2HGtNBHVnCpMk9bhupDIJ65fybMtIXy8bhUuj4KX/hm -tALVY3gVezswj90SGBMxeMwcE7z/jDUpkEAIP4FM3Y+yYfmS ------END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/agent8-key.pem b/test/js/node/test/fixtures/agent8-key.pem deleted file mode 100644 index 0f846c1a42..0000000000 --- a/test/js/node/test/fixtures/agent8-key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEA8qCR7vlhx6Fr109bIS6dQUU2Iqwn4CbYXjxfKMPj4cdCB9l6 -8cRDNystAgNzc7RPUoiz7+gdvY9o8QCL+hiZOArH5xpRlBq57hp9uXIMiZLKuZEZ -ODWr2h1eE0rg8x4aqfWR0/JgPup3d9bOvD47pF7wGmFzmtWlpptjXA6y7mt0ZamY -dNoWkoUabrQIheEV/zspbgTJ1mhFkVeGnch5DE/AfNvsM+cml5ZzQnm5FLKtp1Cc -HPaPDGUd5D3jNmNq55iZTEPQtcYErwHX9aLWQxrl8ZSq4Xo67HP6TjL0zTzzcoJz -5H68+FDVoa/gVxwpv/Cka0ief0nNgl17V8aWIQIDAQABAoIBAQC4ERcFXE5Q++Zr -bvmsv8dveAls3nxV8kJdo6FxtMMSS2+NsvExr3pqxSedCm8xDU7MR4dy7v55C+5K -P+bxsm2y9YLYkb/oAyqhN5m/8YUPbby8cRbX7OfWTkdLjZgA+Qqze+jJCWz47jn6 -QY2PhAsNVTUEXoAsq/7C2cnUUhZvBr4LfL4rPXrSCIbYsZBcZkR2fSYXLfhAJPND -FtRNteiSmQyQovkTl4RCtCpw9iVK/JLwLVOIhKUODbDC2lIIYf3j6g8Uot1RnWzm -cjyWiqsMz0eGLvdBae8HnJVVoyr3oe32Fm61qM/ONpvVydHZzULJJj16ApZgi1ag -YpzqP2fNAoGBAP4wpoqUVUN6dXlsur73DVVHMRxUf5U1zDZmSUheDidz2qxbuq8Q -kjsD3TZktqKcD5eQDWJxAOxsrOCjJmvhvt6PfYm96eSOMiLf1GksOSncJuA3gkse -EV140os7kSuuzf4Hc6hF1ZTVyo7ecSulrnl7dTylHvUgBL7bhiRA62TTAoGBAPRa -156aestNDqlbr857qiuzGnp7ZWtBy8mtjMFzjP8PhKXu+KVlW89tOloMvjskK1+3 -gFWYXz39Tt4C9tPebZ4yLcw66buGi8UUMXA+vDKTavDErmPHDIgyqx/cQwLcLr5D -P9RrOF8/u3hHKEdnWFFDKe42JtvM1zGINCnnJlC7AoGBANsqoX4dNYMQBFgkysO7 -CjD8SDjwFm1VzHUfLpKKHlQgDWzNTqKBfEQMKeErZ1m/i6YX26KEYtJ3RXwO0CL2 -qvcE664nJJMfk9UD/waLzeHs40wyMFKKY1ifw5GvU5VBjHU6gZuWUviYeaVD4HpM -yaoPK9+VU6Lw74aMixWZMB1nAoGBALXyeoEnp+1/iD5E/ihy3qhBaaLwBPmTeYnH -h3p4bvFw/aWMxmppia5vN7bbrD5fVUilW5LgrXJ8DmCztlTWV6sm1AExkN7IdYSe -350jqYDDUirLWMsE6Oj1SYSkvuT/THLxojKqT8RksVQDMBPS+OkxaKRugArEgSvp -rmXRLy+HAoGBAPNJaegjDv4WWd4Q2IXacebHchBlGH1KhQd8pBWJbnRO/Zq0z65f -Au7bMl6AxMfNDnSeh/UGhPNqBzoHvt9l3WgC/0T+tO00AhlhXxpQBw1OG6R9XhzQ -iObkAkHkfUnpkP91/U9d42SvZisnhqZk5K5BIxOmlY5HsejOChu0DT8/ ------END RSA PRIVATE KEY----- diff --git a/test/js/node/test/fixtures/console/stack_overflow.js b/test/js/node/test/fixtures/console/stack_overflow.js index 565692b6d6..14bceef878 100644 --- a/test/js/node/test/fixtures/console/stack_overflow.js +++ b/test/js/node/test/fixtures/console/stack_overflow.js @@ -26,11 +26,15 @@ Error.stackTraceLimit = 0; console.error('before'); +// Invalidate elements protector to force slow-path. +// The fast-path of JSON.stringify is iterative and won't throw. +Array.prototype[2] = 'foo'; + // Trigger stack overflow by stringifying a deeply nested array. -let array = []; -for (let i = 0; i < 100000; i++) { - array = [ array ]; -} +// eslint-disable-next-line no-sparse-arrays +let array = [,]; +for (let i = 0; i < 10000; i++) + array = [array]; JSON.stringify(array); diff --git a/test/js/node/test/fixtures/copy/utf/新建文件夹/experimental.json b/test/js/node/test/fixtures/copy/utf/新建文件夹/experimental.json new file mode 100644 index 0000000000..12611d2385 --- /dev/null +++ b/test/js/node/test/fixtures/copy/utf/新建文件夹/experimental.json @@ -0,0 +1,3 @@ +{ + "ofLife": 42 +} diff --git a/test/js/node/test/fixtures/dotenv/lines-with-only-spaces.env b/test/js/node/test/fixtures/dotenv/lines-with-only-spaces.env new file mode 100644 index 0000000000..5eeb5f48f5 --- /dev/null +++ b/test/js/node/test/fixtures/dotenv/lines-with-only-spaces.env @@ -0,0 +1,8 @@ + +EMPTY_LINE='value after an empty line' + +SPACES_LINE='value after a line with just some spaces' + +TABS_LINE='value after a line with just some tabs' + +SPACES_TABS_LINE='value after a line with just some spaces and tabs' diff --git a/test/js/node/test/fixtures/dotenv/node-options-no-tranform.env b/test/js/node/test/fixtures/dotenv/node-options-no-tranform.env new file mode 100644 index 0000000000..88ecfa8352 --- /dev/null +++ b/test/js/node/test/fixtures/dotenv/node-options-no-tranform.env @@ -0,0 +1 @@ +NODE_OPTIONS="--no-experimental-strip-types" diff --git a/test/js/node/test/fixtures/dotenv/valid.env b/test/js/node/test/fixtures/dotenv/valid.env index 120488d579..6df454da65 100644 --- a/test/js/node/test/fixtures/dotenv/valid.env +++ b/test/js/node/test/fixtures/dotenv/valid.env @@ -6,6 +6,8 @@ BASIC=basic # previous line intentionally left blank AFTER_LINE=after_line +A="B=C" +B=C=D EMPTY= EMPTY_SINGLE_QUOTES='' EMPTY_DOUBLE_QUOTES="" diff --git a/test/js/node/test/fixtures/errors/core_line_numbers.snapshot b/test/js/node/test/fixtures/errors/core_line_numbers.snapshot index 54cdb52744..9ef06c33af 100644 --- a/test/js/node/test/fixtures/errors/core_line_numbers.snapshot +++ b/test/js/node/test/fixtures/errors/core_line_numbers.snapshot @@ -1,10 +1,10 @@ -node:punycode:49 +node:punycode:54 throw new RangeError(errors[type]); ^ RangeError: Invalid input - at error (node:punycode:49:8) - at Object.decode (node:punycode:242:5) + at error (node:punycode:54:8) + at Object.decode (node:punycode:247:5) at Object. (*core_line_numbers.js:13:10) Node.js * diff --git a/test/js/node/test/fixtures/errors/force_colors.js b/test/js/node/test/fixtures/errors/force_colors.js index 0f3c92c6f8..a19a78f092 100644 --- a/test/js/node/test/fixtures/errors/force_colors.js +++ b/test/js/node/test/fixtures/errors/force_colors.js @@ -1 +1,2 @@ -throw new Error('Should include grayed stack trace') +'use strict'; +throw new Error('Should include grayed stack trace'); diff --git a/test/js/node/test/fixtures/errors/force_colors.snapshot b/test/js/node/test/fixtures/errors/force_colors.snapshot index e5a03ca609..93ac005e83 100644 --- a/test/js/node/test/fixtures/errors/force_colors.snapshot +++ b/test/js/node/test/fixtures/errors/force_colors.snapshot @@ -1,9 +1,9 @@ -*force_colors.js:1 -throw new Error('Should include grayed stack trace') +*force_colors.js:2 +throw new Error('Should include grayed stack trace'); ^ Error: Should include grayed stack trace - at Object. (/test*force_colors.js:1:7) + at Object. (/test*force_colors.js:2:7)  at *  at *  at * diff --git a/test/js/node/test/fixtures/errors/throw_in_eval_anonymous.js b/test/js/node/test/fixtures/errors/throw_in_eval_anonymous.js index aa9ab6a058..e325841f4b 100644 --- a/test/js/node/test/fixtures/errors/throw_in_eval_anonymous.js +++ b/test/js/node/test/fixtures/errors/throw_in_eval_anonymous.js @@ -6,4 +6,4 @@ eval(` throw new Error('error in anonymous script'); -`) +`); diff --git a/test/js/node/test/fixtures/errors/throw_in_eval_named.js b/test/js/node/test/fixtures/errors/throw_in_eval_named.js index 0d33fcf4d0..e04d8f7f29 100644 --- a/test/js/node/test/fixtures/errors/throw_in_eval_named.js +++ b/test/js/node/test/fixtures/errors/throw_in_eval_named.js @@ -6,4 +6,4 @@ eval(` throw new Error('error in named script'); -//# sourceURL=evalscript.js`) +//# sourceURL=evalscript.js`); diff --git a/test/js/node/test/fixtures/errors/throw_in_line_with_tabs.js b/test/js/node/test/fixtures/errors/throw_in_line_with_tabs.js index b62d422597..f38ebfbb32 100644 --- a/test/js/node/test/fixtures/errors/throw_in_line_with_tabs.js +++ b/test/js/node/test/fixtures/errors/throw_in_line_with_tabs.js @@ -19,7 +19,7 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -/* eslint-disable indent, no-tabs */ +/* eslint-disable @stylistic/js/indent, @stylistic/js/no-tabs */ 'use strict'; require('../../common'); diff --git a/test/js/node/test/fixtures/es-modules/dep.wasm b/test/js/node/test/fixtures/es-modules/dep.wasm new file mode 100644 index 0000000000..ad9abfaa66 Binary files /dev/null and b/test/js/node/test/fixtures/es-modules/dep.wasm differ diff --git a/test/js/node/test/fixtures/es-modules/exports-cases.js b/test/js/node/test/fixtures/es-modules/exports-cases.js index 94bbde74d1..a3ee194ae3 100644 --- a/test/js/node/test/fixtures/es-modules/exports-cases.js +++ b/test/js/node/test/fixtures/es-modules/exports-cases.js @@ -7,3 +7,4 @@ exports['\u{D83C}'] = 'no'; exports['\u{D83C}\u{DF10}'] = 'yes'; exports.package = 10; // reserved word Object.defineProperty(exports, 'z', { value: 'yes' }); +exports['module.exports'] = 5; diff --git a/test/js/node/test/fixtures/es-modules/globals.js b/test/js/node/test/fixtures/es-modules/globals.js new file mode 100644 index 0000000000..0b01c0225e --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/globals.js @@ -0,0 +1,18 @@ +// globals.js - Direct global exports for WebAssembly imports + +// Immutable globals (simple values) +const i32_value = 42; +export { i32_value as '🚀i32_value' } +export const i64_value = 9223372036854775807n; // Max i64 value +export const f32_value = 3.14159; +export const f64_value = 3.141592653589793; + +// Mutable globals with WebAssembly.Global wrapper +export const i32_mut_value = new WebAssembly.Global({ value: 'i32', mutable: true }, 100); +export const i64_mut_value = new WebAssembly.Global({ value: 'i64', mutable: true }, 200n); +export const f32_mut_value = new WebAssembly.Global({ value: 'f32', mutable: true }, 2.71828); +export const f64_mut_value = new WebAssembly.Global({ value: 'f64', mutable: true }, 2.718281828459045); + +export const externref_value = { hello: 'world' }; +export const externref_mut_value = new WebAssembly.Global({ value: 'externref', mutable: true }, { mutable: 'global' }); +export const null_externref_value = null; diff --git a/test/js/node/test/fixtures/es-modules/globals.wasm b/test/js/node/test/fixtures/es-modules/globals.wasm new file mode 100644 index 0000000000..45188ab26e Binary files /dev/null and b/test/js/node/test/fixtures/es-modules/globals.wasm differ diff --git a/test/js/node/test/fixtures/es-modules/import-meta-main.mjs b/test/js/node/test/fixtures/es-modules/import-meta-main.mjs new file mode 100644 index 0000000000..bee2c8e265 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/import-meta-main.mjs @@ -0,0 +1 @@ +export const isMain = import.meta.main; diff --git a/test/js/node/test/fixtures/es-modules/import-meta-main.ts b/test/js/node/test/fixtures/es-modules/import-meta-main.ts new file mode 100644 index 0000000000..bee2c8e265 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/import-meta-main.ts @@ -0,0 +1 @@ +export const isMain = import.meta.main; diff --git a/test/js/node/test/fixtures/es-modules/network-import.mjs b/test/js/node/test/fixtures/es-modules/network-import.mjs deleted file mode 100644 index 529d563b4d..0000000000 --- a/test/js/node/test/fixtures/es-modules/network-import.mjs +++ /dev/null @@ -1 +0,0 @@ -import 'http://example.com/foo.js'; diff --git a/test/js/node/test/fixtures/es-modules/require-module-instantiated/a.mjs b/test/js/node/test/fixtures/es-modules/require-module-instantiated/a.mjs new file mode 100644 index 0000000000..2918d41462 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/require-module-instantiated/a.mjs @@ -0,0 +1,2 @@ +export { default as b } from './b.cjs'; +export { default as c } from './c.mjs'; diff --git a/test/js/node/test/fixtures/es-modules/require-module-instantiated/b.cjs b/test/js/node/test/fixtures/es-modules/require-module-instantiated/b.cjs new file mode 100644 index 0000000000..1e23a5d46d --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/require-module-instantiated/b.cjs @@ -0,0 +1 @@ +module.exports = require('./c.mjs'); diff --git a/test/js/node/test/fixtures/es-modules/require-module-instantiated/c.mjs b/test/js/node/test/fixtures/es-modules/require-module-instantiated/c.mjs new file mode 100644 index 0000000000..a5b4faccf9 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/require-module-instantiated/c.mjs @@ -0,0 +1,3 @@ +const foo = 1; +export default foo; +export { foo as 'module.exports' }; diff --git a/test/js/node/test/fixtures/es-modules/tla/unresolved-with-listener.mjs b/test/js/node/test/fixtures/es-modules/tla/unresolved-with-listener.mjs new file mode 100644 index 0000000000..8bd2c0a080 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/tla/unresolved-with-listener.mjs @@ -0,0 +1,6 @@ +process.on('exit', (exitCode) => { + console.log(`the exit listener received code: ${exitCode}`); + console.log(`process.exitCode inside the exist listener: ${process.exitCode}`); +}) + +await new Promise(() => {}); diff --git a/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode-and-listener.mjs b/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode-and-listener.mjs new file mode 100644 index 0000000000..fa18609123 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode-and-listener.mjs @@ -0,0 +1,8 @@ +process.on('exit', (exitCode) => { + console.log(`the exit listener received code: ${exitCode}`); + console.log(`process.exitCode inside the exist listener: ${process.exitCode}`); +}); + +process.exitCode = 42; + +await new Promise(() => {}); diff --git a/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode.mjs b/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode.mjs index 1cb9823110..0316dae1cd 100644 --- a/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode.mjs +++ b/test/js/node/test/fixtures/es-modules/tla/unresolved-withexitcode.mjs @@ -1,2 +1,7 @@ +process.on('exit', (exitCode) => { + console.log(`the exit listener received code: ${exitCode}`); +}); + process.exitCode = 42; + await new Promise(() => {}); diff --git a/test/js/node/test/fixtures/es-modules/tla/unresolved.mjs b/test/js/node/test/fixtures/es-modules/tla/unresolved.mjs index 231a8cd634..37566bd568 100644 --- a/test/js/node/test/fixtures/es-modules/tla/unresolved.mjs +++ b/test/js/node/test/fixtures/es-modules/tla/unresolved.mjs @@ -1 +1,5 @@ +process.on('exit', (exitCode) => { + console.log(`the exit listener received code: ${exitCode}`); +}) + await new Promise(() => {}); diff --git a/test/js/node/test/fixtures/es-modules/top-level-wasm.wasm b/test/js/node/test/fixtures/es-modules/top-level-wasm.wasm new file mode 100644 index 0000000000..085472e7c3 Binary files /dev/null and b/test/js/node/test/fixtures/es-modules/top-level-wasm.wasm differ diff --git a/test/js/node/test/fixtures/es-modules/unimportable.wasm b/test/js/node/test/fixtures/es-modules/unimportable.wasm new file mode 100644 index 0000000000..74f97158e9 Binary files /dev/null and b/test/js/node/test/fixtures/es-modules/unimportable.wasm differ diff --git a/test/js/node/test/fixtures/es-modules/wasm-function.js b/test/js/node/test/fixtures/es-modules/wasm-function.js new file mode 100644 index 0000000000..b33b08a10e --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/wasm-function.js @@ -0,0 +1,11 @@ +export function call1 (func, thisObj, arg0) { + return func.call(thisObj, arg0); +} + +export function call2 (func, thisObj, arg0, arg1) { + return func.call(thisObj, arg0, arg1); +} + +export function call3 (func, thisObj, arg0, arg1, arg2) { + return func.call(thisObj, arg0, arg1, arg2); +} diff --git a/test/js/node/test/fixtures/es-modules/wasm-object.js b/test/js/node/test/fixtures/es-modules/wasm-object.js new file mode 100644 index 0000000000..70318fea8a --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/wasm-object.js @@ -0,0 +1,3 @@ +export const { get: getProperty, set: setProperty } = Reflect; +export const { create } = Object; +export const global = globalThis; diff --git a/test/js/node/test/fixtures/es-modules/wasm-source-phase.js b/test/js/node/test/fixtures/es-modules/wasm-source-phase.js new file mode 100644 index 0000000000..0485caa8c7 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/wasm-source-phase.js @@ -0,0 +1,7 @@ +import source mod from './simple.wasm'; + +export function dyn (specifier) { + return import.source(specifier); +} + +export { mod }; diff --git a/test/js/node/test/fixtures/es-modules/wasm-string-constants.js b/test/js/node/test/fixtures/es-modules/wasm-string-constants.js new file mode 100644 index 0000000000..89cbd44f34 --- /dev/null +++ b/test/js/node/test/fixtures/es-modules/wasm-string-constants.js @@ -0,0 +1,6 @@ +const console = 'console'; +const hello_world = 'hello world'; +const log = 'log'; +const prop = 'prop'; + +export { console, hello_world as 'hello world', log, prop } diff --git a/test/js/node/test/fixtures/eval/eval_messages.snapshot b/test/js/node/test/fixtures/eval/eval_messages.snapshot index bed1674244..a80c5eee8e 100644 --- a/test/js/node/test/fixtures/eval/eval_messages.snapshot +++ b/test/js/node/test/fixtures/eval/eval_messages.snapshot @@ -2,11 +2,7 @@ [eval]:1 with(this){__filename} ^^^^ - x The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'. - ,---- - 1 | with(this){__filename} - : ^^^^ - `---- +The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'. SyntaxError: Strict mode code may not include a with statement @@ -40,7 +36,7 @@ Node.js * var ______________________________________________; throw 10 ^ 10 -(Use `node --trace-uncaught ...` to show where the exception was thrown) +(Use `* --trace-uncaught ...` to show where the exception was thrown) Node.js * @@ -48,7 +44,7 @@ Node.js * var ______________________________________________; throw 10 ^ 10 -(Use `node --trace-uncaught ...` to show where the exception was thrown) +(Use `* --trace-uncaught ...` to show where the exception was thrown) Node.js * done diff --git a/test/js/node/test/fixtures/eval/eval_typescript.js b/test/js/node/test/fixtures/eval/eval_typescript.js index 2c96b66f70..9fd1f3315d 100644 --- a/test/js/node/test/fixtures/eval/eval_typescript.js +++ b/test/js/node/test/fixtures/eval/eval_typescript.js @@ -5,21 +5,21 @@ require('../../common'); const spawnSync = require('child_process').spawnSync; const queue = [ - 'enum Foo{};', - 'throw new SyntaxError("hello")', - 'const foo;', - 'let x: number = 100;x;', - 'const foo: string = 10;', - 'function foo(){};foo(1);', - 'interface Foo{};const foo;', - 'function foo(){ await Promise.resolve(1)};', + 'enum Foo{};', + 'throw new SyntaxError("hello")', + 'const foo;', + 'let x: number = 100;x;', + 'const foo: string = 10;', + 'function foo(){};foo(1);', + 'interface Foo{};const foo;', + 'function foo(){ await Promise.resolve(1)};', ]; for (const cmd of queue) { - const args = ['--disable-warning=ExperimentalWarning', '-p', cmd]; - const result = spawnSync(process.execPath, args, { - stdio: 'pipe' - }); - process.stdout.write(result.stdout); - process.stdout.write(result.stderr); + const args = ['--disable-warning=ExperimentalWarning', '-p', cmd]; + const result = spawnSync(process.execPath, args, { + stdio: 'pipe', + }); + process.stdout.write(result.stdout); + process.stdout.write(result.stderr); } diff --git a/test/js/node/test/fixtures/eval/eval_typescript.snapshot b/test/js/node/test/fixtures/eval/eval_typescript.snapshot index 074e966e51..df0c221124 100644 --- a/test/js/node/test/fixtures/eval/eval_typescript.snapshot +++ b/test/js/node/test/fixtures/eval/eval_typescript.snapshot @@ -1,11 +1,7 @@ [eval]:1 enum Foo{}; ^^^^ - x TypeScript enum is not supported in strip-only mode - ,---- - 1 | enum Foo{}; - : ^^^^^^^^^^ - `---- +TypeScript enum is not supported in strip-only mode SyntaxError: Unexpected reserved word @@ -20,6 +16,7 @@ Node.js * [eval]:1 const foo; ^^^ +'const' declarations must be initialized SyntaxError: Missing initializer in const declaration @@ -28,20 +25,17 @@ Node.js * undefined false [eval]:1 - ;const foo; - ^^^ +interface Foo{};const foo; + ^^^ +'const' declarations must be initialized -SyntaxError: Missing initializer in const declaration +SyntaxError: Unexpected identifier 'Foo' Node.js * [eval]:1 function foo(){ await Promise.resolve(1)}; ^^^^^ - x await isn't allowed in non-async function - ,---- - 1 | function foo(){ await Promise.resolve(1)}; - : ^^^^^^^ - `---- +await isn't allowed in non-async function SyntaxError: await is only valid in async functions and the top level bodies of modules diff --git a/test/js/node/test/fixtures/eval/stdin_messages.snapshot b/test/js/node/test/fixtures/eval/stdin_messages.snapshot index 66bd506f75..d7ec8a0d17 100644 --- a/test/js/node/test/fixtures/eval/stdin_messages.snapshot +++ b/test/js/node/test/fixtures/eval/stdin_messages.snapshot @@ -2,11 +2,7 @@ [stdin]:1 with(this){__filename} ^^^^ - x The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'. - ,---- - 1 | with(this){__filename} - : ^^^^ - `---- +The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'. SyntaxError: Strict mode code may not include a with statement @@ -40,7 +36,7 @@ Node.js * let ______________________________________________; throw 10 ^ 10 -(Use `node --trace-uncaught ...` to show where the exception was thrown) +(Use `* --trace-uncaught ...` to show where the exception was thrown) Node.js * @@ -48,7 +44,7 @@ Node.js * let ______________________________________________; throw 10 ^ 10 -(Use `node --trace-uncaught ...` to show where the exception was thrown) +(Use `* --trace-uncaught ...` to show where the exception was thrown) Node.js * done diff --git a/test/js/node/test/fixtures/eval/stdin_typescript.js b/test/js/node/test/fixtures/eval/stdin_typescript.js index d47c495f86..e1acaf8a6b 100644 --- a/test/js/node/test/fixtures/eval/stdin_typescript.js +++ b/test/js/node/test/fixtures/eval/stdin_typescript.js @@ -5,34 +5,34 @@ require('../../common'); const spawn = require('child_process').spawn; function run(cmd, strict, cb) { - const args = ['--disable-warning=ExperimentalWarning']; - if (strict) args.push('--use_strict'); - args.push('-p'); - const child = spawn(process.execPath, args); - child.stdout.pipe(process.stdout); - child.stderr.pipe(process.stdout); - child.stdin.end(cmd); - child.on('close', cb); + const args = ['--disable-warning=ExperimentalWarning']; + if (strict) args.push('--use_strict'); + args.push('-p'); + const child = spawn(process.execPath, args); + child.stdout.pipe(process.stdout); + child.stderr.pipe(process.stdout); + child.stdin.end(cmd); + child.on('close', cb); } const queue = [ - 'enum Foo{};', - 'throw new SyntaxError("hello")', - 'const foo;', - 'let x: number = 100;x;', - 'const foo: string = 10;', - 'function foo(){};foo(1);', - 'interface Foo{};const foo;', - 'function foo(){ await Promise.resolve(1)};', + 'enum Foo{};', + 'throw new SyntaxError("hello")', + 'const foo;', + 'let x: number = 100;x;', + 'const foo: string = 10;', + 'function foo(){};foo(1);', + 'interface Foo{};const foo;', + 'function foo(){ await Promise.resolve(1)};', ]; function go() { - const c = queue.shift(); - if (!c) return console.log('done'); - run(c, false, function () { - run(c, true, go); - }); + const c = queue.shift(); + if (!c) return console.log('done'); + run(c, false, function() { + run(c, true, go); + }); } go(); diff --git a/test/js/node/test/fixtures/eval/stdin_typescript.snapshot b/test/js/node/test/fixtures/eval/stdin_typescript.snapshot index 3e209e6db2..d693ec34f5 100644 --- a/test/js/node/test/fixtures/eval/stdin_typescript.snapshot +++ b/test/js/node/test/fixtures/eval/stdin_typescript.snapshot @@ -1,11 +1,7 @@ [stdin]:1 enum Foo{}; ^^^^ - x TypeScript enum is not supported in strip-only mode - ,---- - 1 | enum Foo{}; - : ^^^^^^^^^^ - `---- +TypeScript enum is not supported in strip-only mode SyntaxError: Unexpected reserved word @@ -13,11 +9,7 @@ Node.js * [stdin]:1 enum Foo{}; ^^^^ - x TypeScript enum is not supported in strip-only mode - ,---- - 1 | enum Foo{}; - : ^^^^^^^^^^ - `---- +TypeScript enum is not supported in strip-only mode SyntaxError: Unexpected reserved word @@ -39,6 +31,7 @@ Node.js * [stdin]:1 const foo; ^^^ +'const' declarations must be initialized SyntaxError: Missing initializer in const declaration @@ -46,6 +39,7 @@ Node.js * [stdin]:1 const foo; ^^^ +'const' declarations must be initialized SyntaxError: Missing initializer in const declaration @@ -57,27 +51,25 @@ undefined false false [stdin]:1 - ;const foo; - ^^^ +interface Foo{};const foo; + ^^^ +'const' declarations must be initialized -SyntaxError: Missing initializer in const declaration +SyntaxError: Unexpected identifier 'Foo' Node.js * [stdin]:1 - ;const foo; - ^^^ +interface Foo{};const foo; +^^^^^^^^^ +'const' declarations must be initialized -SyntaxError: Missing initializer in const declaration +SyntaxError: Unexpected strict mode reserved word Node.js * [stdin]:1 function foo(){ await Promise.resolve(1)}; ^^^^^ - x await isn't allowed in non-async function - ,---- - 1 | function foo(){ await Promise.resolve(1)}; - : ^^^^^^^ - `---- +await isn't allowed in non-async function SyntaxError: await is only valid in async functions and the top level bodies of modules @@ -85,11 +77,7 @@ Node.js * [stdin]:1 function foo(){ await Promise.resolve(1)}; ^^^^^ - x await isn't allowed in non-async function - ,---- - 1 | function foo(){ await Promise.resolve(1)}; - : ^^^^^^^ - `---- +await isn't allowed in non-async function SyntaxError: await is only valid in async functions and the top level bodies of modules diff --git a/test/js/node/test/fixtures/fake-startcom-root-cert.pem b/test/js/node/test/fixtures/fake-startcom-root-cert.pem deleted file mode 100644 index 48e5713ccb..0000000000 --- a/test/js/node/test/fixtures/fake-startcom-root-cert.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDjzCCAnegAwIBAgIJAIIPb0xPNcgKMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV -BAYTAklMMRYwFAYDVQQKDA1TdGFydENvbSBMdGQuMSswKQYDVQQLDCJTZWN1cmUg -RGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDDCBTdGFydENvbSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAgFw0xODExMTYxODQyMjFaGA8yMjkyMDgz -MDE4NDIyMVowfTELMAkGA1UEBhMCSUwxFjAUBgNVBAoMDVN0YXJ0Q29tIEx0ZC4x -KzApBgNVBAsMIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxKTAn -BgNVBAMMIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1mZ/bufFVPGxKagC8W7hpBephIFIZw9K -bX6ska2PXZkyqRToU5UFgTYhdBwkCNJMwaYfTqLpc9y/goRpVlLSAFk/t4W6Z0w1 -b80T149XvmelAUQTBJR49kkYspN+Jw627pf8tmmSkG5qcHykB9gr/nvoTpXtlk2t -um/SL3BQSqXmqffBM/6VpFvGAB2FNWGQUIxj55e/7p9Opjo8yS4s2lnbovV6OSJ/ -CnqEYt6Ur4kdLwVOLKlMKRG3H4q65UXfoVpE+XhFgKADAiMZySSGjBsbjF6ADPnP -/zNklvYwcM0phtQivmkKEcSOvJNsZodszYhoiwie5OknOo7Mqz9jqQIDAQABoxAw -DjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBrsLtF6MEMCWQF6YXP -DLw4friQhYzoB7w1W+fgksOOIyLyRmUEEA9X0FSfNW2a6KLmMtSoNYn3y5cLkmGr -+JE4U3ovvXDU8C3r09dynuHywcib4oFRaG8NKNqldUryO3abk+kbdxMvxQlA/NHb -33ABKPX7UTnTr6CexZ5Qr0ss62w0ELwxC3eVugJrVtDOmFt/yZF75lc0OgifK4Nj -dii7g+sQvzymIgdWLAIbbrc3r/NfymFgmTEMPY/M17QEIdr9YS1qAHmqA6vGvmBz -v2fCr+xrOQRzq+HO1atOmz8gOdtYJwDfUl2CWgJ2r8iMRsOTE7QgEl/+zpOM3fe+ -JU1b ------END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/fetch-and-log.mjs b/test/js/node/test/fixtures/fetch-and-log.mjs new file mode 100644 index 0000000000..d019d29aa2 --- /dev/null +++ b/test/js/node/test/fixtures/fetch-and-log.mjs @@ -0,0 +1,3 @@ +const response = await fetch(process.env.FETCH_URL); +const body = await response.text(); +console.log(body); diff --git a/test/js/node/test/fixtures/guess-hash-seed.js b/test/js/node/test/fixtures/guess-hash-seed.js deleted file mode 100644 index c6166450b4..0000000000 --- a/test/js/node/test/fixtures/guess-hash-seed.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; -function run_repeated(n, fn) { - const res = []; - for (let i = 0; i < n; i++) res.push(fn()); - return res; -} - -const INT_MAX = 0x7fffffff; - -// from src/js/collection.js -// key must be a signed 32-bit number! -function ComputeIntegerHash(key/*, seed*/) { - let hash = key; - hash = hash ^ 0/*seed*/; - hash = ~hash + (hash << 15); // hash = (hash << 15) - hash - 1; - hash = hash ^ (hash >>> 12); - hash = hash + (hash << 2); - hash = hash ^ (hash >>> 4); - hash = (hash * 2057) | 0; // hash = (hash + (hash << 3)) + (hash << 11); - hash = hash ^ (hash >>> 16); - return hash & 0x3fffffff; -} - -const kNofHashBitFields = 2; -const kHashShift = kNofHashBitFields; -const kHashBitMask = 0xffffffff >>> kHashShift; -const kZeroHash = 27; - -function string_to_array(str) { - const res = new Array(str.length); - for (let i = 0; i < str.length; i++) { - res[i] = str.charCodeAt(i); - } - return res; -} - -function gen_specialized_hasher(str) { - const str_arr = string_to_array(str); - return Function('seed', ` - var running_hash = seed; - ${str_arr.map((c) => ` - running_hash += ${c}; - running_hash &= 0xffffffff; - running_hash += (running_hash << 10); - running_hash &= 0xffffffff; - running_hash ^= (running_hash >>> 6); - running_hash &= 0xffffffff; - `).join('')} - running_hash += (running_hash << 3); - running_hash &= 0xffffffff; - running_hash ^= (running_hash >>> 11); - running_hash &= 0xffffffff; - running_hash += (running_hash << 15); - running_hash &= 0xffffffff; - if ((running_hash & ${kHashBitMask}) == 0) { - return ${kZeroHash}; - } - return running_hash; - `); -} - -// adapted from HashToEntry -function hash_to_bucket(hash, numBuckets) { - return (hash & ((numBuckets) - 1)); -} - -function time_set_lookup(set, value) { - const t1 = process.hrtime(); - for (let i = 0; i < 100; i++) { - set.has(value); - } - const t = process.hrtime(t1); - const secs = t[0]; - const nanos = t[1]; - return secs * 1e9 + nanos; -} - -// Prevent optimization of SetHas(). -%NeverOptimizeFunction(time_set_lookup); - -// Set with 256 buckets; bucket 0 full, others empty -const tester_set_buckets = 256; -const tester_set = new Set(); -let tester_set_treshold; -(function() { - // fill bucket 0 and find extra numbers mapping to bucket 0 and a different - // bucket `capacity == numBuckets * 2` - let needed = Math.floor(tester_set_buckets * 1.5) + 1; - let positive_test_value; - let negative_test_value; - for (let i = 0; true; i++) { - if (i > INT_MAX) throw new Error('i too high'); - if (hash_to_bucket(ComputeIntegerHash(i), tester_set_buckets) !== 0) { - negative_test_value = i; - break; - } - } - for (let i = 0; needed > 0; i++) { - if (i > INT_MAX) throw new Error('i too high'); - if (hash_to_bucket(ComputeIntegerHash(i), tester_set_buckets) === 0) { - needed--; - if (needed == 0) { - positive_test_value = i; - } else { - tester_set.add(i); - } - } - } - - // calibrate Set access times for accessing the full bucket / an empty bucket - const pos_time = - Math.min(...run_repeated(10000, time_set_lookup.bind(null, tester_set, - positive_test_value))); - const neg_time = - Math.min(...run_repeated(10000, time_set_lookup.bind(null, tester_set, - negative_test_value))); - tester_set_treshold = (pos_time + neg_time) / 2; - // console.log(`pos_time: ${pos_time}, neg_time: ${neg_time},`, - // `threshold: ${tester_set_treshold}`); -})(); - -// determine hash seed -const slow_str_gen = (function*() { - let strgen_i = 0; - outer: - while (1) { - const str = `#${strgen_i++}`; - for (let i = 0; i < 1000; i++) { - if (time_set_lookup(tester_set, str) < tester_set_treshold) - continue outer; - } - yield str; - } -})(); - -const first_slow_str = slow_str_gen.next().value; -// console.log('first slow string:', first_slow_str); -const first_slow_str_special_hasher = gen_specialized_hasher(first_slow_str); -let seed_candidates = []; -//var t_before_first_seed_brute = performance.now(); -for (let seed_candidate = 0; seed_candidate < 0x100000000; seed_candidate++) { - if (hash_to_bucket(first_slow_str_special_hasher(seed_candidate), - tester_set_buckets) == 0) { - seed_candidates.push(seed_candidate); - } -} -// console.log(`got ${seed_candidates.length} candidates`); -// after ${performance.now()-t_before_first_seed_brute} -while (seed_candidates.length > 1) { - const slow_str = slow_str_gen.next().value; - const special_hasher = gen_specialized_hasher(slow_str); - const new_seed_candidates = []; - for (const seed_candidate of seed_candidates) { - if (hash_to_bucket(special_hasher(seed_candidate), tester_set_buckets) == - 0) { - new_seed_candidates.push(seed_candidate); - } - } - seed_candidates = new_seed_candidates; - // console.log(`reduced to ${seed_candidates.length} candidates`); -} -if (seed_candidates.length != 1) - throw new Error('no candidates remaining'); -const seed = seed_candidates[0]; -console.log(seed); diff --git a/test/js/node/test/fixtures/icu-punycode-toascii.json b/test/js/node/test/fixtures/icu-punycode-toascii.json deleted file mode 100644 index 814f06e794..0000000000 --- a/test/js/node/test/fixtures/icu-punycode-toascii.json +++ /dev/null @@ -1,149 +0,0 @@ -[ - "This resource is focused on highlighting issues with UTS #46 ToASCII", - { - "comment": "Label with hyphens in 3rd and 4th position", - "input": "aa--", - "output": "aa--" - }, - { - "input": "a†--", - "output": "xn--a---kp0a" - }, - { - "input": "ab--c", - "output": "ab--c" - }, - { - "comment": "Label with leading hyphen", - "input": "-x", - "output": "-x" - }, - { - "input": "-†", - "output": "xn----xhn" - }, - { - "input": "-x.xn--nxa", - "output": "-x.xn--nxa" - }, - { - "input": "-x.β", - "output": "-x.xn--nxa" - }, - { - "comment": "Label with trailing hyphen", - "input": "x-.xn--nxa", - "output": "x-.xn--nxa" - }, - { - "input": "x-.β", - "output": "x-.xn--nxa" - }, - { - "comment": "Empty labels", - "input": "x..xn--nxa", - "output": "x..xn--nxa" - }, - { - "input": "x..β", - "output": "x..xn--nxa" - }, - { - "comment": "Invalid Punycode", - "input": "xn--a", - "output": null - }, - { - "input": "xn--a.xn--nxa", - "output": null - }, - { - "input": "xn--a.β", - "output": null - }, - { - "comment": "Valid Punycode", - "input": "xn--nxa.xn--nxa", - "output": "xn--nxa.xn--nxa" - }, - { - "comment": "Mixed", - "input": "xn--nxa.β", - "output": "xn--nxa.xn--nxa" - }, - { - "input": "ab--c.xn--nxa", - "output": "ab--c.xn--nxa" - }, - { - "input": "ab--c.β", - "output": "ab--c.xn--nxa" - }, - { - "comment": "CheckJoiners is true", - "input": "\u200D.example", - "output": null - }, - { - "input": "xn--1ug.example", - "output": null - }, - { - "comment": "CheckBidi is true", - "input": "يa", - "output": null - }, - { - "input": "xn--a-yoc", - "output": null - }, - { - "comment": "processing_option is Nontransitional_Processing", - "input": "ශ්‍රී", - "output": "xn--10cl1a0b660p" - }, - { - "input": "نامه‌ای", - "output": "xn--mgba3gch31f060k" - }, - { - "comment": "U+FFFD", - "input": "\uFFFD.com", - "output": null - }, - { - "comment": "U+FFFD character encoded in Punycode", - "input": "xn--zn7c.com", - "output": null - }, - { - "comment": "Label longer than 63 code points", - "input": "x01234567890123456789012345678901234567890123456789012345678901x", - "output": "x01234567890123456789012345678901234567890123456789012345678901x" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901†", - "output": "xn--x01234567890123456789012345678901234567890123456789012345678901-6963b" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" - }, - { - "input": "x01234567890123456789012345678901234567890123456789012345678901x.β", - "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--nxa" - }, - { - "comment": "Domain excluding TLD longer than 253 code points", - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x" - }, - { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" - }, - { - "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.β", - "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--nxa" - } -] diff --git a/test/js/node/test/fixtures/icu/localizationData-v74.2.json b/test/js/node/test/fixtures/icu/localizationData-v74.2.json index 65671ba5ac..1cca79672a 100644 --- a/test/js/node/test/fixtures/icu/localizationData-v74.2.json +++ b/test/js/node/test/fixtures/icu/localizationData-v74.2.json @@ -20,14 +20,14 @@ "dateTimeFormats": { "en": "7/25/1980, 1:35:33 AM", "zh": "1980/7/25 01:35:33", - "hi": "25/7/1980, 1:35:33 am", + "hi": "25/7/1980, पू 1:35:33", "es": "25/7/1980, 1:35:33", "fr": "25/07/1980 01:35:33", - "ar": "٢٥‏/٧‏/١٩٨٠، ١:٣٥:٣٣ ص", + "ar": "25‏/7‏/1980، 1:35:33 ص", "bn": "২৫/৭/১৯৮০, ১:৩৫:৩৩ AM", "ru": "25.07.1980, 01:35:33", "pt": "25/07/1980, 01:35:33", - "ur": "25/7/1980، 1:35:33 AM", + "ur": "25/7/1980، 1:35:33 ق.د.", "id": "25/7/1980, 01.35.33", "de": "25.7.1980, 01:35:33", "ja": "1980/7/25 1:35:33", @@ -41,7 +41,7 @@ "hi": "25/7/1980", "es": "25/7/1980", "fr": "25/07/1980", - "ar": "٢٥‏/٧‏/١٩٨٠", + "ar": "25‏/7‏/1980", "bn": "২৫/৭/১৯৮০", "ru": "25.07.1980", "pt": "25/07/1980", @@ -77,7 +77,7 @@ "hi": "2,75,760.913", "es": "275.760,913", "fr": "275 760,913", - "ar": "٢٧٥٬٧٦٠٫٩١٣", + "ar": "275,760.913", "bn": "২,৭৫,৭৬০.৯১৩", "ru": "275 760,913", "pt": "275.760,913", @@ -113,7 +113,7 @@ "hi": "5,86,920.617 घंटे पहले", "es": "hace 586.920,617 horas", "fr": "il y a 586 920,617 heures", - "ar": "قبل ٥٨٦٬٩٢٠٫٦١٧ ساعة", + "ar": "قبل 586,920.617 ساعة", "bn": "৫,৮৬,৯২০.৬১৭ ঘন্টা আগে", "ru": "586 920,617 часа назад", "pt": "há 586.920,617 horas", diff --git a/test/js/node/test/fixtures/import-require-cycle/a.js b/test/js/node/test/fixtures/import-require-cycle/a.js new file mode 100644 index 0000000000..595a5085cf --- /dev/null +++ b/test/js/node/test/fixtures/import-require-cycle/a.js @@ -0,0 +1 @@ +module.exports.b = require('./b.js'); diff --git a/test/js/node/test/fixtures/import-require-cycle/b.js b/test/js/node/test/fixtures/import-require-cycle/b.js new file mode 100644 index 0000000000..869be25731 --- /dev/null +++ b/test/js/node/test/fixtures/import-require-cycle/b.js @@ -0,0 +1 @@ +module.exports.a = require('./a.js'); diff --git a/test/js/node/test/fixtures/import-require-cycle/c.js b/test/js/node/test/fixtures/import-require-cycle/c.js new file mode 100644 index 0000000000..39099ad760 --- /dev/null +++ b/test/js/node/test/fixtures/import-require-cycle/c.js @@ -0,0 +1,3 @@ +const obj = require('./b.js'); + +console.log('cycle equality', obj.a.b === obj); diff --git a/test/js/node/test/fixtures/import-require-cycle/preload.mjs b/test/js/node/test/fixtures/import-require-cycle/preload.mjs new file mode 100644 index 0000000000..81eed70009 --- /dev/null +++ b/test/js/node/test/fixtures/import-require-cycle/preload.mjs @@ -0,0 +1,7 @@ +import * as mod from "module"; + +mod.registerHooks({ + load(url, context, nextLoad) { + return nextLoad(url, context); + }, +}); diff --git a/test/js/node/test/fixtures/inspect-worker/index.js b/test/js/node/test/fixtures/inspect-worker/index.js new file mode 100644 index 0000000000..b0f883ef4b --- /dev/null +++ b/test/js/node/test/fixtures/inspect-worker/index.js @@ -0,0 +1,3 @@ +const { Worker } = require('worker_threads'); + +new Worker(__dirname + '/worker.js', { type: 'module' }); diff --git a/test/js/node/test/fixtures/inspect-worker/worker.js b/test/js/node/test/fixtures/inspect-worker/worker.js new file mode 100644 index 0000000000..9729bd7b41 --- /dev/null +++ b/test/js/node/test/fixtures/inspect-worker/worker.js @@ -0,0 +1,4 @@ +console.log("worker thread"); +process.on('exit', () => { + console.log('Worker1: Exiting...'); +}); diff --git a/test/js/node/test/fixtures/keys/Makefile b/test/js/node/test/fixtures/keys/Makefile index 3339f4b912..ffb84ec353 100644 --- a/test/js/node/test/fixtures/keys/Makefile +++ b/test/js/node/test/fixtures/keys/Makefile @@ -40,6 +40,14 @@ all: \ ec-cert.pem \ ec.pfx \ fake-cnnic-root-cert.pem \ + intermediate-ca-cert.pem \ + intermediate-ca-key.pem \ + leaf-from-intermediate-cert.pem \ + leaf-from-intermediate-key.pem \ + non-trusted-intermediate-ca-cert.pem \ + non-trusted-intermediate-ca-key.pem \ + non-trusted-leaf-from-intermediate-cert.pem \ + non-trusted-leaf-from-intermediate-key.pem \ rsa_private.pem \ rsa_private_encrypted.pem \ rsa_private_pkcs8.pem \ @@ -236,6 +244,102 @@ fake-startcom-root-cert.pem: fake-startcom-root.cnf \ echo '01' > fake-startcom-root-serial touch fake-startcom-root-database.txt + +intermediate-ca-key.pem: + openssl genrsa -out intermediate.key 2048 + +intermediate-ca-cert.pem: intermediate-ca-key.pem + openssl req -new \ + -sha256 \ + -nodes \ + -key intermediate.key \ + -subj "/C=US/ST=CA/L=SF/O=NODEJS/CN=NodeJS-Test-Intermediate-CA" \ + -out test-intermediate-ca.csr + + openssl x509 -req \ + -extensions v3_ca \ + -extfile fake-startcom-root.cnf \ + -in test-intermediate-ca.csr \ + -CA fake-startcom-root-cert.pem \ + -CAkey fake-startcom-root-key.pem \ + -CAcreateserial \ + -out intermediate-ca.pem \ + -days 99999 \ + -sha256 + rm -f test-intermediate-ca.csr + +leaf-from-intermediate-key.pem: + openssl genrsa -out leaf-from-intermediate-key.pem 2048 + +leaf-from-intermediate-cert.pem: leaf-from-intermediate-key.pem + openssl genrsa -out leaf-from-intermediate-key.pem 2048 + openssl req -new \ + -sha256 \ + -nodes \ + -key leaf-from-intermediate-key.pem \ + -addext "subjectAltName = DNS:localhost" \ + -subj "/C=US/ST=CA/L=SF/O=NODEJS/CN=localhost" \ + -out leaf-from-intermediate-cert.csr + openssl x509 -req \ + -in leaf-from-intermediate-cert.csr \ + -CA intermediate-ca.pem \ + -CAkey intermediate.key \ + -CAcreateserial \ + -out leaf-from-intermediate-cert.pem \ + -days 99999 \ + -copy_extensions copy \ + -sha256 + + rm -f leaf-from-intermediate-cert.csr + +non-trusted-intermediate-ca-key.pem: + openssl genrsa -out non-trusted-intermediate.key 2048 + +non-trusted-intermediate-ca-cert.pem: non-trusted-intermediate-ca-key.pem + openssl req -new \ + -sha256 \ + -nodes \ + -key non-trusted-intermediate.key \ + -subj "/C=US/ST=CA/L=SF/O=NODEJS/CN=NodeJS-Non-Trusted-Test-Intermediate-CA" \ + -out non-trusted-test-intermediate-ca.csr + + openssl x509 -req \ + -extensions v3_ca \ + -extfile fake-startcom-root.cnf \ + -in non-trusted-test-intermediate-ca.csr \ + -passin "pass:password" \ + -CA ca1-cert.pem \ + -CAkey ca1-key.pem \ + -CAcreateserial \ + -out non-trusted-intermediate-ca.pem \ + -days 99999 \ + -sha256 + rm -f non-trusted-test-intermediate-ca.csr + +non-trusted-leaf-from-intermediate-key.pem: + openssl genrsa -out non-trusted-leaf-from-intermediate-key.pem 2048 + +non-trusted-leaf-from-intermediate-cert.pem: non-trusted-leaf-from-intermediate-key.pem + openssl genrsa -out non-trusted-leaf-from-intermediate-key.pem 2048 + openssl req -new \ + -sha256 \ + -nodes \ + -key non-trusted-leaf-from-intermediate-key.pem \ + -addext "subjectAltName = DNS:localhost" \ + -subj "/C=US/ST=CA/L=SF/O=NODEJS/CN=localhost" \ + -out non-trusted-leaf-from-intermediate-cert.csr + openssl x509 -req \ + -in non-trusted-leaf-from-intermediate-cert.csr \ + -CA non-trusted-intermediate-ca.pem \ + -CAkey non-trusted-intermediate.key \ + -CAcreateserial \ + -out non-trusted-leaf-from-intermediate-cert.pem \ + -days 99999 \ + -copy_extensions copy \ + -sha256 + + rm -f non-trusted-leaf-from-intermediate-cert.csr + # # agent1 is signed by ca1. # diff --git a/test/js/node/test/fixtures/keys/ca1-cert.srl b/test/js/node/test/fixtures/keys/ca1-cert.srl index 79dbb4bd80..f4de097137 100644 --- a/test/js/node/test/fixtures/keys/ca1-cert.srl +++ b/test/js/node/test/fixtures/keys/ca1-cert.srl @@ -1 +1 @@ -147D36C1C2F74206DE9FAB5F2226D78ADB00A426 +147D36C1C2F74206DE9FAB5F2226D78ADB00A428 diff --git a/test/js/node/test/fixtures/keys/fake-startcom-root-cert.cer b/test/js/node/test/fixtures/keys/fake-startcom-root-cert.cer new file mode 100644 index 0000000000..117acd21b7 Binary files /dev/null and b/test/js/node/test/fixtures/keys/fake-startcom-root-cert.cer differ diff --git a/test/js/node/test/fixtures/keys/intermediate-ca.pem b/test/js/node/test/fixtures/keys/intermediate-ca.pem new file mode 100644 index 0000000000..c4a3807972 --- /dev/null +++ b/test/js/node/test/fixtures/keys/intermediate-ca.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEOTCCAyGgAwIBAgIULe6EHUBNm9nZz+fYRZx1P8uqmGwwDQYJKoZIhvcNAQEL +BQAwfTELMAkGA1UEBhMCSUwxFjAUBgNVBAoMDVN0YXJ0Q29tIEx0ZC4xKzApBgNV +BAsMIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxKTAnBgNVBAMM +IFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MCAXDTI1MDIyMTIyMTYx +N1oYDzIyOTgxMjA2MjIxNjE3WjBeMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0Ex +CzAJBgNVBAcMAlNGMQ8wDQYDVQQKDAZOT0RFSlMxJDAiBgNVBAMMG05vZGVKUy1U +ZXN0LUludGVybWVkaWF0ZS1DQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKfGhM1vXISvBuEJv4yapacu1CFnH9hQ6Z7e8p1kjMjaSg+NSvofPeb6byel +Jk7GI9wRN4ZQISpKNxvQAjyc9RqkAwUDPY9KEp38PSQFU4osqvJDP4zf2dn0Hl55 +4DW22JzaWdwGgvq0admVwUBMnly4fVGBuxvy1m/j5wM6DHoSbC0Kgs13P2TpaqRT +jz7jzN5YaT16M3kTDKVcTQGzZOCro0JF+V4xIDiOV9v9Cy4F6FRuksHx/e7gWXSF +qaHqzblr9k/c8/3md5aBwHeUGJHe1+U/hhfE4D8IgG3ZdwNFI9KH5Zc8KfGTgr6s +fgbpnNg7p9d5VJNOOM4So8ybig8CAwEAAaOBzTCByjAMBgNVHRMEBTADAQH/MB0G +A1UdDgQWBBR6olPWoViHQBOxuAyYPRUSGaoEYDCBmgYDVR0jBIGSMIGPoYGBpH8w +fTELMAkGA1UEBhMCSUwxFjAUBgNVBAoMDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsM +IlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxKTAnBgNVBAMMIFN0 +YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggkAgg9vTE81yAowDQYJKoZI +hvcNAQELBQADggEBAC7nBG4JxrSFT/mJlCJxeHfFQj3xqduYePWK5H/h+buuX6OW +pjMA8se2SjQUfVn81GAtNxb1kX8o9HjmaTvkx8bq6iuF9oyJh96N22Hl3kfWXX6H +jy74Ur/pq73gpC90Xx8/DALpAYr9vKOKJM7DHWW9iuksRRvM1yh8kZagO0ewI8xU +I9DLzl6+Zu6ZChosMlIn7yGdXB3Wi5mO+1fN+ryFlOVfTurzeinDbLm4xHb6pLnP +x3VL1kKzQurUcvQvaIT3x3vd/FP+O7B+pWNyUE7HXZ9J4E2maUC+q81cpgAiCFoN +ks7RFmz1z2myhB8opEpgRFYu6lxjCtHsr+meLjo= +-----END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/keys/intermediate.key b/test/js/node/test/fixtures/keys/intermediate.key new file mode 100644 index 0000000000..222d393a9e --- /dev/null +++ b/test/js/node/test/fixtures/keys/intermediate.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCnxoTNb1yErwbh +Cb+MmqWnLtQhZx/YUOme3vKdZIzI2koPjUr6Hz3m+m8npSZOxiPcETeGUCEqSjcb +0AI8nPUapAMFAz2PShKd/D0kBVOKLKryQz+M39nZ9B5eeeA1ttic2lncBoL6tGnZ +lcFATJ5cuH1Rgbsb8tZv4+cDOgx6EmwtCoLNdz9k6WqkU48+48zeWGk9ejN5Ewyl +XE0Bs2Tgq6NCRfleMSA4jlfb/QsuBehUbpLB8f3u4Fl0hamh6s25a/ZP3PP95neW +gcB3lBiR3tflP4YXxOA/CIBt2XcDRSPSh+WXPCnxk4K+rH4G6ZzYO6fXeVSTTjjO +EqPMm4oPAgMBAAECggEAAMP0GSfX6TcPNfmgaRjPhqq9BwX8bDU6S6JCwxsRVV1B +lz6Sx/9affJIjYrAWP2objmZ4j/9Vr8N70+MoxAoQh3bcatpHX0+BoB/Gun3TpsT +kJVj9dWTnd3yQYYW0sfpxxVr8YgKEvC9xuNbBVsUIeIpmDSaUO9TsSD+DdK2+duX +wKPjCe097669ZG994GP9ilG6FdfIlVNWHWPExmFgbx0ydXr97nDuurt72HnqCVRR +95g9SNAbkadUVj7iTSVovuaIQpQY4BMFICsGGRo10mMFGTzpAUwsl6OVZTUZXaST +dg/Wl8ZD98CucVFmk546pJrfPDvk+qLqt0hlkXA5mQKBgQDrqPCNzz/VhsIlTmuO +Dgmf4q9/hglR8JKjMQTuEXLGAhA09ZZrhKsGYSkciXEzmlL5mGZX+83Ss+ns8nI7 +21e6ZYm5hokltVbZ2Of2xGyeZ0SZ22QwIm4Eg2MmEpmyXAMTKAfvuvfQW1dC0UXG +JEiRBYq3Chxv82ExmlkU5gZNIwKBgQC2QaCnPVV/VkwF0912lto8IRpwgZ0Jrj4b +xqKTCc7oFNzd4Ua/I0W9qPqR1ORyVpq0li7cjHDmFWCZZMbCgy7+g5eclaZ3qWZZ +Faj4rpv7y7ODKz2W2cmug9fWrrtsr96ohW1rfVn5racbHKAsT4f+RB+Gi1NK6aWp +tOmh4MRMJQKBgQDLSk5RluJTOc/LTO39emCVG4EXejIaDHUC8Ct3j3e6FleSx/S9 +xZGfjDth0bLkuBEyHWTUK3UveWKns7IVrq7sLeF0OPmgnOFSRgo81s94ik8khpzT +5S+RFyJ12n/Z3AQPB25pQJm8lL8e9dbCCdTLvcMfCUrkzEgg+Sw1mgT/jwKBgQCM +7xbB/CW/AAZtgzV/3IsJcDe3xCKhN8IDTIiu1yjOQkPAt9EzQJ1PWfnZBx1YZSvg +dTnrhhZPdTxroYgpJbQTT8LPbNF7Ot1QCfXNx4gLH6vCxI8ttV/FuWIQOrHoC99L +xVGlixsmfWf5CRu66A0rS5ZtPhO8nAxkvOblLJ/emQKBgQCQkhBrZTDwgD4W6yxe +juo/H/y6PMD4vp68zk/GmuV7mzHpYg18+gGAI57dQoxWjjMxxhkB8WKpnEkXXiva +5YHq4ARUhXnPuNckvnOBj9jjy8HMeDKTPfZ6frv+B9i1y0N3ArerhPx44zCFpllH +BlVhzBa52wYAtbjg291+/G1ndw== +-----END PRIVATE KEY----- diff --git a/test/js/node/test/fixtures/keys/leaf-from-intermediate-cert.pem b/test/js/node/test/fixtures/keys/leaf-from-intermediate-cert.pem new file mode 100644 index 0000000000..8c12d33c59 --- /dev/null +++ b/test/js/node/test/fixtures/keys/leaf-from-intermediate-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIUPgpDrWcCOmjk4xOAkLpxa7UTx/4wDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjEPMA0G +A1UECgwGTk9ERUpTMSQwIgYDVQQDDBtOb2RlSlMtVGVzdC1JbnRlcm1lZGlhdGUt +Q0EwIBcNMjUwMjIxMjIxNjUyWhgPMjI5ODEyMDYyMjE2NTJaMEwxCzAJBgNVBAYT +AlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCU0YxDzANBgNVBAoMBk5PREVKUzES +MBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAnnWYLNbVnE2veKzF28rarJh0En4Rd5+1ZwHp7+iP2gjEVmjBaSGK/F80MV9l +S/wtZskUoZH0aKwiq9ly6Jp9IETte9Tk1Td6jTUeG8Vs9N6zoZcXM2Q359xbA+0X +YzvHwD6TM5LQ6l3RKhJT2BRNz0oOCVQGHGepbcLbX99E3yXW0yXvZKAIcZY0NEk2 +AZ1eDz7QAhdPQ6W8QuYjlqOa+wmxqzVb3RReMg3zrL9jfd4AgCT9IN7HMB0FkQys +y78EUHa12wlJkzHzz9N8+Qjt0537LjDpBuUBgnPn7Ukvz1kzD6q8a/dbB2RIbfVK +7o0I/P9hJuXPhRpZQeDRQmDt+QIDAQABo1gwVjAUBgNVHREEDTALgglsb2NhbGhv +c3QwHQYDVR0OBBYEFJHfQLpEP+M7+PYoxk/bY1vuDv/4MB8GA1UdIwQYMBaAFHqi +U9ahWIdAE7G4DJg9FRIZqgRgMA0GCSqGSIb3DQEBCwUAA4IBAQCXckUku5JZiXSb +qvlFH1JS7/SVeugquYZyI+boIzS2ykrLBkCVCbg6dD75Nu5VlcEGq4UNlY7vdfhk +wG/jHNe6Hm36Lm2vbwH3z21IIGZlkw4cbNzdeT5WQuQNoembtbaZSsE7s1Hs052l +kVJnq0ZJ7YgO54/0C9mE7dqhWHHWm9wPUC4emucqCKYcu1M9/onZgjjmAh39G473 +1qlWuTacywQHHCg8B0w+iZlV1rJ93dTyxJvg+fgmQj2FqBNqOXu6ojhOWHt62D3Y +55zXFoUqToY6kgF+e9Rkn2vbZsSQO+cXSKVyRjnfIOCC4zO37yl31q02ouVv1Uct +ubqxlcPA +-----END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/keys/leaf-from-intermediate-key.pem b/test/js/node/test/fixtures/keys/leaf-from-intermediate-key.pem new file mode 100644 index 0000000000..4d074b9e66 --- /dev/null +++ b/test/js/node/test/fixtures/keys/leaf-from-intermediate-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCedZgs1tWcTa94 +rMXbytqsmHQSfhF3n7VnAenv6I/aCMRWaMFpIYr8XzQxX2VL/C1myRShkfRorCKr +2XLomn0gRO171OTVN3qNNR4bxWz03rOhlxczZDfn3FsD7RdjO8fAPpMzktDqXdEq +ElPYFE3PSg4JVAYcZ6ltwttf30TfJdbTJe9koAhxljQ0STYBnV4PPtACF09DpbxC +5iOWo5r7CbGrNVvdFF4yDfOsv2N93gCAJP0g3scwHQWRDKzLvwRQdrXbCUmTMfPP +03z5CO3TnfsuMOkG5QGCc+ftSS/PWTMPqrxr91sHZEht9UrujQj8/2Em5c+FGllB +4NFCYO35AgMBAAECggEACIfP4A0WPZaEjWhus+cLJ+rCp+qzxcb6KPAWUBkq4lvh +tv2neOGKhgzZhlVqgoFST+PgGZUeDWMD8FCx4hIMDahMSSP0SEK29SJgizHxDEsv +bDHyOKzq4g9vsmnJfij+F0w/GDINj2pqy9sl+p5YNII5+HhWpmGRwlQQw4vlXSZq +hcubO1DyL/3FL0gVMHUZex86QJ9cYXkf++omaFNPaOsiKbZu7Whtg4rxJOBw38FD +/fX4U6SQwSxI6ffxFbmGvSBAQW4333Qvbs0xZnusKrcaKNQ3kCoQ7+cgyDogwSAE +TQN1mqPynGlMmTW4KyyR1/W0jpQEW+pll2DNCqHb8QKBgQDONX8QXu2mp/5qjXJK +Sa1orgqneadbWiUfq+6vWEIwAWbcUYGqgzUNa9OeK8jV5hEsCJOrfPvhKYdyVrfr +cu8mLtQFQLZzTlaEyX4a8Euk2xlHIYG7/giEnBugdHcHu9MV7TLRFzunc5Y4cA4W +3crScf/gl+LDO3TZ5E3ZHu4u8QKBgQDEuIagHlhcuyEfHUPRJk6ZXexlkQ383f3/ +g1aqWQxxPnlZuo/wFyxVl7YP5VNELOsiCQHm2efk+8dx0Fc8jzuafp8iSnSOJnNM +7C9K5JcbkxsJxArx1Z2ZMPfFM40Nw5kFYNCPhsuzZ/w+/eOe2EyFEZMkWdH5lMpw +Y6GvxiS/iQKBgB6WLs/F1OhoeMNjUbWVMiSZ1Di9Qca6G1GUViYqKD8ophI+AMbD +CYaBHPWUNwkLRDbM2uKP+miOmWmrVUKWXMTEI2zYCXgXAZxWqt7iD8ZXPWugm7a/ +2pGY+jwVqmY6RPg2o9gB4zZWXcznSh+4LFKE2Fh/DwK4ef+r7qQrA1dxAoGAdIEI +EfoGwNx+cCvnxw0VzZSndTtj+lcKn3GMORTF3qduPOrVZg6DTimsRFu/ZYfotV56 +RtrUkHNgmhIWKCJ33TaSTj+kKa+x52OVWphouYb0o2L8TF8Dl/89LggqyHUHwfyl +Z+sf5p9172RzktZs8v4Gk6eySEqLXeZTkoMZrmkCgYEAg8QV0rE1GprYoL02DiMT +/KlRyOUGawz559Rr5Ufdrm/SA37Yhyp/eADq1jrkpoL0uBd4YsqOFAtkCofxnI9i +BonK/T1JV1+wDnXYCU9Tis/d043/vCR4RVXQGfucmrPxjuObXCu5c8Q0DzpzLG3u +HmotaQ9Z3Wdd9PaX4le87R8= +-----END PRIVATE KEY----- diff --git a/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.pem b/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.pem new file mode 100644 index 0000000000..d735bfc177 --- /dev/null +++ b/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIESTCCAzGgAwIBAgIUFH02wcL3Qgben6tfIibXitsApCgwDQYJKoZIhvcNAQEL +BQAwejELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjEPMA0G +A1UECgwGSm95ZW50MRAwDgYDVQQLDAdOb2RlLmpzMQwwCgYDVQQDDANjYTExIDAe +BgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMCAXDTI1MDIyNzA4MTczM1oY +DzIyOTgxMjEyMDgxNzMzWjBqMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExCzAJ +BgNVBAcMAlNGMQ8wDQYDVQQKDAZOT0RFSlMxMDAuBgNVBAMMJ05vZGVKUy1Ob24t +VHJ1c3RlZC1UZXN0LUludGVybWVkaWF0ZS1DQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMH8MfKXtkBMn58gJVCwe2w/XOl9rNK0M348KFcYTStC2ta0 +pwaB4ax7NeXs/xCDqtbuweZ0SLcS/nAOP9KQHN+fNSiXQ0gnHh23rZRri9VCvLWE +5mGle2yjBApz7JERLW7gZX1Xtw/X5Qt9CtIYVKf7rGTgkq0kSvJQf6DhJ8e68HwG +EQCp8ZmPQTFhIgzB35wYTgeKTU3uvQAYsAIw9fC5Vta8U9uU0VyN7mFxsoMXm4/u +prk9L4AYSOFIV+njTd8xL+puSfZSKQA8yLcZ1LeRkAZo3RjUcEUPRDdLxB1UAZvh +LYcJggWmx7799MZOsF1u9d2wR9HJ1Nzg3+IJiW0CAwEAAaOB1DCB0TAMBgNVHRME +BTADAQH/MB0GA1UdDgQWBBR9aYwxOpYpUe2jMoN0MAqeG4A8GzCBoQYDVR0jBIGZ +MIGWoX6kfDB6MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExCzAJBgNVBAcMAlNG +MQ8wDQYDVQQKDAZKb3llbnQxEDAOBgNVBAsMB05vZGUuanMxDDAKBgNVBAMMA2Nh +MTEgMB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmeCFEqxbI39an0NLfyr +35xLDpLGrQIpMA0GCSqGSIb3DQEBCwUAA4IBAQDADBpifaPV4jRtSefetMnhxxwj +tPlLXRWqEJpJy+nHYJJdwQHxFHVoZSPinGpYpECCV73Gkh/rMKa+cvR4dBBIK6DP +Bl1IQNP4Jr90z9c0T/zzUxVXE4iwcv2/Vg5OvVHU3z5gW4Mk3R4Rb+69UWHB1z8D +41sm9w4u30vKGJrkdQ5ZLtfRLonncwLQexTlj1k/8VRytP4S9uIAmXwQpEPZxsto +pRcMO2aWW0PvDzk7WPU+ZKnf1RC+pQx+PPH1/ZfyXHy7njJKZ04plIdTA/ah9pPw +Bl++VCO7LSwDz+FlmuHnxc2LMR2EIRiNV03ooSc5XGGhIOKLl6+nMPQ0dlta +-----END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.srl b/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.srl new file mode 100644 index 0000000000..52098411fb --- /dev/null +++ b/test/js/node/test/fixtures/keys/non-trusted-intermediate-ca.srl @@ -0,0 +1 @@ +78A88418149F0BFCEC38DC14D085BA43D36090F0 diff --git a/test/js/node/test/fixtures/keys/non-trusted-intermediate.key b/test/js/node/test/fixtures/keys/non-trusted-intermediate.key new file mode 100644 index 0000000000..54b73ef5ff --- /dev/null +++ b/test/js/node/test/fixtures/keys/non-trusted-intermediate.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDB/DHyl7ZATJ+f +ICVQsHtsP1zpfazStDN+PChXGE0rQtrWtKcGgeGsezXl7P8Qg6rW7sHmdEi3Ev5w +Dj/SkBzfnzUol0NIJx4dt62Ua4vVQry1hOZhpXtsowQKc+yRES1u4GV9V7cP1+UL +fQrSGFSn+6xk4JKtJEryUH+g4SfHuvB8BhEAqfGZj0ExYSIMwd+cGE4Hik1N7r0A +GLACMPXwuVbWvFPblNFcje5hcbKDF5uP7qa5PS+AGEjhSFfp403fMS/qbkn2UikA +PMi3GdS3kZAGaN0Y1HBFD0Q3S8QdVAGb4S2HCYIFpse+/fTGTrBdbvXdsEfRydTc +4N/iCYltAgMBAAECggEALR4V1OVd1Xss1gMRQsDlV/Itzz20dEZGwrnFrSohCqqQ +QQc/4MbVIPuAN/PFCEeDdN2PuiS6I+B2TsQ1qmjr2kQKhmAWHUJB4ioOJHrWCVou +D27zcWsed5A7uJ2pPD1ZSpRE7p/32ya85kzlNyPDDtX9jPHhk4UhLFY2NQohKTYF +CM2+YL6V8x2Kq9OOjGxPrX3t5H0cgVW7f+mMwhCSevJQAoLWO7cNbbN/fWHEK0jn +ovHkpmK7dWejWN8MYMQOhmIuUV54aLIKoNLEAhnFj70/36I/GMUSQf+rCjjQtLXb +lmNiKF33+3L6ti9HdcznhJujtMjiAXloRkESKcYPoQKBgQDoKO9wj7ZUvapt7ZnD +9ALwkVpxPPCA7rDdu9DmEmXt8Zf3pVCaw1K2qPWM1iAoL6/AZDPs2E1nJGsmDNYv +wMPt09TsZTURKvQYfdFs0uZPcTCJAXg36+dgxXq1OUNirB7Z+F1QPE3EHZT5AaPc +vxRfA4RyJ+DcfMFzUcjePd2MTQKBgQDV57bQKf5wHkWCLVl/ZJB+hy1futN9In6u +n0UeqSK+8m7Go8rPvNFlTeY6/lz/bm58u0mJFKd7vNQs+l7Y1DitC7BLItNwtcuW +OEnhltbhry6i/9lieF607kwq9sNTVpp+iROF1BRmeDh3d3ByBa9Y9HSjfMPUgy6r +Tb6lgMgBoQKBgDmL9BYtuV92CCnpjITzFkt1bDrHhUIgaHz+EkEFbHi3uxiqxLko +E3etl/hKF3x+nY0OCYT69OzNLTYoVmtN2AM6z/us9qODxy/O+DuGZ4pnn0VGtPr/ +ocHuEYWcZSSvT5JuKws5d3lWb9ftXSXZw33tzEXTtrxQvE8OhcD5CtK9AoGBAMk0 +kqOwPKOd9egDXGIWaEx8PtQDWpgkcGE1c8Dpe8N9K3Ix874AcD8ITX5EcZnbeJZf +XUZSZVBhSHuebsUqqr0rd4LVmWo1tvDwtZ47UpkrPYUZgJO9gehTFtZ7EzQ7DEvm +CLUjzqSshQDrGpxGeLAGEgkOfO5TDv0XvjLTtk7BAoGBAM9ObVMPg+RhnVUY5oNT +2A+Qq/3sitcbaJ2JKCjJEhttF0fF+0VYXf8c1YNE1AOfA/YnEazfCvPEOVmXGAeq +iKf0FohQ1+dh9ShOK5tcR3jmMzrCwBJFlqjX942m/8FFg6B1za8nrrkSnWNCbJi5 +rmSv7B4llshgzTeEKqgM6GX1 +-----END PRIVATE KEY----- diff --git a/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-cert.pem b/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-cert.pem new file mode 100644 index 0000000000..66de118525 --- /dev/null +++ b/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIUeKiEGBSfC/zsONwU0IW6Q9NgkPAwDQYJKoZIhvcNAQEL +BQAwajELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjEPMA0G +A1UECgwGTk9ERUpTMTAwLgYDVQQDDCdOb2RlSlMtTm9uLVRydXN0ZWQtVGVzdC1J +bnRlcm1lZGlhdGUtQ0EwIBcNMjUwMjI3MDgxNzUwWhgPMjI5ODEyMTIwODE3NTBa +MEwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCU0YxDzANBgNV +BAoMBk5PREVKUzESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAshskMqfwX4J5IA0poqWfm2jF23rBDBFw5FTdZP/dbYrS +UCBOYqg5Jxgq4BxCnGq8ArGAQajOAAiwISK3h/WQ+XqaeEh5PmL4/dW3UZCvcR8I +NN7LCXPnQcvJu1G4VbBDm8WbkkmGJvy6553kA+8SXyeoEs3nXTqQWVINo/8alt6m +bRe2KA8FWgPrEUJgb+Vvl/z7a1V7PQSvWSuL0pBcj04tJQ5WrXAl72GI6eArJrM4 +Yl7Z08ZeGsSKAN+9aFnFyBfRmUeHgDTI9OQjw6FcwArCXZRmaX3CyGZJYgL6DAyf +ukyyRXUT8Ii37W306Vp6d1prqZ4A2fih2sfbcpeLrwIDAQABo1gwVjAUBgNVHREE +DTALgglsb2NhbGhvc3QwHQYDVR0OBBYEFAa6wwZ2tpzJdeCtsG0sUw7MpG39MB8G +A1UdIwQYMBaAFH1pjDE6lilR7aMyg3QwCp4bgDwbMA0GCSqGSIb3DQEBCwUAA4IB +AQBWyVgyhKnRomPa23axktq8/8RC7h6mSJEOW+uTlwam/TqnWQFJspwosStOQFu4 +pg7Ww9MtKJSr9/vxxsyvNaKH5ZNTtgqqlzfYzVLbfwOirNSx4Mp1izQ0G5mfx3Yj ++WEXarNaY8R0benqWMeArTFb9CdDcxvMcSdtkGrMXMuKXFN67zou8NQVkvGzc/tb +imS/Ur9goJYUPlg2xor+P09tiIT+pEG+bpjYZ0U/1D5lIjQYCmZiy9ECL3WBc4df +NKsJnlA2GZ4TXh2jFzQw3yZPSLCqNdy+9RdOB058wRYooaFYrOkRiUe9ZV5w1MW5 +mVuwUmrRSI79K26jdTav44PZ +-----END CERTIFICATE----- diff --git a/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-key.pem b/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-key.pem new file mode 100644 index 0000000000..cca4657598 --- /dev/null +++ b/test/js/node/test/fixtures/keys/non-trusted-leaf-from-intermediate-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyGyQyp/Bfgnkg +DSmipZ+baMXbesEMEXDkVN1k/91titJQIE5iqDknGCrgHEKcarwCsYBBqM4ACLAh +IreH9ZD5epp4SHk+Yvj91bdRkK9xHwg03ssJc+dBy8m7UbhVsEObxZuSSYYm/Lrn +neQD7xJfJ6gSzeddOpBZUg2j/xqW3qZtF7YoDwVaA+sRQmBv5W+X/PtrVXs9BK9Z +K4vSkFyPTi0lDlatcCXvYYjp4CsmszhiXtnTxl4axIoA371oWcXIF9GZR4eANMj0 +5CPDoVzACsJdlGZpfcLIZkliAvoMDJ+6TLJFdRPwiLftbfTpWnp3WmupngDZ+KHa +x9tyl4uvAgMBAAECggEAMKa1VpkFUjGjwJuX2fQAC0Wtdmyruw4wlk6QQ3yZEckv +9e89OjnVktZJL/rIP03wmZO/AzCHRP8ajZKcK6lqtptFAsJZTC9g8IWmk8NACVh+ +t2J8d9KPQyvVqTODdPS3Ix/xhR5MZO34aDh7BpARpqiAgtJ39sF+mMePLlMLAlbO +U7/u1cttplvgiBRWTIiisyl9O+G2OCre1CXacEqkZ8jYWTP7sLofGCXCpgjBVKgl +8q4ktgPlREMVD/QW78CIdrKuOdmzV42zSeFfPoZjUC3nLCdIALquPJyBSSZvDEeA +T+eWSaIm5JcSTBjxG0f9riLQdup2Gz5NjPALHUTxMQKBgQDq2jyr1g0BUMFAJTQR +6LraWcCOz+7l/oH6WuFGm7gUBf5yrdykeWvd8cSfwZRm2tzoxVu44+M05X3ORMHR +wPyckITG9kWndzcOXpEOSiaObfqmEuz5gkpyzaUs5c9AE4pMhzIKNnruavPbD9Hy +4AiLIT3ssjAL14/cjFuZTXl/dQKBgQDCJMxq0jf2rtVfrPrpEh8CyNu4sUQs8O5t +9u4cvjGmHCfFpcdvCjS7gLuAZeFww3qjiv4pM0K5b7rjY3CelB+jlF2TG+4Jxf6h +y/9iPSN98i2FT4Jxc02GYxsPa3mYAxykmqqvIkak+2omaJake2tCyjE49QrfGx0r +TivZnwn+EwKBgQDe0a4MjqqKG/cuB94uO7PEZLE4DfooRl9Fi6H+3tE4VjOC1Ifp +mLYJvk+CDyTgrTg4tL8AXV59GltRL5UAkGxbkxYWuyN87rPSs1BG0X1hVuEfXgdt +9vrxj0Dupx8KOT/WudJ1NBlQSTMSHSFhoMMaVbCt+KVzJtL8OkLR4Vqr3QKBgAy8 +MziSn58r6s1C4JanXKdnG5qq7ijwiQNnnkj+ZO1bjXRWopVzGvBtyl7qz/YArKvL +s05qkWbuoFjILhwI5WZqlhTPUTcM6N4eLpt4HTrmxvumsozUnnJBUAYb67cABUH6 +71VbrzylTVpFpBQYEHoqHz54PIVUFv6/OvskhphHAoGAJukr8k+rvxXIXOjvgE2O +9sf2h7YZoW2AKK3tHPlG7XCuIFZJKKhkh+cVRorg/Ws5LLF/5egf234sfeZzdrvP +O2TA/0Hf4mhaJhn53E/PLSLEDVTzORs1L+PfLrFptrP2Eq7iAnbTwaWnjMfAcsy2 +4ukRw65bBMLqv62KLTEZ5uk= +-----END PRIVATE KEY----- diff --git a/test/js/node/test/fixtures/module-mocking/basic.json b/test/js/node/test/fixtures/module-mocking/basic.json new file mode 100644 index 0000000000..2393cd01d4 --- /dev/null +++ b/test/js/node/test/fixtures/module-mocking/basic.json @@ -0,0 +1 @@ +{"foo":"bar"} diff --git a/test/js/node/test/fixtures/module-require/relative/subdir/relative-subdir.js b/test/js/node/test/fixtures/module-require/relative/subdir/relative-subdir.js new file mode 100644 index 0000000000..34eb71b3c6 --- /dev/null +++ b/test/js/node/test/fixtures/module-require/relative/subdir/relative-subdir.js @@ -0,0 +1 @@ +exports.value = 'relative subdir'; diff --git a/test/js/node/test/fixtures/packages/unrecognised-export-keys/index.js b/test/js/node/test/fixtures/packages/unrecognised-export-keys/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/js/node/test/fixtures/packages/unrecognised-export-keys/package.json b/test/js/node/test/fixtures/packages/unrecognised-export-keys/package.json new file mode 100644 index 0000000000..e3cef44544 --- /dev/null +++ b/test/js/node/test/fixtures/packages/unrecognised-export-keys/package.json @@ -0,0 +1,10 @@ +{ + "name": "pkg-with-unrecognised-export-keys", + "exports": { + ".": { + "default": "./index.js", + "FtLcAG": "./whatever.ext", + "types": "./index.d.ts" + } + } +} diff --git a/test/js/node/test/fixtures/permission/fs-read-loader.js b/test/js/node/test/fixtures/permission/fs-read-loader.js new file mode 100644 index 0000000000..aaef61e8ce --- /dev/null +++ b/test/js/node/test/fixtures/permission/fs-read-loader.js @@ -0,0 +1,15 @@ +const fs = require('node:fs') +const path = require('node:path') +const assert = require('node:assert'); + +{ + fs.readFileSync(__filename); + console.log('Read its own contents') // Should not throw +} +{ + const simpleLoaderPath = path.join(__dirname, 'simple-loader.js'); + fs.readFile(simpleLoaderPath, (err) => { + assert.ok(err.code, 'ERR_ACCESS_DENIED'); + assert.ok(err.permission, 'FileSystemRead'); + }); // Should throw ERR_ACCESS_DENIED +} \ No newline at end of file diff --git a/test/js/node/test/fixtures/permission/fs-read.js b/test/js/node/test/fixtures/permission/fs-read.js index fa4ea1207f..22f4c4184a 100644 --- a/test/js/node/test/fixtures/permission/fs-read.js +++ b/test/js/node/test/fixtures/permission/fs-read.js @@ -14,6 +14,16 @@ const blockedFolder = process.env.BLOCKEDFOLDER; const allowedFolder = process.env.ALLOWEDFOLDER; const regularFile = __filename; +// Guarantee the error message suggest the --allow-fs-read +{ + fs.readFile(blockedFile, common.expectsError({ + message: 'Access to this API has been restricted. Use --allow-fs-read to manage permissions.', + code: 'ERR_ACCESS_DENIED', + permission: 'FileSystemRead', + resource: path.toNamespacedPath(blockedFile), + })); +} + // fs.readFile { fs.readFile(blockedFile, common.expectsError({ diff --git a/test/js/node/test/fixtures/permission/fs-write.js b/test/js/node/test/fixtures/permission/fs-write.js index 0c0ec72602..590df0b658 100644 --- a/test/js/node/test/fixtures/permission/fs-write.js +++ b/test/js/node/test/fixtures/permission/fs-write.js @@ -1,7 +1,11 @@ 'use strict'; const common = require('../../common'); -common.skipIfWorker(); +const { isMainThread } = require('worker_threads'); + +if (!isMainThread) { + common.skip('This test only works on a main thread'); +} const assert = require('assert'); const fs = require('fs'); @@ -21,6 +25,15 @@ const relativeProtectedFolder = process.env.RELATIVEBLOCKEDFOLDER; assert.ok(!process.permission.has('fs.write', blockedFile)); } +// Guarantee the error message suggest the --allow-fs-write +{ + fs.writeFile(blockedFile, 'example', common.expectsError({ + message: 'Access to this API has been restricted. Use --allow-fs-write to manage permissions.', + code: 'ERR_ACCESS_DENIED', + permission: 'FileSystemWrite', + })); +} + // fs.writeFile { assert.throws(() => { @@ -553,4 +566,4 @@ const relativeProtectedFolder = process.env.RELATIVEBLOCKEDFOLDER; }, { code: 'ERR_ACCESS_DENIED', }); -} \ No newline at end of file +} diff --git a/test/js/node/test/fixtures/permission/hello-world.js b/test/js/node/test/fixtures/permission/hello-world.js new file mode 100644 index 0000000000..f5bda8dadd --- /dev/null +++ b/test/js/node/test/fixtures/permission/hello-world.js @@ -0,0 +1 @@ +console.log('Hello world') \ No newline at end of file diff --git a/test/js/node/test/fixtures/permission/processbinding.js b/test/js/node/test/fixtures/permission/processbinding.js index bdb958fb01..8857a55498 100644 --- a/test/js/node/test/fixtures/permission/processbinding.js +++ b/test/js/node/test/fixtures/permission/processbinding.js @@ -1,5 +1,9 @@ const common = require('../../common'); -common.skipIfWorker(); +const { isMainThread } = require('worker_threads'); + +if (!isMainThread) { + common.skip('This test only works on a main thread'); +} const assert = require('assert'); @@ -11,14 +15,6 @@ const assert = require('assert'); })); } -{ - assert.throws(() => { - process.binding('async_wrap'); - }, common.expectsError({ - code: 'ERR_ACCESS_DENIED', - })); -} - { assert.throws(() => { process.binding('fs'); diff --git a/test/js/node/test/fixtures/permission/simple-loader.js b/test/js/node/test/fixtures/permission/simple-loader.js new file mode 100644 index 0000000000..43e2a9bb77 --- /dev/null +++ b/test/js/node/test/fixtures/permission/simple-loader.js @@ -0,0 +1,3 @@ +// Simulate a regular loading without fs operations +// but with access to Node core modules +require('node:fs') \ No newline at end of file diff --git a/test/js/node/test/fixtures/process-exit-code-cases.js b/test/js/node/test/fixtures/process-exit-code-cases.js deleted file mode 100644 index 05b01afd8f..0000000000 --- a/test/js/node/test/fixtures/process-exit-code-cases.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -const assert = require('assert'); - -function getTestCases(isWorker = false) { - const cases = []; - function exitsOnExitCodeSet() { - process.exitCode = 42; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 42); - assert.strictEqual(code, 42); - }); - } - cases.push({ func: exitsOnExitCodeSet, result: 42 }); - - function changesCodeViaExit() { - process.exitCode = 99; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 42); - assert.strictEqual(code, 42); - }); - process.exit(42); - } - cases.push({ func: changesCodeViaExit, result: 42 }); - - function changesCodeZeroExit() { - process.exitCode = 99; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 0); - assert.strictEqual(code, 0); - }); - process.exit(0); - } - cases.push({ func: changesCodeZeroExit, result: 0 }); - - function exitWithOneOnUncaught() { - process.exitCode = 99; - process.on('exit', (code) => { - // cannot use assert because it will be uncaughtException -> 1 exit code - // that will render this test useless - if (code !== 1 || process.exitCode !== 1) { - console.log('wrong code! expected 1 for uncaughtException'); - process.exit(99); - } - }); - throw new Error('ok'); - } - cases.push({ - func: exitWithOneOnUncaught, - result: 1, - error: /^Error: ok$/, - }); - - function changeCodeInsideExit() { - process.exitCode = 95; - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 95); - assert.strictEqual(code, 95); - process.exitCode = 99; - }); - } - cases.push({ func: changeCodeInsideExit, result: 99 }); - - function zeroExitWithUncaughtHandler() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 0); - assert.strictEqual(code, 0); - }); - process.on('uncaughtException', () => { }); - throw new Error('ok'); - } - cases.push({ func: zeroExitWithUncaughtHandler, result: 0 }); - - function changeCodeInUncaughtHandler() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 97); - assert.strictEqual(code, 97); - }); - process.on('uncaughtException', () => { - process.exitCode = 97; - }); - throw new Error('ok'); - } - cases.push({ func: changeCodeInUncaughtHandler, result: 97 }); - - function changeCodeInExitWithUncaught() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 1); - assert.strictEqual(code, 1); - process.exitCode = 98; - }); - throw new Error('ok'); - } - cases.push({ - func: changeCodeInExitWithUncaught, - result: 98, - error: /^Error: ok$/, - }); - - function exitWithZeroInExitWithUncaught() { - process.on('exit', (code) => { - assert.strictEqual(process.exitCode, 1); - assert.strictEqual(code, 1); - process.exitCode = 0; - }); - throw new Error('ok'); - } - cases.push({ - func: exitWithZeroInExitWithUncaught, - result: 0, - error: /^Error: ok$/, - }); - - function exitWithThrowInUncaughtHandler() { - process.on('uncaughtException', () => { - throw new Error('ok') - }); - throw new Error('bad'); - } - cases.push({ - func: exitWithThrowInUncaughtHandler, - result: isWorker ? 1 : 7, - error: /^Error: ok$/, - }); - - function exitWithUndefinedFatalException() { - process._fatalException = undefined; - throw new Error('ok'); - } - cases.push({ - func: exitWithUndefinedFatalException, - result: 6, - }); - return cases; -} -exports.getTestCases = getTestCases; diff --git a/test/js/node/test/fixtures/rc/broken-node-options.json b/test/js/node/test/fixtures/rc/broken-node-options.json new file mode 100644 index 0000000000..beea3f7143 --- /dev/null +++ b/test/js/node/test/fixtures/rc/broken-node-options.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "inspect-port + } +} diff --git a/test/js/node/test/fixtures/rc/broken.json b/test/js/node/test/fixtures/rc/broken.json new file mode 100644 index 0000000000..98232c64fc --- /dev/null +++ b/test/js/node/test/fixtures/rc/broken.json @@ -0,0 +1 @@ +{ diff --git a/test/js/node/test/fixtures/rc/default/node.config.json b/test/js/node/test/fixtures/rc/default/node.config.json new file mode 100644 index 0000000000..54bcbfef04 --- /dev/null +++ b/test/js/node/test/fixtures/rc/default/node.config.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "max-http-header-size": 10 + } +} diff --git a/test/js/node/test/fixtures/rc/default/override.json b/test/js/node/test/fixtures/rc/default/override.json new file mode 100644 index 0000000000..0f6f763cad --- /dev/null +++ b/test/js/node/test/fixtures/rc/default/override.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "max-http-header-size": 20 + } +} diff --git a/test/js/node/test/fixtures/rc/duplicate-namespace-option/node.config.json b/test/js/node/test/fixtures/rc/duplicate-namespace-option/node.config.json new file mode 100644 index 0000000000..4d948fbd33 --- /dev/null +++ b/test/js/node/test/fixtures/rc/duplicate-namespace-option/node.config.json @@ -0,0 +1,6 @@ +{ + "testRunner": { + "test-name-pattern": "first-pattern", + "test-name-pattern": "second-pattern" + } +} diff --git a/test/js/node/test/fixtures/rc/empty-object.json b/test/js/node/test/fixtures/rc/empty-object.json new file mode 100644 index 0000000000..0db3279e44 --- /dev/null +++ b/test/js/node/test/fixtures/rc/empty-object.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/test/js/node/test/fixtures/rc/empty-valid-namespace.json b/test/js/node/test/fixtures/rc/empty-valid-namespace.json new file mode 100644 index 0000000000..dbeb33d7aa --- /dev/null +++ b/test/js/node/test/fixtures/rc/empty-valid-namespace.json @@ -0,0 +1,3 @@ +{ + "testRunner": {} +} diff --git a/test/js/node/test/fixtures/rc/empty.json b/test/js/node/test/fixtures/rc/empty.json new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/test/js/node/test/fixtures/rc/empty.json @@ -0,0 +1 @@ + diff --git a/test/js/node/test/fixtures/rc/host-port.json b/test/js/node/test/fixtures/rc/host-port.json new file mode 100644 index 0000000000..48fb16edae --- /dev/null +++ b/test/js/node/test/fixtures/rc/host-port.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "inspect-port": 65535 + } +} diff --git a/test/js/node/test/fixtures/rc/import-as-string.json b/test/js/node/test/fixtures/rc/import-as-string.json new file mode 100644 index 0000000000..b1e1feb96a --- /dev/null +++ b/test/js/node/test/fixtures/rc/import-as-string.json @@ -0,0 +1,5 @@ +{ + "nodeOptions":{ + "import": "./test/fixtures/printA.js" + } +} diff --git a/test/js/node/test/fixtures/rc/import.json b/test/js/node/test/fixtures/rc/import.json new file mode 100644 index 0000000000..c0f74ed62b --- /dev/null +++ b/test/js/node/test/fixtures/rc/import.json @@ -0,0 +1,9 @@ +{ + "nodeOptions": { + "import": [ + "./test/fixtures/printA.js", + "./test/fixtures/printB.js", + "./test/fixtures/printC.js" + ] + } +} diff --git a/test/js/node/test/fixtures/rc/inspect-false.json b/test/js/node/test/fixtures/rc/inspect-false.json new file mode 100644 index 0000000000..32bb5961f2 --- /dev/null +++ b/test/js/node/test/fixtures/rc/inspect-false.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "inspect": false + } +} diff --git a/test/js/node/test/fixtures/rc/inspect-true.json b/test/js/node/test/fixtures/rc/inspect-true.json new file mode 100644 index 0000000000..684571a5a6 --- /dev/null +++ b/test/js/node/test/fixtures/rc/inspect-true.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "inspect": true + } +} diff --git a/test/js/node/test/fixtures/rc/invalid-import.json b/test/js/node/test/fixtures/rc/invalid-import.json new file mode 100644 index 0000000000..8d6a1a0777 --- /dev/null +++ b/test/js/node/test/fixtures/rc/invalid-import.json @@ -0,0 +1,7 @@ +{ + "nodeOptions": { + "import": [ + 1 + ] + } +} diff --git a/test/js/node/test/fixtures/rc/namespace-with-array.json b/test/js/node/test/fixtures/rc/namespace-with-array.json new file mode 100644 index 0000000000..056a4291e9 --- /dev/null +++ b/test/js/node/test/fixtures/rc/namespace-with-array.json @@ -0,0 +1,5 @@ +{ + "testRunner": { + "test-coverage-exclude": ["config-pattern1", "config-pattern2"] + } +} diff --git a/test/js/node/test/fixtures/rc/namespace-with-disallowed-envvar.json b/test/js/node/test/fixtures/rc/namespace-with-disallowed-envvar.json new file mode 100644 index 0000000000..6152684e05 --- /dev/null +++ b/test/js/node/test/fixtures/rc/namespace-with-disallowed-envvar.json @@ -0,0 +1,6 @@ +{ + "testRunner": { + "test-concurrency": 1, + "experimental-test-coverage": true + } +} diff --git a/test/js/node/test/fixtures/rc/namespaced/node.config.json b/test/js/node/test/fixtures/rc/namespaced/node.config.json new file mode 100644 index 0000000000..df929d25c1 --- /dev/null +++ b/test/js/node/test/fixtures/rc/namespaced/node.config.json @@ -0,0 +1,5 @@ +{ + "testRunner": { + "test-isolation": "none" + } +} diff --git a/test/js/node/test/fixtures/rc/negative-numeric.json b/test/js/node/test/fixtures/rc/negative-numeric.json new file mode 100644 index 0000000000..f0b6d57369 --- /dev/null +++ b/test/js/node/test/fixtures/rc/negative-numeric.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "max-http-header-size": -1 + } +} diff --git a/test/js/node/test/fixtures/rc/no-op.json b/test/js/node/test/fixtures/rc/no-op.json new file mode 100644 index 0000000000..a8e0a191ca --- /dev/null +++ b/test/js/node/test/fixtures/rc/no-op.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "http-parser": true + } +} diff --git a/test/js/node/test/fixtures/rc/non-object-node-options.json b/test/js/node/test/fixtures/rc/non-object-node-options.json new file mode 100644 index 0000000000..5dc596e467 --- /dev/null +++ b/test/js/node/test/fixtures/rc/non-object-node-options.json @@ -0,0 +1,3 @@ +{ + "nodeOptions": "string" +} diff --git a/test/js/node/test/fixtures/rc/non-object-root.json b/test/js/node/test/fixtures/rc/non-object-root.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/test/js/node/test/fixtures/rc/non-object-root.json @@ -0,0 +1 @@ +[] diff --git a/test/js/node/test/fixtures/rc/non-readable/node.config.json b/test/js/node/test/fixtures/rc/non-readable/node.config.json new file mode 100755 index 0000000000..21e2b85fbd --- /dev/null +++ b/test/js/node/test/fixtures/rc/non-readable/node.config.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "max-http-header-size": 10 + } +} diff --git a/test/js/node/test/fixtures/rc/not-node-options-flag.json b/test/js/node/test/fixtures/rc/not-node-options-flag.json new file mode 100644 index 0000000000..c35ff6064e --- /dev/null +++ b/test/js/node/test/fixtures/rc/not-node-options-flag.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "test": true + } +} diff --git a/test/js/node/test/fixtures/rc/numeric.json b/test/js/node/test/fixtures/rc/numeric.json new file mode 100644 index 0000000000..c9d5d6241f --- /dev/null +++ b/test/js/node/test/fixtures/rc/numeric.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "max-http-header-size": 4294967295 + } +} diff --git a/test/js/node/test/fixtures/rc/override-namespace.json b/test/js/node/test/fixtures/rc/override-namespace.json new file mode 100644 index 0000000000..acb37b2eec --- /dev/null +++ b/test/js/node/test/fixtures/rc/override-namespace.json @@ -0,0 +1,8 @@ +{ + "testRunner": { + "test-isolation": "process" + }, + "nodeOptions": { + "test-isolation": "none" + } +} diff --git a/test/js/node/test/fixtures/rc/override-node-option-with-namespace.json b/test/js/node/test/fixtures/rc/override-node-option-with-namespace.json new file mode 100644 index 0000000000..2db9e1a47f --- /dev/null +++ b/test/js/node/test/fixtures/rc/override-node-option-with-namespace.json @@ -0,0 +1,8 @@ +{ + "nodeOptions": { + "test-isolation": "none" + }, + "testRunner": { + "test-isolation": "process" + } +} diff --git a/test/js/node/test/fixtures/rc/override-property.json b/test/js/node/test/fixtures/rc/override-property.json new file mode 100644 index 0000000000..9e76f24fcd --- /dev/null +++ b/test/js/node/test/fixtures/rc/override-property.json @@ -0,0 +1,6 @@ +{ + "nodeOptions": { + "experimental-transform-types": true, + "experimental-transform-types": false + } +} diff --git a/test/js/node/test/fixtures/rc/sneaky-flag.json b/test/js/node/test/fixtures/rc/sneaky-flag.json new file mode 100644 index 0000000000..0b2342539e --- /dev/null +++ b/test/js/node/test/fixtures/rc/sneaky-flag.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "import": "./test/fixtures/printA.js --experimental-transform-types" + } +} diff --git a/test/js/node/test/fixtures/rc/string.json b/test/js/node/test/fixtures/rc/string.json new file mode 100644 index 0000000000..54dd0964b3 --- /dev/null +++ b/test/js/node/test/fixtures/rc/string.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "test-reporter": "dot" + } +} diff --git a/test/js/node/test/fixtures/rc/test.js b/test/js/node/test/fixtures/rc/test.js new file mode 100644 index 0000000000..7775b14987 --- /dev/null +++ b/test/js/node/test/fixtures/rc/test.js @@ -0,0 +1,6 @@ +const { test } = require('node:test'); +const { ok } = require('node:assert'); + +test('should pass', () => { + ok(true); +}); diff --git a/test/js/node/test/fixtures/rc/transform-types.json b/test/js/node/test/fixtures/rc/transform-types.json new file mode 100644 index 0000000000..ea5a9f9f16 --- /dev/null +++ b/test/js/node/test/fixtures/rc/transform-types.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "experimental-transform-types": true + } +} diff --git a/test/js/node/test/fixtures/rc/unknown-flag-namespace.json b/test/js/node/test/fixtures/rc/unknown-flag-namespace.json new file mode 100644 index 0000000000..b5d87ad8dd --- /dev/null +++ b/test/js/node/test/fixtures/rc/unknown-flag-namespace.json @@ -0,0 +1,5 @@ +{ + "testRunner": { + "unknown-flag": true + } +} diff --git a/test/js/node/test/fixtures/rc/unknown-flag.json b/test/js/node/test/fixtures/rc/unknown-flag.json new file mode 100644 index 0000000000..31087baa00 --- /dev/null +++ b/test/js/node/test/fixtures/rc/unknown-flag.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "some-unknown-flag": true + } +} diff --git a/test/js/node/test/fixtures/rc/unknown-namespace.json b/test/js/node/test/fixtures/rc/unknown-namespace.json new file mode 100644 index 0000000000..14730d83ef --- /dev/null +++ b/test/js/node/test/fixtures/rc/unknown-namespace.json @@ -0,0 +1,5 @@ +{ + "an-invalid-namespace": { + "a-key": "a-value" + } +} diff --git a/test/js/node/test/fixtures/rc/v8-flag.json b/test/js/node/test/fixtures/rc/v8-flag.json new file mode 100644 index 0000000000..5f74095306 --- /dev/null +++ b/test/js/node/test/fixtures/rc/v8-flag.json @@ -0,0 +1,5 @@ +{ + "nodeOptions": { + "abort-on-uncaught-exception": true + } +} diff --git a/test/js/node/test/fixtures/sea.js b/test/js/node/test/fixtures/sea.js index 6dea696099..65bb8d37e0 100644 --- a/test/js/node/test/fixtures/sea.js +++ b/test/js/node/test/fixtures/sea.js @@ -10,9 +10,9 @@ const builtinWarning = To load a module from disk after the single executable application is launched, use require("module").createRequire(). Support for bundled module loading or virtual file systems are under discussions in https://github.com/nodejs/single-executable`; -expectWarning('Warning', builtinWarning); // Triggered by require() calls below. // This additionally makes sure that no unexpected warnings are emitted. if (!createdRequire('./sea-config.json').disableExperimentalSEAWarning) { + expectWarning('Warning', builtinWarning); // Triggered by require() calls below. expectWarning('ExperimentalWarning', 'Single executable application is an experimental feature and ' + 'might change at any time'); diff --git a/test/js/node/test/fixtures/typescript/ts/test-get-callsite-explicit.ts b/test/js/node/test/fixtures/typescript/ts/test-get-callsites-explicit.ts similarity index 77% rename from test/js/node/test/fixtures/typescript/ts/test-get-callsite-explicit.ts rename to test/js/node/test/fixtures/typescript/ts/test-get-callsites-explicit.ts index 331495419a..8b37db9f72 100644 --- a/test/js/node/test/fixtures/typescript/ts/test-get-callsite-explicit.ts +++ b/test/js/node/test/fixtures/typescript/ts/test-get-callsites-explicit.ts @@ -7,4 +7,4 @@ interface CallSite { const callSite = getCallSites({ sourceMap: false })[0]; -console.log('mapCallSite: ', callSite); +console.log('mapCallSites: ', callSite); diff --git a/test/js/node/test/fixtures/typescript/ts/test-get-callsite.ts b/test/js/node/test/fixtures/typescript/ts/test-get-callsites.ts similarity index 74% rename from test/js/node/test/fixtures/typescript/ts/test-get-callsite.ts rename to test/js/node/test/fixtures/typescript/ts/test-get-callsites.ts index e3186ec889..06ddf05538 100644 --- a/test/js/node/test/fixtures/typescript/ts/test-get-callsite.ts +++ b/test/js/node/test/fixtures/typescript/ts/test-get-callsites.ts @@ -7,4 +7,4 @@ interface CallSite { const callSite = getCallSites()[0]; -console.log('getCallSite: ', callSite); +console.log('getCallSites: ', callSite); diff --git a/test/js/node/test/fixtures/tz-version.txt b/test/js/node/test/fixtures/tz-version.txt index 699e50d4d3..ef468adcec 100644 --- a/test/js/node/test/fixtures/tz-version.txt +++ b/test/js/node/test/fixtures/tz-version.txt @@ -1 +1 @@ -2024b +2025b diff --git a/test/js/node/test/parallel/test-net-allow-half-open.js b/test/js/node/test/parallel/test-net-allow-half-open.js new file mode 100644 index 0000000000..c7f829a986 --- /dev/null +++ b/test/js/node/test/parallel/test-net-allow-half-open.js @@ -0,0 +1,47 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +{ + const server = net.createServer(common.mustCall((socket) => { + socket.end(Buffer.alloc(1024)); + })).listen(0, common.mustCall(() => { + const socket = net.connect(server.address().port); + assert.strictEqual(socket.allowHalfOpen, false); + socket.resume(); + socket.on('end', common.mustCall(() => { + process.nextTick(() => { + // Ensure socket is not destroyed straight away + // without proper shutdown. + assert(!socket.destroyed); + server.close(); + }); + })); + socket.on('finish', common.mustCall(() => { + assert(!socket.destroyed); + })); + socket.on('close', common.mustCall()); + })); +} + +{ + const server = net.createServer(common.mustCall((socket) => { + socket.end(Buffer.alloc(1024)); + })).listen(0, common.mustCall(() => { + const socket = net.connect(server.address().port); + assert.strictEqual(socket.allowHalfOpen, false); + socket.resume(); + socket.on('end', common.mustCall(() => { + assert(!socket.destroyed); + })); + socket.end('asd'); + socket.on('finish', common.mustCall(() => { + assert(!socket.destroyed); + })); + socket.on('close', common.mustCall(() => { + server.close(); + })); + })); +} diff --git a/test/js/node/test/parallel/test-require-resolve.js b/test/js/node/test/parallel/test-require-resolve.js index 6aec57189e..0181880a35 100644 --- a/test/js/node/test/parallel/test-require-resolve.js +++ b/test/js/node/test/parallel/test-require-resolve.js @@ -64,15 +64,14 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); // TODO(@jasnell): Remove once node:quic is no longer flagged if (mod === 'node:quic') return; - assert.strictEqual(require.resolve.paths(mod), null, `require.resolve.paths(${mod}) should return null`); + assert.strictEqual(require.resolve.paths(mod), null); if (!mod.startsWith('node:')) { try { require.resolve(`node:${mod}`); } catch (e) { return; // skip modules that don't support the node prefix, such as 'bun:ffi' -> 'node:bun:ffi' } - - assert.strictEqual(require.resolve.paths(`node:${mod}`), null, `require.resolve.paths(node:${mod}) should return null`); + assert.strictEqual(require.resolve.paths(`node:${mod}`), null); } }); diff --git a/test/js/node/test/parallel/test-util-parse-env.js b/test/js/node/test/parallel/test-util-parse-env.js index 13d2fda37a..80ab736dd3 100644 --- a/test/js/node/test/parallel/test-util-parse-env.js +++ b/test/js/node/test/parallel/test-util-parse-env.js @@ -11,6 +11,8 @@ const fs = require('node:fs'); const validContent = fs.readFileSync(validEnvFilePath, 'utf8'); assert.deepStrictEqual(util.parseEnv(validContent), { + A: 'B=C', + B: 'C=D', AFTER_LINE: 'after_line', BACKTICKS: 'backticks', BACKTICKS_INSIDE_DOUBLE: '`backticks` work inside double quotes', diff --git a/test/js/node/tls/node-tls-connect.test.ts b/test/js/node/tls/node-tls-connect.test.ts index 914cd62098..56171db865 100644 --- a/test/js/node/tls/node-tls-connect.test.ts +++ b/test/js/node/tls/node-tls-connect.test.ts @@ -236,23 +236,23 @@ for (const { name, connect } of tests) { }); expect(cert.subjectaltname).toBe("DNS:localhost, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1"); expect(cert.infoAccess).toBeUndefined(); - expect(cert.ca).toBeFalse(); + expect(cert.ca).toBe(true); expect(cert.bits).toBe(2048); expect(cert.modulus).toBe( - "beee8773af7c8861ec11351188b9b1798734fb0729b674369be3285a29fe5dacbfab700d09d7904cf1027d89298bd68be0ef1df94363012b0deb97f632cb76894bcc216535337b9db6125ef68996dd35b4bea07e86c41da071907a86651e84f8c72141f889cc0f770554791e9f07bbe47c375d2d77b44dbe2ab0ed442bc1f49abe4f8904977e3dfd61cd501d8eff819ff1792aedffaca7d281fd1db8c5d972d22f68fa7103ca11ac9aaed1cdd12c33c0b8b47964b37338953d2415edce8b83d52e2076ca960385cc3a5ca75a75951aafdb2ad3db98a6fdd4baa32f575fea7b11f671a9eaa95d7d9faf958ac609f3c48dec5bddcf1bc1542031ed9d4b281d7dd1", + "e5633a2c8118171cbeaf321d55d0444586cbe566bb51a234b0ead69faf7490069854efddffac68986652ff949f472252e4c7d24c6ee4e3366e54d9e4701e24d021e583e1a088112c0f96475a558b42f883a3e796c937cc4d6bb8791b227017b3e73deb40b0ac84f033019f580a3216888acec71ce52d938fcadd8e29794e38774e33d323ede89b58e526ef8b513ba465fa4ffd9cf6c1ec7480de0dcb569dec295d7b3cce40256b428d5907e90e7a52e77c3101f4ad4c0e254ab03d75ac42ee1668a5094bc4521b264fb404b6c4b17b6b279e13e6282e1e4fb6303540cb830ea8ff576ca57b7861e4ef797af824b0987c870718780a1c5141e4f904fd0c5139f5", ); expect(cert.exponent).toBe("0x10001"); expect(cert.pubkey).toBeInstanceOf(Buffer); - expect(cert.valid_from).toBe("Sep 6 23:27:34 2023 GMT"); // yes this space is intentional - expect(cert.valid_to).toBe("Sep 5 23:27:34 2025 GMT"); - expect(cert.fingerprint).toBe("E3:90:9C:A8:AB:80:48:37:8D:CE:11:64:45:3A:EB:AD:C8:3C:B3:5C"); + expect(cert.valid_from).toBe("Sep 6 03:00:49 2025 GMT"); // yes this space is intentional + expect(cert.valid_to).toBe("Sep 4 03:00:49 2035 GMT"); + expect(cert.fingerprint).toBe("D2:5E:B9:AD:8B:48:3B:7A:35:D3:1A:45:BD:32:AC:AD:55:4A:BA:AD"); expect(cert.fingerprint256).toBe( - "53:DD:15:78:60:FD:66:8C:43:9E:19:7E:CF:2C:AF:49:3C:D1:11:EC:61:2D:F5:DC:1D:0A:FA:CD:12:F9:F8:E0", + "85:F4:47:0C:6D:D8:DE:C8:68:77:7C:5E:3F:9B:56:A6:D3:69:C7:C2:1A:E8:B8:F8:1C:16:1D:04:78:A0:E9:91", ); expect(cert.fingerprint512).toBe( - "2D:31:CB:D2:A0:CA:E5:D4:B5:59:11:48:4B:BC:65:11:4F:AB:02:24:59:D8:73:43:2F:9A:31:92:BC:AF:26:66:CD:DB:8B:03:74:0C:C1:84:AF:54:2D:7C:FD:EF:07:6E:85:66:98:6B:82:4F:A5:72:97:A2:19:8C:7B:57:D6:15", + "CE:00:17:97:29:5E:1C:7E:59:86:8D:1F:F0:F4:AF:A0:B0:10:F2:2E:0E:79:D1:32:D0:44:F9:B4:3A:DE:D5:83:A9:15:0E:E4:47:24:D4:2A:10:FB:21:BE:3A:38:21:FC:40:20:B3:BC:52:64:F7:38:93:EF:C9:3F:C8:57:89:31", ); - expect(cert.serialNumber).toBe("1da7a7b8d71402ed2d8c3646a5cedf2b8117efc8"); + expect(cert.serialNumber).toBe("71a46ae89fd817ef81a34d5973e1de42f09b9d63"); expect(cert.raw).toBeInstanceOf(Buffer); } finally { socket.end(); diff --git a/test/js/node/tls/node-tls-server.test.ts b/test/js/node/tls/node-tls-server.test.ts index b4e0080f23..9cece7adf2 100644 --- a/test/js/node/tls/node-tls-server.test.ts +++ b/test/js/node/tls/node-tls-server.test.ts @@ -316,24 +316,24 @@ describe("tls.createServer", () => { ST: "CA", }); - expect(cert.ca).toBeFalse(); + expect(cert.ca).toBe(true); expect(cert.bits).toBe(2048); expect(cert.modulus).toBe( - "beee8773af7c8861ec11351188b9b1798734fb0729b674369be3285a29fe5dacbfab700d09d7904cf1027d89298bd68be0ef1df94363012b0deb97f632cb76894bcc216535337b9db6125ef68996dd35b4bea07e86c41da071907a86651e84f8c72141f889cc0f770554791e9f07bbe47c375d2d77b44dbe2ab0ed442bc1f49abe4f8904977e3dfd61cd501d8eff819ff1792aedffaca7d281fd1db8c5d972d22f68fa7103ca11ac9aaed1cdd12c33c0b8b47964b37338953d2415edce8b83d52e2076ca960385cc3a5ca75a75951aafdb2ad3db98a6fdd4baa32f575fea7b11f671a9eaa95d7d9faf958ac609f3c48dec5bddcf1bc1542031ed9d4b281d7dd1", + "e5633a2c8118171cbeaf321d55d0444586cbe566bb51a234b0ead69faf7490069854efddffac68986652ff949f472252e4c7d24c6ee4e3366e54d9e4701e24d021e583e1a088112c0f96475a558b42f883a3e796c937cc4d6bb8791b227017b3e73deb40b0ac84f033019f580a3216888acec71ce52d938fcadd8e29794e38774e33d323ede89b58e526ef8b513ba465fa4ffd9cf6c1ec7480de0dcb569dec295d7b3cce40256b428d5907e90e7a52e77c3101f4ad4c0e254ab03d75ac42ee1668a5094bc4521b264fb404b6c4b17b6b279e13e6282e1e4fb6303540cb830ea8ff576ca57b7861e4ef797af824b0987c870718780a1c5141e4f904fd0c5139f5", ); expect(cert.exponent).toBe("0x10001"); expect(cert.pubkey).toBeInstanceOf(Buffer); // yes these spaces are intentional - expect(cert.valid_from).toBe("Sep 6 23:27:34 2023 GMT"); - expect(cert.valid_to).toBe("Sep 5 23:27:34 2025 GMT"); - expect(cert.fingerprint).toBe("E3:90:9C:A8:AB:80:48:37:8D:CE:11:64:45:3A:EB:AD:C8:3C:B3:5C"); + expect(cert.valid_from).toBe("Sep 6 03:00:49 2025 GMT"); + expect(cert.valid_to).toBe("Sep 4 03:00:49 2035 GMT"); + expect(cert.fingerprint).toBe("D2:5E:B9:AD:8B:48:3B:7A:35:D3:1A:45:BD:32:AC:AD:55:4A:BA:AD"); expect(cert.fingerprint256).toBe( - "53:DD:15:78:60:FD:66:8C:43:9E:19:7E:CF:2C:AF:49:3C:D1:11:EC:61:2D:F5:DC:1D:0A:FA:CD:12:F9:F8:E0", + "85:F4:47:0C:6D:D8:DE:C8:68:77:7C:5E:3F:9B:56:A6:D3:69:C7:C2:1A:E8:B8:F8:1C:16:1D:04:78:A0:E9:91", ); expect(cert.fingerprint512).toBe( - "2D:31:CB:D2:A0:CA:E5:D4:B5:59:11:48:4B:BC:65:11:4F:AB:02:24:59:D8:73:43:2F:9A:31:92:BC:AF:26:66:CD:DB:8B:03:74:0C:C1:84:AF:54:2D:7C:FD:EF:07:6E:85:66:98:6B:82:4F:A5:72:97:A2:19:8C:7B:57:D6:15", + "CE:00:17:97:29:5E:1C:7E:59:86:8D:1F:F0:F4:AF:A0:B0:10:F2:2E:0E:79:D1:32:D0:44:F9:B4:3A:DE:D5:83:A9:15:0E:E4:47:24:D4:2A:10:FB:21:BE:3A:38:21:FC:40:20:B3:BC:52:64:F7:38:93:EF:C9:3F:C8:57:89:31", ); - expect(cert.serialNumber).toBe("1da7a7b8d71402ed2d8c3646a5cedf2b8117efc8"); + expect(cert.serialNumber).toBe("71a46ae89fd817ef81a34d5973e1de42f09b9d63"); expect(cert.raw).toBeInstanceOf(Buffer); client?.end(); diff --git a/test/js/node/tls/renegotiation-feature.js b/test/js/node/tls/renegotiation-feature.js index c110760191..b26c338d23 100644 --- a/test/js/node/tls/renegotiation-feature.js +++ b/test/js/node/tls/renegotiation-feature.js @@ -1,7 +1,7 @@ const server = require("https").createServer( { - cert: "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIUHaenuNcUAu0tjDZGpc7fK4EX78gwDQYJKoZIhvcNAQEL\nBQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJh\nbmNpc2NvMQ0wCwYDVQQKDARPdmVuMREwDwYDVQQLDAhUZWFtIEJ1bjETMBEGA1UE\nAwwKc2VydmVyLWJ1bjAeFw0yMzA5MDYyMzI3MzRaFw0yNTA5MDUyMzI3MzRaMGkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNj\nbzENMAsGA1UECgwET3ZlbjERMA8GA1UECwwIVGVhbSBCdW4xEzARBgNVBAMMCnNl\ncnZlci1idW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+7odzr3yI\nYewRNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MB\nKw3rl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwP\ndwVUeR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn\n0oH9HbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOF\nzDpcp1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FU\nIDHtnUsoHX3RAgMBAAGjTzBNMCwGA1UdEQQlMCOCCWxvY2FsaG9zdIcEfwAAAYcQ\nAAAAAAAAAAAAAAAAAAAAATAdBgNVHQ4EFgQUF3y/su4J/8ScpK+rM2LwTct6EQow\nDQYJKoZIhvcNAQELBQADggEBAGWGWp59Bmrk3Gt0bidFLEbvlOgGPWCT9ZrJUjgc\nhY44E+/t4gIBdoKOSwxo1tjtz7WsC2IYReLTXh1vTsgEitk0Bf4y7P40+pBwwZwK\naeIF9+PC6ZoAkXGFRoyEalaPVQDBg/DPOMRG9OH0lKfen9OGkZxmmjRLJzbyfAhU\noI/hExIjV8vehcvaJXmkfybJDYOYkN4BCNqPQHNf87ZNdFCb9Zgxwp/Ou+47J5k4\n5plQ+K7trfKXG3ABMbOJXNt1b0sH8jnpAsyHY4DLEQqxKYADbXsr3YX/yy6c0eOo\nX2bHGD1+zGsb7lGyNyoZrCZ0233glrEM4UxmvldBcWwOWfk=\n-----END CERTIFICATE-----\n", - key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+7odzr3yIYewR\nNRGIubF5hzT7Bym2dDab4yhaKf5drL+rcA0J15BM8QJ9iSmL1ovg7x35Q2MBKw3r\nl/Yyy3aJS8whZTUze522El72iZbdNbS+oH6GxB2gcZB6hmUehPjHIUH4icwPdwVU\neR6fB7vkfDddLXe0Tb4qsO1EK8H0mr5PiQSXfj39Yc1QHY7/gZ/xeSrt/6yn0oH9\nHbjF2XLSL2j6cQPKEayartHN0SwzwLi0eWSzcziVPSQV7c6Lg9UuIHbKlgOFzDpc\np1p1lRqv2yrT25im/dS6oy9XX+p7EfZxqeqpXX2fr5WKxgnzxI3sW93PG8FUIDHt\nnUsoHX3RAgMBAAECggEAAckMqkn+ER3c7YMsKRLc5bUE9ELe+ftUwfA6G+oXVorn\nE+uWCXGdNqI+TOZkQpurQBWn9IzTwv19QY+H740cxo0ozZVSPE4v4czIilv9XlVw\n3YCNa2uMxeqp76WMbz1xEhaFEgn6ASTVf3hxYJYKM0ljhPX8Vb8wWwlLONxr4w4X\nOnQAB5QE7i7LVRsQIpWKnGsALePeQjzhzUZDhz0UnTyGU6GfC+V+hN3RkC34A8oK\njR3/Wsjahev0Rpb+9Pbu3SgTrZTtQ+srlRrEsDG0wVqxkIk9ueSMOHlEtQ7zYZsk\nlX59Bb8LHNGQD5o+H1EDaC6OCsgzUAAJtDRZsPiZEQKBgQDs+YtVsc9RDMoC0x2y\nlVnP6IUDXt+2UXndZfJI3YS+wsfxiEkgK7G3AhjgB+C+DKEJzptVxP+212hHnXgr\n1gfW/x4g7OWBu4IxFmZ2J/Ojor+prhHJdCvD0VqnMzauzqLTe92aexiexXQGm+WW\nwRl3YZLmkft3rzs3ZPhc1G2X9QKBgQDOQq3rrxcvxSYaDZAb+6B/H7ZE4natMCiz\nLx/cWT8n+/CrJI2v3kDfdPl9yyXIOGrsqFgR3uhiUJnz+oeZFFHfYpslb8KvimHx\nKI+qcVDcprmYyXj2Lrf3fvj4pKorc+8TgOBDUpXIFhFDyM+0DmHLfq+7UqvjU9Hs\nkjER7baQ7QKBgQDTh508jU/FxWi9RL4Jnw9gaunwrEt9bxUc79dp+3J25V+c1k6Q\nDPDBr3mM4PtYKeXF30sBMKwiBf3rj0CpwI+W9ntqYIwtVbdNIfWsGtV8h9YWHG98\nJ9q5HLOS9EAnogPuS27walj7wL1k+NvjydJ1of+DGWQi3aQ6OkMIegap0QKBgBlR\nzCHLa5A8plG6an9U4z3Xubs5BZJ6//QHC+Uzu3IAFmob4Zy+Lr5/kITlpCyw6EdG\n3xDKiUJQXKW7kluzR92hMCRnVMHRvfYpoYEtydxcRxo/WS73SzQBjTSQmicdYzLE\ntkLtZ1+ZfeMRSpXy0gR198KKAnm0d2eQBqAJy0h9AoGBAM80zkd+LehBKq87Zoh7\ndtREVWslRD1C5HvFcAxYxBybcKzVpL89jIRGKB8SoZkF7edzhqvVzAMP0FFsEgCh\naClYGtO+uo+B91+5v2CCqowRJUGfbFOtCuSPR7+B3LDK8pkjK2SQ0mFPUfRA5z0z\nNVWtC0EYNBTRkqhYtqr3ZpUc\n-----END PRIVATE KEY-----\n", + cert: process.env.SERVER_CERT, + key: process.env.SERVER_KEY, rejectUnauthorized: false, hostname: "localhost", minVersion: "TLSv1.2", diff --git a/test/js/node/tls/renegotiation.test.ts b/test/js/node/tls/renegotiation.test.ts index f51b807934..bf848794bb 100644 --- a/test/js/node/tls/renegotiation.test.ts +++ b/test/js/node/tls/renegotiation.test.ts @@ -1,5 +1,6 @@ import type { Subprocess } from "bun"; import { afterAll, beforeAll, expect, it } from "bun:test"; +import { bunEnv, tls } from "harness"; import type { IncomingMessage } from "http"; import { join } from "path"; let url: URL; @@ -9,6 +10,11 @@ beforeAll(async () => { stdout: "pipe", stderr: "inherit", stdin: "ignore", + env: { + ...bunEnv, + SERVER_CERT: tls.cert, + SERVER_KEY: tls.key, + }, }); const { value } = await process.stdout.getReader().read(); url = new URL(new TextDecoder().decode(value));