@@ -145,6 +145,50 @@ public void run(TestContext ctx) {
145145 lambda .deleteFunction (DeleteFunctionRequest .builder ()
146146 .functionName (rubyFn ).build ());
147147 } catch (Exception ignored ) {}
148+
149+ // provided.al2023 custom runtime (bootstrap shell script)
150+ String providedFn = "sdk-invoke-provided-fn" ;
151+ try {
152+ lambda .createFunction (CreateFunctionRequest .builder ()
153+ .functionName (providedFn )
154+ .runtime (Runtime .PROVIDED_AL2023 )
155+ .role (role )
156+ .handler ("bootstrap" )
157+ .timeout (30 )
158+ .memorySize (256 )
159+ .code (FunctionCode .builder ()
160+ .zipFile (SdkBytes .fromByteArray (LambdaUtils .providedRuntimeZip ()))
161+ .build ())
162+ .build ());
163+ ctx .check ("Lambda provided.al2023 Invoke: CreateFunction" , true );
164+ } catch (Exception e ) {
165+ ctx .check ("Lambda provided.al2023 Invoke: CreateFunction" , false , e );
166+ return ;
167+ }
168+
169+ try {
170+ System .out .println (" (provided.al2023 cold start — waiting for container...)" );
171+ InvokeResponse resp = lambda .invoke (InvokeRequest .builder ()
172+ .functionName (providedFn )
173+ .invocationType (InvocationType .REQUEST_RESPONSE )
174+ .payload (SdkBytes .fromUtf8String ("{}" ))
175+ .build ());
176+
177+ String payload = resp .payload ().asUtf8String ();
178+ System .out .println (" provided.al2023 response payload: " + payload );
179+
180+ boolean ok = resp .statusCode () == 200
181+ && resp .functionError () == null
182+ && payload .contains ("hello from provided runtime" );
183+ ctx .check ("Lambda provided.al2023 Invoke: RequestResponse" , ok );
184+ } catch (Exception e ) {
185+ ctx .check ("Lambda provided.al2023 Invoke: RequestResponse" , false , e );
186+ }
187+
188+ try {
189+ lambda .deleteFunction (DeleteFunctionRequest .builder ()
190+ .functionName (providedFn ).build ());
191+ } catch (Exception ignored ) {}
148192 }
149193 }
150194}
0 commit comments