@@ -9,6 +9,16 @@ import StatsDClient from "hot-shots";
9
9
import { Context } from "aws-lambda" ;
10
10
jest . mock ( "hot-shots" ) ;
11
11
12
+ jest . mock ( "aws-sdk/clients/secretsmanager" , ( ) => {
13
+ return jest . fn ( ) . mockImplementation ( ( ) => ( {
14
+ getSecretValue : jest . fn ( ) . mockReturnValue ( {
15
+ promise : jest . fn ( ) . mockResolvedValue ( {
16
+ SecretString : "api-key-secret" ,
17
+ } ) ,
18
+ } ) ,
19
+ } ) ) ;
20
+ } ) ;
21
+
12
22
const siteURL = "example.com" ;
13
23
14
24
class MockKMS {
@@ -34,6 +44,7 @@ describe("MetricsListener", () => {
34
44
const listener = new MetricsListener ( kms as any , {
35
45
apiKey : "api-key" ,
36
46
apiKeyKMS : "kms-api-key-encrypted" ,
47
+ apiKeySecretARN : "api-key-secret-arn" ,
37
48
enhancedMetrics : false ,
38
49
logForwarding : false ,
39
50
shouldRetryMetrics : false ,
@@ -54,6 +65,7 @@ describe("MetricsListener", () => {
54
65
const listener = new MetricsListener ( kms as any , {
55
66
apiKey : "" ,
56
67
apiKeyKMS : "kms-api-key-encrypted" ,
68
+ apiKeySecretARN : "api-key-secret-arn" ,
57
69
enhancedMetrics : false ,
58
70
logForwarding : false ,
59
71
shouldRetryMetrics : false ,
@@ -67,11 +79,35 @@ describe("MetricsListener", () => {
67
79
68
80
expect ( nock . isDone ( ) ) . toBeTruthy ( ) ;
69
81
} ) ;
82
+
83
+ it ( "extracts the API Key from the secret manager to send a metric" , async ( ) => {
84
+ nock ( "https://api.example.com" ) . post ( "/api/v1/distribution_points?api_key=api-key-secret" ) . reply ( 200 , { } ) ;
85
+
86
+ const kms = new MockKMS ( "kms-api-key-decrypted" ) ;
87
+ const listener = new MetricsListener ( kms as any , {
88
+ apiKey : "" ,
89
+ apiKeyKMS : "" ,
90
+ apiKeySecretARN : "api-key-secret-arn" ,
91
+ enhancedMetrics : false ,
92
+ logForwarding : false ,
93
+ shouldRetryMetrics : false ,
94
+ localTesting : false ,
95
+ siteURL,
96
+ } ) ;
97
+
98
+ await listener . onStartInvocation ( { } ) ;
99
+ listener . sendDistributionMetricWithDate ( "my-metric" , 10 , new Date ( ) , false , "tag:a" , "tag:b" ) ;
100
+ await listener . onCompleteInvocation ( ) ;
101
+
102
+ expect ( nock . isDone ( ) ) . toBeTruthy ( ) ;
103
+ } ) ;
104
+
70
105
it ( "doesn't throw an error if it can't get a valid apiKey" , async ( ) => {
71
106
const kms = new MockKMS ( "kms-api-key-decrypted" , new Error ( "The error" ) ) ;
72
107
const listener = new MetricsListener ( kms as any , {
73
108
apiKey : "" ,
74
109
apiKeyKMS : "kms-api-key-encrypted" ,
110
+ apiKeySecretARN : "api-key-secret-arn" ,
75
111
enhancedMetrics : false ,
76
112
logForwarding : false ,
77
113
shouldRetryMetrics : false ,
@@ -91,6 +127,7 @@ describe("MetricsListener", () => {
91
127
const listener = new MetricsListener ( kms as any , {
92
128
apiKey : "api-key" ,
93
129
apiKeyKMS : "kms-api-key-encrypted" ,
130
+ apiKeySecretARN : "api-key-secret-arn" ,
94
131
enhancedMetrics : false ,
95
132
logForwarding : true ,
96
133
shouldRetryMetrics : false ,
@@ -124,6 +161,7 @@ describe("MetricsListener", () => {
124
161
const listener = new MetricsListener ( kms as any , {
125
162
apiKey : "api-key" ,
126
163
apiKeyKMS : "" ,
164
+ apiKeySecretARN : "api-key-secret-arn" ,
127
165
enhancedMetrics : false ,
128
166
logForwarding : true ,
129
167
shouldRetryMetrics : false ,
@@ -159,6 +197,7 @@ describe("MetricsListener", () => {
159
197
const listener = new MetricsListener ( kms as any , {
160
198
apiKey : "api-key" ,
161
199
apiKeyKMS : "" ,
200
+ apiKeySecretARN : "api-key-secret-arn" ,
162
201
enhancedMetrics : false ,
163
202
logForwarding : false ,
164
203
shouldRetryMetrics : false ,
@@ -198,6 +237,7 @@ describe("MetricsListener", () => {
198
237
const listener = new MetricsListener ( kms as any , {
199
238
apiKey : "api-key" ,
200
239
apiKeyKMS : "" ,
240
+ apiKeySecretARN : "api-key-secret-arn" ,
201
241
enhancedMetrics : false ,
202
242
logForwarding : false ,
203
243
shouldRetryMetrics : false ,
@@ -219,6 +259,7 @@ describe("MetricsListener", () => {
219
259
const listener = new MetricsListener ( kms as any , {
220
260
apiKey : "api-key" ,
221
261
apiKeyKMS : "kms-api-key-encrypted" ,
262
+ apiKeySecretARN : "api-key-secret-arn" ,
222
263
enhancedMetrics : false ,
223
264
logForwarding : true ,
224
265
shouldRetryMetrics : false ,
0 commit comments