From 5369009c7f0e37c97c3190bf96d901c33a416b59 Mon Sep 17 00:00:00 2001 From: Stefan Nienhuis Date: Thu, 10 Feb 2022 18:36:39 +0100 Subject: [PATCH 1/4] Add default value for traceID header --- Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 48da5237..c6557a67 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -51,14 +51,10 @@ struct Invocation: Hashable { throw Lambda.RuntimeError.invocationMissingHeader(AmazonHeaders.invokedFunctionARN) } - guard let traceID = headers.first(name: AmazonHeaders.traceID) else { - throw Lambda.RuntimeError.invocationMissingHeader(AmazonHeaders.traceID) - } - self.requestID = requestID self.deadlineInMillisSinceEpoch = unixTimeInMilliseconds self.invokedFunctionARN = invokedFunctionARN - self.traceID = traceID + self.traceID = headers.first(name: AmazonHeaders.traceID) ?? "" self.clientContext = headers["Lambda-Runtime-Client-Context"].first self.cognitoIdentity = headers["Lambda-Runtime-Cognito-Identity"].first } From 2124e1136495c2be053bfeefacb36dd8c6e499a9 Mon Sep 17 00:00:00 2001 From: Stefan Nienhuis Date: Fri, 18 Feb 2022 16:40:05 +0100 Subject: [PATCH 2/4] Use generated trace ID instead of empty one Co-authored-by: tomer doron --- Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index c6557a67..43a22cb7 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -54,7 +54,8 @@ struct Invocation: Hashable { self.requestID = requestID self.deadlineInMillisSinceEpoch = unixTimeInMilliseconds self.invokedFunctionARN = invokedFunctionARN - self.traceID = headers.first(name: AmazonHeaders.traceID) ?? "" + self.traceID = headers.first(name: AmazonHeaders.traceID) ?? + "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=0" self.clientContext = headers["Lambda-Runtime-Client-Context"].first self.cognitoIdentity = headers["Lambda-Runtime-Cognito-Identity"].first } From f1ec5e4fa1137a0d3247818e723bf397e40ef169 Mon Sep 17 00:00:00 2001 From: Stefan Nienhuis Date: Fri, 18 Feb 2022 22:32:51 +0100 Subject: [PATCH 3/4] Fix formatting --- Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 43a22cb7..14c5f2a7 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -54,8 +54,7 @@ struct Invocation: Hashable { self.requestID = requestID self.deadlineInMillisSinceEpoch = unixTimeInMilliseconds self.invokedFunctionARN = invokedFunctionARN - self.traceID = headers.first(name: AmazonHeaders.traceID) ?? - "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=0" + self.traceID = headers.first(name: AmazonHeaders.traceID) ?? "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=0" self.clientContext = headers["Lambda-Runtime-Client-Context"].first self.cognitoIdentity = headers["Lambda-Runtime-Cognito-Identity"].first } From 374dc7181210312e31bf98fb8672d5891580b807 Mon Sep 17 00:00:00 2001 From: Stefan Nienhuis Date: Sat, 19 Feb 2022 11:23:37 +0100 Subject: [PATCH 4/4] Implement Invocation traceID test --- .../ControlPlaneRequestTests.swift | 37 +++++++++++++++++++ scripts/soundness.sh | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift diff --git a/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift b/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift new file mode 100644 index 00000000..d55e0b67 --- /dev/null +++ b/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +@testable import AWSLambdaRuntimeCore +import NIOHTTP1 +import XCTest + +class InvocationTest: XCTestCase { + func testInvocationTraceID() throws { + let headers = HTTPHeaders([ + (AmazonHeaders.requestID, "test"), + (AmazonHeaders.deadline, String(Date(timeIntervalSinceNow: 60).millisSinceEpoch)), + (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), + ]) + + var invocation: Invocation? + + XCTAssertNoThrow(invocation = try Invocation(headers: headers)) + XCTAssertNotNil(invocation) + + guard !invocation!.traceID.isEmpty else { + XCTFail("Invocation traceID is empty") + return + } + } +} diff --git a/scripts/soundness.sh b/scripts/soundness.sh index eb9e173b..d9145903 100755 --- a/scripts/soundness.sh +++ b/scripts/soundness.sh @@ -19,7 +19,7 @@ here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" function replace_acceptable_years() { # this needs to replace all acceptable forms with 'YEARS' - sed -e 's/2017-2018/YEARS/' -e 's/2017-2020/YEARS/' -e 's/2017-2021/YEARS/' -e 's/2020-2021/YEARS/' -e 's/2019/YEARS/' -e 's/2020/YEARS/' -e 's/2021/YEARS/' + sed -e 's/2017-2018/YEARS/' -e 's/2017-2020/YEARS/' -e 's/2017-2021/YEARS/' -e 's/2020-2021/YEARS/' -e 's/2019/YEARS/' -e 's/2020/YEARS/' -e 's/2021/YEARS/' -e 's/2022/YEARS/' } printf "=> Checking for unacceptable language... "