Skip to content

Commit 31564e4

Browse files
committed
Updated to generate requests once every 45 seconds
1 parent 6c5d43b commit 31564e4

File tree

1 file changed

+108
-156
lines changed

1 file changed

+108
-156
lines changed

performance-testing/uid2-operator/k6-uid2-operator-encrypt-inline.js

Lines changed: 108 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,73 @@
1-
import {crypto} from "k6/experimental/webcrypto";
1+
import { crypto } from "k6/experimental/webcrypto";
22
import encoding from 'k6/encoding';
3-
import {check} from 'k6';
3+
import { check } from 'k6';
44
import http from 'k6/http';
55

6-
const testDurationInSeconds = 2500;
7-
const tokenGenerateTests = true;
8-
const tokenRefreshTests = true;
9-
const identityMapTests = true;
10-
const identityBucketTests = true;
11-
6+
const generateVUs = 10;
7+
const refreshVUs = 10;
8+
const identityMapVUs = 10;
9+
const testDuration = '30s'
1210

1311
//30 warm up on each
1412
// 5 min each
1513
// 12, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600
1614
// 13 scenarios, each 5.5 min = 4290 se
1715

1816
export const options = {
19-
insecureSkipTLSVerify: true,
20-
noConnectionReuse: true,
17+
insecureSkipTLSVerify: true,
18+
noConnectionReuse: false,
2119
scenarios: {
2220
// Warmup scenarios
21+
2322
tokenGenerateWarmup: {
24-
executor: 'constant-vus',
23+
executor: 'ramping-vus',
2524
exec: 'tokenGenerate',
26-
vus: 300,
27-
duration: '30s',
28-
gracefulStop: '0s',
29-
}/*,
25+
stages: [
26+
{ duration: '30s', target: generateVUs}
27+
],
28+
gracefulRampDown: '0s',
29+
},
3030
tokenRefreshWarmup: {
31-
executor: 'constant-vus',
31+
executor: 'ramping-vus',
3232
exec: 'tokenRefresh',
33-
vus: 300,
34-
duration: '30s',
35-
gracefulStop: '0s',
33+
stages: [
34+
{ duration: '30s', target: refreshVUs}
35+
],
36+
gracefulRampDown: '0s',
3637
},
3738
identityMapWarmup: {
38-
executor: 'constant-vus',
39+
executor: 'ramping-vus',
3940
exec: 'identityMap',
40-
vus: 300,
41-
duration: '30s',
42-
gracefulStop: '0s',
43-
},
44-
identityBucketsWarmup: {
45-
executor: 'constant-vus',
46-
exec: 'identityBuckets',
47-
vus: 2,
48-
duration: '30s',
49-
gracefulStop: '0s',
41+
stages: [
42+
{ duration: '30s', target: identityMapVUs}
43+
],
44+
gracefulRampDown: '0s',
5045
},
5146
// Actual testing scenarios
5247
tokenGenerate: {
5348
executor: 'constant-vus',
5449
exec: 'tokenGenerate',
55-
vus: 300,
56-
duration: '300s',
50+
vus: generateVUs,
51+
duration: testDuration,
5752
gracefulStop: '0s',
58-
startTime: '40s',
53+
startTime: '30s',
5954
},
6055
tokenRefresh: {
6156
executor: 'constant-vus',
6257
exec: 'tokenRefresh',
63-
vus: 300,
64-
duration: '300s',
58+
vus: refreshVUs,
59+
duration: testDuration,
6560
gracefulStop: '0s',
66-
startTime: '350s',
61+
startTime: '30s',
6762
},
6863
identityMap: {
6964
executor: 'constant-vus',
70-
exec: 'identityMap',
71-
vus: 300,
72-
duration: '300s',
65+
exec: 'identityMapLargeBatch',
66+
vus: identityMapVUs,
67+
duration: testDuration,
7368
gracefulStop: '0s',
74-
startTime: '660s',
75-
},
69+
startTime: '30s',
70+
},/*
7671
identityMapLargeBatchSequential: {
7772
executor: 'constant-vus',
7873
exec: 'identityMapLargeBatch',
@@ -125,12 +120,14 @@ const clientKey = __ENV.CLIENT_KEY;
125120
const baseUrl = __ENV.BASE_URL;
126121

127122
export async function setup() {
128-
// pregenerate the envelopes so they don't expire, but can be reused. Means the load test is not constrained by the client
129-
// Each is used for 45 sec. Add 2 to ensure we have enough
130-
const numberOfRequestsToGenerate = Math.round(testDurationInSeconds / 45) + 2;
131-
123+
var token = await generateRefreshRequest();
124+
return {
125+
tokenGenerate: null,
126+
identityMap: null,
127+
refreshToken: token
128+
};
132129

133-
async function generateRefreshRequest(data) {
130+
async function generateRefreshRequest() {
134131
let request = await createReq( {'optout_check': 1, 'email': '[email protected]'});
135132
var requestData = {
136133
endpoint: '/v2/token/generate',
@@ -141,89 +138,63 @@ export async function setup() {
141138
return decrypt.body.refresh_token;
142139
};
143140

144-
145-
146-
let tokenGenerateData = {};
147-
if (tokenGenerateTests) {
148-
tokenGenerateData = {
149-
endpoint: '/v2/token/generate',
150-
requestData: await generateFutureGenerateRequests(numberOfRequestsToGenerate),
151-
};
152-
}
153-
let tokenRefreshData = {};
154-
if(tokenRefreshTests) {
155-
tokenRefreshData = {
156-
endpoint: '/v2/token/refresh',
157-
requestBody: await generateRefreshRequest(tokenGenerateData),
158-
};
159-
}
160-
161-
let identityMapData = {};
162-
let identityMapLargeBatchData = {};
163-
if(identityMapTests) {
164-
identityMapData = {
165-
endpoint: '/v2/identity/map',
166-
requestData: await generateFutureMapRequest(numberOfRequestsToGenerate, 2)
167-
};
168-
identityMapLargeBatchData = {
169-
requestData: await generateFutureMapRequest(numberOfRequestsToGenerate, 5000)
170-
};
171-
}
172-
173-
let identityBucketData = {}
174-
if(identityBucketTests) {
175-
identityBucketData = {
176-
endpoint: '/v2/identity/buckets',
177-
requestData: await generateFutureBucketRequests(numberOfRequestsToGenerate)
178-
};
179-
}
180-
181-
return {
182-
tokenGenerate: tokenGenerateData,
183-
tokenRefresh: tokenRefreshData,
184-
identityMap: identityMapData,
185-
identityMapLargeBatch: identityMapLargeBatchData,
186-
identityBuckets: identityBucketData
187-
};
188141
}
189142

190143
// Scenarios
191-
export function tokenGenerate(data) {
192-
var requestData = data.tokenGenerate.requestData;
193-
var elementToUse = selectRequestData(requestData);
144+
export async function tokenGenerate(data) {
145+
const endpoint = '/v2/token/generate';
146+
if (data.tokenGenerate == null) {
147+
var newData = await generateTokenGenerateRequestWithTime();
148+
data.tokenGenerate = newData;
149+
} else if (data.tokenGenerate.time < (Date.now() - 45000)) {
150+
data.tokenGenerate = await generateTokenGenerateRequestWithTime();
151+
}
194152

153+
var requestBody = data.tokenGenerate.requestBody;
195154
var tokenGenerateData = {
196-
endpoint: data.tokenGenerate.endpoint,
197-
requestBody: elementToUse.requestBody,
155+
endpoint: endpoint,
156+
requestBody: requestBody,
198157
}
158+
199159
execute(tokenGenerateData, true);
200160
}
201161

202162
export function tokenRefresh(data) {
203-
execute(data.tokenRefresh, false);
163+
var requestBody = data.refreshToken;
164+
var refreshData = {
165+
endpoint: '/v2/token/refresh',
166+
requestBody: requestBody
167+
}
168+
169+
execute(refreshData, false);
204170
}
205171

206-
export function identityMap(data) {
207-
var requestData = data.identityMap.requestData;
208-
var elementToUse = selectRequestData(requestData);
172+
export async function identityMap(data) {
173+
const endpoint = '/v2/identity/map';
174+
if ((data.identityMap == null) || (data.identityMap.time < (Date.now() - 45000))) {
175+
data.identityMap = await generateIdentityMapRequestWithTime(2);;
176+
}
209177

178+
var requestBody = data.identityMap.requestBody;
210179
var identityData = {
211-
endpoint: '/v2/identity/map',
212-
requestBody: elementToUse.requestBody,
180+
endpoint: endpoint,
181+
requestBody: requestBody,
213182
}
214183
execute(identityData, true);
215184
}
216185

217-
export function identityMapLargeBatch(data) {
218-
var requestData = data.identityMapLargeBatch.requestData;
219-
var elementToUse = selectRequestData(requestData);
186+
export async function identityMapLargeBatch(data) {
187+
const endpoint = '/v2/identity/map';
188+
if ((data.identityMap == null) || (data.identityMap.time < (Date.now() - 45000))) {
189+
data.identityMap = await generateIdentityMapRequestWithTime(5000);;
190+
}
220191

192+
var requestBody = data.identityMap.requestBody;
221193
var identityData = {
222-
endpoint: '/v2/identity/map',
223-
requestBody: elementToUse.requestBody,
194+
endpoint: endpoint,
195+
requestBody: requestBody,
224196
}
225-
226-
execute(identityData, true);
197+
execute(identityData, true);
227198
}
228199

229200
export function identityBuckets(data) {
@@ -238,24 +209,6 @@ export function identityBuckets(data) {
238209
}
239210

240211
// Helpers
241-
function selectRequestData(requestData) {
242-
var elementToUse = requestData[0];
243-
for (var i = 0; i < requestData.length; i++) {
244-
var currentTime = Date.now() + 5000;
245-
if (currentTime > requestData[i].time && currentTime < requestData[i + 1].time) {
246-
elementToUse = requestData[i];
247-
//console.log("VU: " + exec.vu.idInTest + ", item: " + i);
248-
break;
249-
}
250-
}
251-
return elementToUse;
252-
}
253-
254-
async function createReq(obj) {
255-
var envelope = getEnvelope(obj);
256-
return encoding.b64encode((await encryptEnvelope(envelope, clientSecret)).buffer);
257-
};
258-
259212
async function createReqWithTimestamp(timestampArr, obj) {
260213
var envelope = getEnvelopeWithTimestamp(timestampArr, obj);
261214
return encoding.b64encode((await encryptEnvelope(envelope, clientSecret)).buffer);
@@ -335,13 +288,13 @@ async function decryptEnvelope(envelope, clientSecret) {
335288
const iv = rawData.slice(0, 12);
336289

337290
const decrypted = await crypto.subtle.decrypt(
338-
{
339-
name: "AES-GCM",
340-
iv: iv,
341-
tagLength: 128
342-
},
343-
key,
344-
rawData.slice(12)
291+
{
292+
name: "AES-GCM",
293+
iv: iv,
294+
tagLength: 128
295+
},
296+
key,
297+
rawData.slice(12)
345298
);
346299

347300

@@ -415,29 +368,32 @@ function stringToUint8Array(str) {
415368
return view;
416369
}
417370

418-
async function generateFutureRequests(count, obj) {
419-
const result = [];
420-
for (var i = 0; i < count; i++) {
421-
var time = Date.now() + (i * 45000)
422-
var timestampArr = new Uint8Array(getTimestampFromTime(time));
423-
var requestBody = await createReqWithTimestamp(timestampArr, obj);
424-
var element = {
425-
time: time,
426-
requestBody: requestBody
427-
};
428-
result.push(element);
429-
}
430-
return result;
371+
async function createReq(obj) {
372+
var envelope = getEnvelope(obj);
373+
return encoding.b64encode((await encryptEnvelope(envelope, clientSecret)).buffer);
374+
};
375+
376+
async function generateRequestWithTime(obj) {
377+
var time = Date.now();
378+
var timestampArr = new Uint8Array(getTimestampFromTime(time));
379+
var requestBody = await createReqWithTimestamp(timestampArr, obj);
380+
var element = {
381+
time: time,
382+
requestBody: requestBody
383+
};
384+
385+
return element;
431386
}
432387

433-
async function generateFutureMapRequest(count, emailCount) {
434-
let emails = generateIdentityMapRequest(emailCount);
435-
return await generateFutureRequests(count, emails);
388+
389+
async function generateTokenGenerateRequestWithTime() {
390+
let requestData = { 'optout_check': 1, 'email': '[email protected]' };
391+
return await generateRequestWithTime(requestData);
436392
}
437393

438-
async function generateFutureGenerateRequests(count) {
439-
let obj = {'optout_check': 1, 'email': '[email protected]'};
440-
return await generateFutureRequests(count, obj)
394+
async function generateIdentityMapRequestWithTime(emailCount) {
395+
let emails = generateIdentityMapRequest(emailCount);
396+
return await generateRequestWithTime(emails);
441397
}
442398

443399
const generateSinceTimestampStr = () => {
@@ -449,7 +405,3 @@ const generateSinceTimestampStr = () => {
449405
return `${year}-${month}-${day}T00:00:00`;
450406
};
451407

452-
async function generateFutureBucketRequests(count) {
453-
let obj = {"since_timestamp": generateSinceTimestampStr()};
454-
return await generateFutureRequests(count, obj)
455-
}

0 commit comments

Comments
 (0)