From b56c02101351b5c2116fbfea955c86a4f9455d05 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Fri, 28 Aug 2026 13:28:36 +0300 Subject: [PATCH] test: cover lossless custom metrics IDs --- src/shadowbox/server/manager_metrics.spec.ts | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/shadowbox/server/manager_metrics.spec.ts b/src/shadowbox/server/manager_metrics.spec.ts index ed3107ff..2398c784 100644 --- a/src/shadowbox/server/manager_metrics.spec.ts +++ b/src/shadowbox/server/manager_metrics.spec.ts @@ -427,4 +427,34 @@ describe('PrometheusManagerMetrics', () => { expect(bytesTransferredByUserId['access-key-2']).toEqual(10000); done(); }); + + it('preserves custom access key IDs in server metrics', async () => { + const accessKeyIds = ['custom-id', '001', '9007199254740993']; + const prometheusClient = { + query: async (query: string): Promise => { + if (query.includes('shadowsocks_data_bytes{')) { + return { + resultType: 'vector', + result: accessKeyIds.map((accessKey, index) => ({ + metric: {access_key: accessKey}, + value: [1, String(index + 1)], + })), + }; + } + return {resultType: 'vector', result: []}; + }, + queryRange: async (query: string): Promise => { + if (query.includes('shadowsocks_data_bytes_per_location')) { + return {resultType: 'matrix', result: [{metric: {}, values: []}]}; + } + return {resultType: 'matrix', result: []}; + }, + } as PrometheusClient; + const managerMetrics = new PrometheusManagerMetrics(prometheusClient); + + const serverMetrics = await managerMetrics.getServerMetrics({seconds: 0}); + + expect(serverMetrics.accessKeys.map((entry) => entry.accessKeyId)).toEqual(accessKeyIds); + }); + });