diff --git a/test/integration/environment.tap.js b/test/integration/environment.test.js similarity index 61% rename from test/integration/environment.tap.js rename to test/integration/environment.test.js index 1b89d2eb92..14ec70275b 100644 --- a/test/integration/environment.tap.js +++ b/test/integration/environment.test.js @@ -5,28 +5,26 @@ 'use strict' -const tap = require('tap') -const test = tap.test +const test = require('node:test') +const assert = require('node:assert') + const configurator = require('../../lib/config') const Agent = require('../../lib/agent') -test("Using should shouldn't cause the agent to explode on startup.", function (t) { - t.plan(2) - - t.doesNotThrow(function () { +test("Using should shouldn't cause the agent to explode on startup.", (_, end) => { + assert.doesNotThrow(function () { require('should') const agent = new Agent(configurator.initialize()) - t.ok(agent.should) + assert.ok(agent.should) + end() }, "shouldn't throw when should is included.") }) -test("Environment scraper shouldn't die if HOME isn't set.", function (t) { - t.plan(2) - +test("Environment scraper shouldn't die if HOME isn't set.", () => { delete process.env.HOME - t.notOk(process.env.HOME, 'HOME has been nuked.') - t.doesNotThrow(function () { + assert.equal(process.env.HOME, undefined, 'HOME has been nuked.') + assert.doesNotThrow(function () { return new Agent(configurator.initialize()) }, "shouldn't throw just because HOME isn't set") }) diff --git a/test/integration/logger.tap.js b/test/integration/logger.test.js similarity index 61% rename from test/integration/logger.tap.js rename to test/integration/logger.test.js index b9b3a85d1a..7c48185973 100644 --- a/test/integration/logger.tap.js +++ b/test/integration/logger.test.js @@ -5,15 +5,15 @@ 'use strict' -const path = require('path') -const fs = require('fs') -const tap = require('tap') +const test = require('node:test') +const assert = require('node:assert') +const path = require('node:path') +const fs = require('node:fs') + const rimraf = require('rimraf') const DIRNAME = 'XXXNOCONFTEST' -tap.test('logger', function (t) { - t.autoend() - +test('logger', async (t) => { t.afterEach(async () => { if (path.basename(process.cwd()) === DIRNAME) { process.chdir('..') @@ -31,21 +31,19 @@ tap.test('logger', function (t) { delete process.env.NEW_RELIC_LOG }) - t.test('configuration from environment', function (t) { + await t.test('configuration from environment', (t, end) => { fs.mkdir(DIRNAME, function (error) { - if (!t.error(error, 'should not fail to make directory')) { - return t.end() - } + assert.ifError(error, 'should not fail to make directory') process.chdir(DIRNAME) process.env.NEW_RELIC_LOG = 'stdout' - t.doesNotThrow(function () { - t.ok(require('../../lib/logger'), 'requiring logger returned a logging object') + assert.doesNotThrow(function () { + assert.ok(require('../../lib/logger'), 'requiring logger returned a logging object') }) - t.end() + end() }) }) }) diff --git a/test/integration/shimmer/reinstrument.tap.js b/test/integration/shimmer/reinstrument.test.js similarity index 62% rename from test/integration/shimmer/reinstrument.tap.js rename to test/integration/shimmer/reinstrument.test.js index 7831f17259..08896ee83e 100644 --- a/test/integration/shimmer/reinstrument.tap.js +++ b/test/integration/shimmer/reinstrument.test.js @@ -5,21 +5,24 @@ 'use strict' -const tap = require('tap') +const test = require('node:test') +const tspl = require('@matteo.collina/tspl') + const helper = require('../../lib/agent_helper') -tap.beforeEach((t) => { - t.context.agent = helper.instrumentMockedAgent({}) +test.beforeEach((ctx) => { + ctx.nr = {} + ctx.nr.agent = helper.instrumentMockedAgent({}) }) -tap.afterEach((t) => { - helper.unloadAgent(t.context.agent) +test.afterEach((ctx) => { + helper.unloadAgent(ctx.nr.agent) }) -tap.test('can instrument the same module from multiple installs', (t) => { - t.plan(3) +test('can instrument the same module from multiple installs', async (t) => { + const plan = tspl(t, { plan: 3 }) - const { agent } = t.context + const { agent } = t.nr agent.start(() => { const api = helper.getAgentApi() @@ -44,13 +47,13 @@ tap.test('can instrument the same module from multiple installs', (t) => { } }) const person = new Person(dest) - t.equal(person.isHuman, true) - t.same(lines, ['human constructed\n', 'person constructed\n']) + plan.equal(person.isHuman, true) + plan.deepStrictEqual(lines, ['human constructed\n', 'person constructed\n']) // We loaded the same module from two different installed paths. // Thus, we should have two instrumentations. - t.equal(instrumentedCount, 2) - - t.end() + plan.equal(instrumentedCount, 2) }) + + await plan.completed }) diff --git a/test/integration/uninstrumented/uninstrumented.tap.js b/test/integration/uninstrumented/uninstrumented.test.js similarity index 75% rename from test/integration/uninstrumented/uninstrumented.tap.js rename to test/integration/uninstrumented/uninstrumented.test.js index 37931537e0..d4edff166c 100644 --- a/test/integration/uninstrumented/uninstrumented.tap.js +++ b/test/integration/uninstrumented/uninstrumented.test.js @@ -5,28 +5,31 @@ 'use strict' +const test = require('node:test') +const assert = require('node:assert') + /* eslint-disable node/no-unpublished-require */ const Metrics = require('../../../lib/metrics') const MetricNormalizer = require('../../../lib/metrics/normalizer') const MetricMapper = require('../../../lib/metrics/mapper') // eslint-disable-next-line node/no-extraneous-require -const tap = require('tap') + const uninstrumented = require('../../../lib/uninstrumented') const helper = require('../../lib/agent_helper') const shimmer = require('../../../lib/shimmer') /* eslint-enable node/no-unpublished-require */ -tap.test('does not mark files with known module names as uninstrumented', function (t) { +test('does not mark files with known module names as uninstrumented', (t) => { const loaded = [] require('./mock-config/redis') loaded.push('redis') - t.ok(loaded.length > 0, 'should have loaded at least one module') + assert.ok(loaded.length > 0, 'should have loaded at least one module') const agent = helper.instrumentMockedAgent() - t.teardown(() => { + t.after(() => { helper.unloadAgent(agent) }) @@ -40,14 +43,12 @@ tap.test('does not mark files with known module names as uninstrumented', functi const flagMetrics = metrics.toJSON().filter(function (metric) { return metric[0].name === 'Supportability/Uninstrumented/redis' }) - t.equal(flagMetrics.length, 0, 'No uninstrumented flag metric present') - - t.end() + assert.equal(flagMetrics.length, 0, 'No uninstrumented flag metric present') }) // This doesn't test the core http and https modules because we can't detect if // core modules have already been loaded. -tap.test('all instrumented modules should be detected when uninstrumented', function (t) { +test('all instrumented modules should be detected when uninstrumented', (t, end) => { const loaded = [] const instrumentations = Object.keys(shimmer.registeredInstrumentations) @@ -62,16 +63,16 @@ tap.test('all instrumented modules should be detected when uninstrumented', func require(module) loaded.push(module) } catch (err) { - t.comment('failed to load ' + module) + t.diagnostic('failed to load ' + module) } } }) - t.ok(loaded.length > 0, 'should have loaded at least one module') + assert.ok(loaded.length > 0, 'should have loaded at least one module') const agent = helper.instrumentMockedAgent() - t.teardown(() => { + t.after(() => { helper.unloadAgent(agent) }) @@ -87,13 +88,13 @@ tap.test('all instrumented modules should be detected when uninstrumented', func const flagMetrics = metricsJSON.filter(function (metric) { return metric[0].name === 'Supportability/Uninstrumented' }) - t.equal(flagMetrics.length, 1, 'Uninstrumented flag metric present') + assert.equal(flagMetrics.length, 1, 'Uninstrumented flag metric present') if (flagMetrics.length !== 1) { - return t.end() + return end() } - t.ok( + assert.ok( flagMetrics[0][1].callCount > 0, 'Callcount for uninstrumented flag metric > 0 (' + flagMetrics[0][1].callCount + ')' ) @@ -103,15 +104,15 @@ tap.test('all instrumented modules should be detected when uninstrumented', func metricsJSON.forEach(function (metric) { if (metric[0].name === 'Supportability/Uninstrumented/' + module) { - t.ok(metric[1].callCount > 0, 'should have uninstrumented metric for ' + module) + assert.ok(metric[1].callCount > 0, 'should have uninstrumented metric for ' + module) found = true } }) if (!found) { - t.fail('No uninstrumented module metric found for ' + module) + assert.fail('No uninstrumented module metric found for ' + module) } }) - t.end() + end() }) diff --git a/test/integration/flatten.tap.js b/test/unit/util/flatten.test.js similarity index 50% rename from test/integration/flatten.tap.js rename to test/unit/util/flatten.test.js index ebedb18a2a..1d345f6a22 100644 --- a/test/integration/flatten.tap.js +++ b/test/unit/util/flatten.test.js @@ -5,58 +5,53 @@ 'use strict' -const tap = require('tap') -const flatten = require('../../lib/util/flatten') +const test = require('node:test') +const assert = require('node:assert') -tap.test('util.flatten', function (t) { - t.autoend() +const flatten = require('../../../lib/util/flatten') - t.test('flattens things', function (t) { - t.same(flatten({}, '', { a: 5, b: true }), { a: 5, b: true }, '1 level') - t.same( +test('util.flatten', async (t) => { + await t.test('flattens things', () => { + assert.deepStrictEqual(flatten({}, '', { a: 5, b: true }), { a: 5, b: true }, '1 level') + assert.deepStrictEqual( flatten({}, '', { a: 5, b: { c: true, d: 7 } }), { 'a': 5, 'b.c': true, 'b.d': 7 }, '2 levels' ) - t.same( + assert.deepStrictEqual( flatten({}, '', { a: 5, b: { c: true, d: 7, e: { foo: 'efoo', bar: 'ebar' } } }), { 'a': 5, 'b.c': true, 'b.d': 7, 'b.e.foo': 'efoo', 'b.e.bar': 'ebar' }, '3 levels' ) - - t.end() }) - t.test('flattens recursive objects', function (t) { + await t.test('flattens recursive objects', () => { // eslint-disable-next-line sonarjs/prefer-object-literal -- Disabled so we can create cyclical objects const obj = {} obj.x = obj - t.same(flatten({}, '', obj), {}) - - t.end() + assert.deepStrictEqual(flatten({}, '', obj), {}) }) }) -tap.test('util.flatten.keys', function (t) { - t.autoend() - - t.test('gets flattened keys', function (t) { - t.same(flatten.keys({ a: 5, b: true }), ['a', 'b'], '1 level') - t.same(flatten.keys({ a: 5, b: { c: true, d: 7 } }), ['a', 'b.c', 'b.d'], '2 levels') - t.same( +test('util.flatten.keys', async (t) => { + await t.test('gets flattened keys', () => { + assert.deepStrictEqual(flatten.keys({ a: 5, b: true }), ['a', 'b'], '1 level') + assert.deepStrictEqual( + flatten.keys({ a: 5, b: { c: true, d: 7 } }), + ['a', 'b.c', 'b.d'], + '2 levels' + ) + assert.deepStrictEqual( flatten.keys({ a: 5, b: { c: true, d: 7, e: { foo: 'efoo', bar: 'ebar' } } }), ['a', 'b.c', 'b.d', 'b.e.foo', 'b.e.bar'], '3 levels' ) - - t.end() }) - t.test('flattens recursive objects', function (t) { + await t.test('flattens recursive objects', () => { // eslint-disable-next-line sonarjs/prefer-object-literal -- Disabled so we can create cyclical objects const obj = {} obj.x = obj - t.same(flatten.keys(obj), []) - t.end() + assert.deepStrictEqual(flatten.keys(obj), []) }) })