From 1a04ff847b8195e9e5e228849f9dc462ea0e58e7 Mon Sep 17 00:00:00 2001 From: Eric Jizba Date: Fri, 22 Jul 2022 11:02:14 -0700 Subject: [PATCH] Add worker metadata to init response --- src/eventHandlers/WorkerInitHandler.ts | 10 ++++- test/eventHandlers/WorkerInitHandler.test.ts | 44 +++++++++++++------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/eventHandlers/WorkerInitHandler.ts b/src/eventHandlers/WorkerInitHandler.ts index 7e83862f..00bd9eb2 100644 --- a/src/eventHandlers/WorkerInitHandler.ts +++ b/src/eventHandlers/WorkerInitHandler.ts @@ -4,6 +4,7 @@ import { access, constants } from 'fs'; import * as path from 'path'; import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language-worker-protobuf/src/rpc'; +import { version as workerVersion } from '../constants'; import { startApp } from '../startApp'; import { isError } from '../utils/ensureErrorType'; import { nonNullProp } from '../utils/nonNull'; @@ -19,7 +20,14 @@ export class WorkerInitHandler extends EventHandler<'workerInitRequest', 'worker readonly responseName = 'workerInitResponse'; getDefaultResponse(_msg: rpc.IWorkerInitRequest): rpc.IWorkerInitResponse { - return {}; + return { + workerMetadata: { + runtimeName: 'node', + runtimeVersion: process.version, + workerBitness: process.arch, + workerVersion, + }, + }; } async handleEvent(channel: WorkerChannel, msg: rpc.IWorkerInitRequest): Promise { diff --git a/test/eventHandlers/WorkerInitHandler.test.ts b/test/eventHandlers/WorkerInitHandler.test.ts index a1b53350..01edf667 100644 --- a/test/eventHandlers/WorkerInitHandler.test.ts +++ b/test/eventHandlers/WorkerInitHandler.test.ts @@ -27,22 +27,34 @@ export namespace Msg { }; } - export const response: rpc.IStreamingMessage = { - requestId: 'id', - workerInitResponse: { - capabilities: { - RpcHttpBodyOnly: 'true', - RpcHttpTriggerMetadataRemoved: 'true', - IgnoreEmptyValuedRpcHttpHeaders: 'true', - UseNullableValueDictionaryForHttp: 'true', - WorkerStatus: 'true', - TypedDataCollection: 'true', - }, - result: { - status: rpc.StatusResult.Status.Success, + const workerMetadataRegExps = { + 'workerInitResponse.workerMetadata.runtimeVersion': /^v[0-9]+\.[0-9]+\.[0-9]+$/, + 'workerInitResponse.workerMetadata.workerBitness': /^(x64|ia32|arm64)$/, + 'workerInitResponse.workerMetadata.workerVersion': /^3\.[0-9]+\.[0-9]+$/, + }; + + export const response = new RegExpStreamingMessage( + { + requestId: 'id', + workerInitResponse: { + capabilities: { + RpcHttpBodyOnly: 'true', + RpcHttpTriggerMetadataRemoved: 'true', + IgnoreEmptyValuedRpcHttpHeaders: 'true', + UseNullableValueDictionaryForHttp: 'true', + WorkerStatus: 'true', + TypedDataCollection: 'true', + }, + result: { + status: rpc.StatusResult.Status.Success, + }, + workerMetadata: { + runtimeName: 'node', + }, }, }, - }; + workerMetadataRegExps + ); export function failedResponse(fileName: string, errorMessage: string): RegExpStreamingMessage { const expectedMsg: rpc.IStreamingMessage = { @@ -54,12 +66,16 @@ export namespace Msg { message: errorMessage, }, }, + workerMetadata: { + runtimeName: 'node', + }, }, }; return new RegExpStreamingMessage(expectedMsg, { 'workerInitResponse.result.exception.stackTrace': new RegExp( `Error: ${escapeStringRegexp(errorMessage)}\\s*at` ), + ...workerMetadataRegExps, }); }