blob: 08b7fd3b74693778021e5460c9ebfed8841e0d4e [file]
/*!
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/* eslint-env jest */
const registeredServiceNames = new Set<string>();
jest.mock('../../src/agent/core/boot/ServiceManager', () => ({
__esModule: true,
default: {
INSTANCE: {
boot: jest.fn(() => {
registeredServiceNames.clear();
registeredServiceNames.add('GRPCChannelManager');
registeredServiceNames.add('TraceSegmentServiceClient');
registeredServiceNames.add('ServiceManagementClient');
const { default: agentConfig } = jest.requireActual('../../src/config/AgentConfig') as {
default: { runtimeMetricsReporterActive?: boolean };
};
if (agentConfig.runtimeMetricsReporterActive) {
registeredServiceNames.add('MeterSender');
}
}),
shutdown: jest.fn(() => {
registeredServiceNames.clear();
}),
flush: jest.fn(),
findService: jest.fn((serviceClass: { name: string }) =>
registeredServiceNames.has(serviceClass.name) ? {} : undefined,
),
},
},
}));
jest.mock('../../src/core/PluginInstaller', () => ({
__esModule: true,
default: jest.fn().mockImplementation(() => ({
install: jest.fn(),
})),
}));
import agent, { config } from '../../src/index';
import ServiceManager from '../../src/agent/core/boot/ServiceManager';
import MeterSender from '../../src/agent/core/meter/MeterSender';
import { AgentConfig, normalizeDeprecatedRuntimeMetricOptions } from '../../src/config/AgentConfig';
function resetRuntimeMetricConfig(): void {
const mutableConfig = config as AgentConfig;
mutableConfig.runtimeMetricsReporterActive = true;
mutableConfig.runtimeMetricsCollectPeriod = 1000;
mutableConfig.runtimeMetricsReportPeriod = 1000;
mutableConfig.runtimeMetricsBufferSize = 600;
delete mutableConfig.nvmMetricsReporterActive;
delete mutableConfig.nvmJvmReporterActive;
delete mutableConfig.nvmMetricsCollectPeriod;
delete mutableConfig.nvmJvmMetricsCollectPeriod;
delete mutableConfig.nvmMetricsReportPeriod;
delete mutableConfig.nvmJvmMetricsReportPeriod;
delete mutableConfig.nvmMetricsBufferSize;
delete mutableConfig.nvmJvmMetricsBufferSize;
}
describe('AgentConfig deprecated runtime metric options (unit)', () => {
afterEach(() => {
agent.destroy();
resetRuntimeMetricConfig();
});
it('maps deprecated programmatic aliases before merge', () => {
const normalized = normalizeDeprecatedRuntimeMetricOptions({
nvmMetricsReporterActive: false,
nvmMetricsCollectPeriod: 2000,
nvmMetricsReportPeriod: 3000,
nvmMetricsBufferSize: 42,
});
expect(normalized.runtimeMetricsReporterActive).toBe(false);
expect(normalized.runtimeMetricsCollectPeriod).toBe(2000);
expect(normalized.runtimeMetricsReportPeriod).toBe(3000);
expect(normalized.runtimeMetricsBufferSize).toBe(42);
});
it('maps nvmJvm deprecated aliases before merge', () => {
const normalized = normalizeDeprecatedRuntimeMetricOptions({
nvmJvmReporterActive: false,
nvmJvmMetricsCollectPeriod: 2222,
nvmJvmMetricsReportPeriod: 3333,
nvmJvmMetricsBufferSize: 44,
});
expect(normalized.runtimeMetricsReporterActive).toBe(false);
expect(normalized.runtimeMetricsCollectPeriod).toBe(2222);
expect(normalized.runtimeMetricsReportPeriod).toBe(3333);
expect(normalized.runtimeMetricsBufferSize).toBe(44);
});
it('keeps explicit canonical options over deprecated aliases', () => {
const normalized = normalizeDeprecatedRuntimeMetricOptions({
runtimeMetricsReporterActive: true,
nvmMetricsReporterActive: false,
});
expect(normalized.runtimeMetricsReporterActive).toBe(true);
expect(normalized.nvmMetricsReporterActive).toBeUndefined();
expect(normalized.nvmJvmReporterActive).toBeUndefined();
});
it('disables runtime metrics when agent.start receives nvmMetrics alias', () => {
agent.start({ nvmMetricsReporterActive: false });
expect(config.runtimeMetricsReporterActive).toBe(false);
expect(ServiceManager.INSTANCE.findService(MeterSender)).toBeUndefined();
});
it('disables runtime metrics when agent.start receives nvmJvm alias', () => {
agent.start({ nvmJvmReporterActive: false });
expect(config.runtimeMetricsReporterActive).toBe(false);
expect(ServiceManager.INSTANCE.findService(MeterSender)).toBeUndefined();
});
it('disables runtime metrics when deprecated alias is set on exported config', () => {
(config as AgentConfig).nvmMetricsReporterActive = false;
agent.start();
expect(config.runtimeMetricsReporterActive).toBe(false);
expect(ServiceManager.INSTANCE.findService(MeterSender)).toBeUndefined();
});
it('maps deprecated aliases without leaving stale alias keys on normalized options', () => {
const normalized = normalizeDeprecatedRuntimeMetricOptions({
nvmMetricsReporterActive: false,
});
expect(normalized.runtimeMetricsReporterActive).toBe(false);
expect(normalized.nvmMetricsReporterActive).toBeUndefined();
expect(normalized.nvmJvmReporterActive).toBeUndefined();
});
it('re-enables runtime metrics after destroy/start with canonical option', () => {
agent.start({ nvmMetricsReporterActive: false });
expect(config.runtimeMetricsReporterActive).toBe(false);
expect((config as AgentConfig).nvmMetricsReporterActive).toBeUndefined();
agent.destroy();
agent.start({ runtimeMetricsReporterActive: true });
expect(config.runtimeMetricsReporterActive).toBe(true);
expect((config as AgentConfig).nvmMetricsReporterActive).toBeUndefined();
expect(ServiceManager.INSTANCE.findService(MeterSender)).toBeDefined();
});
});