'use strict';

// Flags: --expose-gc

// Check that creating a server without listening does not leak resources.

const common = require('../common');

if (!common.hasCrypto) {
  common.skip('missing crypto');
}

const onGC = require('../common/ongc');
const Countdown = require('../common/countdown');

const https = require('https');
const max = 100;

// Note that Countdown internally calls common.mustCall, that's why it's not done here.
const countdown = new Countdown(max, () => {});

for (let i = 0; i < max; i++) {
  const server = https.createServer((req, res) => {});
  onGC(server, { ongc: countdown.dec.bind(countdown) });
}

setImmediate(() => {
  global.gc();
});
