| 'use strict'; |
| |
| const common = require('../common'); |
| const dc = require('diagnostics_channel'); |
| const assert = require('assert'); |
| const { Channel } = dc; |
| |
| const input = { |
| foo: 'bar' |
| }; |
| |
| // Should not have named channel |
| assert.ok(!dc.hasSubscribers('test')); |
| |
| // Individual channel objects can be created to avoid future lookups |
| const channel = dc.channel('test'); |
| assert.ok(channel instanceof Channel); |
| |
| // No subscribers yet, should not publish |
| assert.ok(!channel.hasSubscribers); |
| |
| const subscriber = common.mustCall((message, name) => { |
| assert.strictEqual(name, channel.name); |
| assert.deepStrictEqual(message, input); |
| }); |
| |
| // Now there's a subscriber, should publish |
| channel.subscribe(subscriber); |
| assert.ok(channel.hasSubscribers); |
| |
| // The ActiveChannel prototype swap should not fail instanceof |
| assert.ok(channel instanceof Channel); |
| |
| // Should trigger the subscriber once |
| channel.publish(input); |
| |
| // Should not publish after subscriber is unsubscribed |
| assert.ok(channel.unsubscribe(subscriber)); |
| assert.ok(!channel.hasSubscribers); |
| |
| // unsubscribe() should return false when subscriber is not found |
| assert.ok(!channel.unsubscribe(subscriber)); |
| |
| assert.throws(() => { |
| channel.subscribe(null); |
| }, { code: 'ERR_INVALID_ARG_TYPE' }); |