testcontainers / testcontainers-node

Testcontainers is a NodeJS library that supports tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
https://testcontainers.com
MIT License
1.88k stars 182 forks source link

Node22 `DeprecationWarning` due `node-fetch` 2.x #765

Closed Kurre closed 2 months ago

Kurre commented 5 months ago

It seems that node-fetch v2.x is causing DeprecationWarning on Node22 (maybe in Node21 too?) due usage of deprecated punycode module. node-fetch 2.x is only receiving security fixes so this issue won't most likely be resolved without upgrading the node-fetch dependency to 3.x.

references from other repos:

edit: simplified example

Expected Behaviour No warnings

Actual Behaviour

(node:16845) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.

Testcontainer Logs

  testcontainers [DEBUG] Testing container runtime strategy "TestcontainersHostStrategy"... +0ms
  testcontainers [DEBUG] Loading ".testcontainers.properties" file... +1ms
(node:30063) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
  testcontainers [DEBUG] Loaded ".testcontainers.properties" file +3ms
  testcontainers [DEBUG] Found custom configuration: tcHost: "tcp://127.0.0.1:51243", dockerHost: "tcp://127.0.0.1:51243" +0ms
  testcontainers [DEBUG] Container runtime strategy "TestcontainersHostStrategy" does not work +10ms
  testcontainers [DEBUG] Testing container runtime strategy "ConfigurationStrategy"... +0ms
  testcontainers [DEBUG] Container runtime strategy "ConfigurationStrategy" does not work +1ms
  testcontainers [DEBUG] Testing container runtime strategy "UnixSocketStrategy"... +1ms
  testcontainers [DEBUG] Container runtime strategy "UnixSocketStrategy" works +630ms
  testcontainers [DEBUG] Checking if image exists "redis:latest"... +1ms
  testcontainers [DEBUG] Checked if image exists "redis:latest" +32ms
  testcontainers [DEBUG] Pulling image "redis:latest"... +0ms
  testcontainers [DEBUG] Executing Docker credential provider "docker-credential-desktop" +0ms
  testcontainers [DEBUG] Auth config found for registry "https://index.docker.io/v1/": CredsStore +190ms
  testcontainers [DEBUG] Pulled image "redis:latest" +6s
  testcontainers [DEBUG] Acquiring lock file "/var/folders/2m/wv2pzcq1097f3ytr1tz8pz4w0000gn/T/testcontainers-node.lock"... +2ms
  testcontainers [DEBUG] Acquired lock file "/var/folders/2m/wv2pzcq1097f3ytr1tz8pz4w0000gn/T/testcontainers-node.lock" +4ms
  testcontainers [DEBUG] Listing containers... +0ms
  testcontainers [DEBUG] Listed containers +5ms
  testcontainers [DEBUG] Creating new Reaper for session "92ecc678de72" with socket path "/var/run/docker.sock"... +0ms
  testcontainers [DEBUG] Checking if image exists "testcontainers/ryuk:0.5.1"... +0ms
  testcontainers [DEBUG] Checked if image exists "testcontainers/ryuk:0.5.1" +3ms
  testcontainers [DEBUG] Image "testcontainers/ryuk:0.5.1" already exists +0ms
  testcontainers [DEBUG] Creating container for image "testcontainers/ryuk:0.5.1"... +1ms
  testcontainers [DEBUG] [89b6d2e50339] Created container for image "testcontainers/ryuk:0.5.1" +148ms
  testcontainers [INFO] [89b6d2e50339] Starting container for image "testcontainers/ryuk:0.5.1"... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Starting container... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Started container +170ms
  testcontainers [INFO] [89b6d2e50339] Started container for image "testcontainers/ryuk:0.5.1" +0ms
  testcontainers [DEBUG] [89b6d2e50339] Inspecting container... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Inspected container +3ms
  testcontainers [DEBUG] [89b6d2e50339] Waiting for container to be ready... +1ms
  testcontainers [DEBUG] [89b6d2e50339] Waiting for log message "/.+ Started!/"... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Fetching container logs... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Demuxing stream... +3ms
  testcontainers [DEBUG] [89b6d2e50339] Demuxed stream +0ms
  testcontainers [DEBUG] [89b6d2e50339] Fetched container logs +0ms
  testcontainers [DEBUG] [89b6d2e50339] Log wait strategy complete +2ms
  testcontainers [INFO] [89b6d2e50339] Container is ready +1ms
  testcontainers [DEBUG] [89b6d2e50339] Connecting to Reaper (attempt 1) on "localhost:55019"... +0ms
  testcontainers [DEBUG] [89b6d2e50339] Connected to Reaper +2ms
  testcontainers [DEBUG] Releasing lock file "/var/folders/2m/wv2pzcq1097f3ytr1tz8pz4w0000gn/T/testcontainers-node.lock"... +0ms
  testcontainers [DEBUG] Released lock file "/var/folders/2m/wv2pzcq1097f3ytr1tz8pz4w0000gn/T/testcontainers-node.lock" +0ms
  testcontainers [DEBUG] Creating container for image "redis:latest"... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Created container for image "redis:latest" +63ms
  testcontainers [INFO] [2c0a26b44a6e] Starting container for image "redis:latest"... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Starting container... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Started container +188ms
  testcontainers [INFO] [2c0a26b44a6e] Started container for image "redis:latest" +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Inspecting container... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Inspected container +3ms
  testcontainers [DEBUG] [2c0a26b44a6e] Waiting for container to be ready... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Waiting for host port 55020... +1ms
  testcontainers [DEBUG] [2c0a26b44a6e] Waiting for internal port 6379... +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Host port 55020 ready +3ms
  testcontainers [DEBUG] [2c0a26b44a6e] Host port wait strategy complete +0ms
  testcontainers [DEBUG] [2c0a26b44a6e] Internal port 6379 ready +73ms
  testcontainers [INFO] [2c0a26b44a6e] Container is ready +0ms

Steps to Reproduce

import { GenericContainer } from 'testcontainers'

new GenericContainer("redis").withExposedPorts(6379)
    .start().then((container) => console.log(container))

Environment Information

Kurre commented 5 months ago

I was tinkering a bit with this one, and if the supported Node.js versions are 18, 20 (and 22), then it should be possible to just replace the node-fetch with Node's own fetch implementation.

I made a quick'n'dirty PoC of this variation, and it seems to be a possible way to proceed. Some tests for modules are failing, but probably nothing too serious 🤔

cristianrgreco commented 4 months ago

@Kurre would you be able to raise a PR?

Kurre commented 3 months ago

@Kurre would you be able to raise a PR?

Would love to 👍 I'll give it a try ASAP 😃