Skip to content

Commit

Permalink
refactor: Avoid param reassignment in group_snippet (#303)
Browse files Browse the repository at this point in the history
  • Loading branch information
going-confetti authored Nov 8, 2024
1 parent 685bac9 commit a5a672c
Showing 1 changed file with 16 additions and 43 deletions.
59 changes: 16 additions & 43 deletions resources/group_snippet.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
import execution from 'k6/execution'

// saving the original values
const request = http.request
const asyncRequest = http.asyncRequest
const httpRequest = http.request
const httpAsyncRequest = http.asyncRequest

class Client {
// request instruments the http module's request function with the group header
request(method, url, ...args) {
const group = { 'X-k6-group': trimAndRemovePrefix(execution.vu.tags.group) }
args = instrumentArguments(group, ...args)

return request(method, url, ...args)
return httpRequest(method, url, ...instrumentArguments(args))
}

// asyncRequest instruments the http module's asyncRequest function with the group header
async asyncRequest(method, url, ...args) {
const group = { 'X-k6-group': trimAndRemovePrefix(execution.vu.tags.group) }
args = instrumentArguments(group, ...args)

return asyncRequest(method, url, ...args)
return httpAsyncRequest(method, url, ...instrumentArguments(args))
}

del(url, ...args) {
Expand All @@ -45,44 +39,23 @@ class Client {
}

function trimAndRemovePrefix(input) {
// Use the trim method to remove leading and trailing whitespace
let trimmedInput = input.trim()

// Check if the trimmed input starts with "::" and remove it
if (trimmedInput.startsWith('::')) {
trimmedInput = trimmedInput.slice(2)
}

return trimmedInput
return input.trim().replace(/^::/, '')
}

function instrumentArguments(groupName, ...args) {
switch (args.length) {
case 0:
args.push(null)
// fallthrough to add the header
case 1:
// We only received a body argument
args.push({ headers: groupName })
break
default: // this handles 2 and more just in case someone provided more arguments
// We received both a body and a params argument. In the
// event params would be nullish, we'll instantiate
// a new object.
if (args[1] == null) args[1] = {}

let params = args[1]
if (params.headers == null) {
params.headers = {}
}
Object.assign(params.headers, groupName)
break
function instrumentArguments(args) {
const [body = null, params = {}] = args
const groupHeaders = {
'X-k6-group': trimAndRemovePrefix(execution.vu.tags.group),
}

return args
const updatedParams = Object.assign({}, params, {
headers: Object.assign({}, params.headers || {}, groupHeaders),
})

return [body, updatedParams]
}

function instrumentHTTP(opts) {
function instrumentHTTP(opts = {}) {
const client = new Client(opts)

http.del = client.del.bind(client)
Expand All @@ -96,4 +69,4 @@ function instrumentHTTP(opts) {
http.asyncRequest = client.asyncRequest.bind(client)
}

instrumentHTTP({})
instrumentHTTP()

0 comments on commit a5a672c

Please sign in to comment.