From 2b3d5d8878f5555c88afba4ef4ee06a9e145fea0 Mon Sep 17 00:00:00 2001 From: Adwait Kumar Singh Date: Mon, 17 Feb 2025 14:53:58 -0800 Subject: [PATCH] Really enable exception response tests --- .../jsonprotocols/AwsJson1ProtocolTests.java | 8 +++++- .../aws/restjson/RestJson1ProtocolTests.java | 6 ++++- .../client/restxml/RestXmlProtocolTests.java | 4 +++ .../restjson/AwsRestJson1ProtocolTests.java | 3 +++ .../client/rpcv2/RpcV2CborProtocolTests.java | 5 +++- .../harness/ProtocolTestExtension.java | 27 +++++++++---------- 6 files changed, 36 insertions(+), 17 deletions(-) diff --git a/aws/client/aws-client-awsjson/src/it/java/software/amazon/smithy/java/client/aws/jsonprotocols/AwsJson1ProtocolTests.java b/aws/client/aws-client-awsjson/src/it/java/software/amazon/smithy/java/client/aws/jsonprotocols/AwsJson1ProtocolTests.java index cf381c30a..cc6aad63c 100644 --- a/aws/client/aws-client-awsjson/src/it/java/software/amazon/smithy/java/client/aws/jsonprotocols/AwsJson1ProtocolTests.java +++ b/aws/client/aws-client-awsjson/src/it/java/software/amazon/smithy/java/client/aws/jsonprotocols/AwsJson1ProtocolTests.java @@ -50,7 +50,13 @@ public void requestTest(DataStream expected, DataStream actual) { @ProtocolTestFilter( skipTests = { "AwsJson10ClientPopulatesDefaultsValuesWhenMissingInResponse", - "AwsJson10ClientIgnoresDefaultValuesIfMemberValuesArePresentInResponse" + "AwsJson10ClientIgnoresDefaultValuesIfMemberValuesArePresentInResponse", + //The below fail because we haven't implemented code based exception handling + "AwsJson10FooErrorUsingCode", + "AwsJson10FooErrorUsingCodeAndNamespace", + "AwsJson10FooErrorUsingCodeUriAndNamespace", + "AwsJson10FooErrorWithDunderTypeUriAndNamespace" + }, skipOperations = "aws.protocoltests.json10#OperationWithRequiredMembersWithDefaults") public void responseTest(Runnable test) { diff --git a/aws/client/aws-client-restjson/src/it/java/software/amazon/smithy/java/client/aws/restjson/RestJson1ProtocolTests.java b/aws/client/aws-client-restjson/src/it/java/software/amazon/smithy/java/client/aws/restjson/RestJson1ProtocolTests.java index e01cfa6aa..a5a010a5a 100644 --- a/aws/client/aws-client-restjson/src/it/java/software/amazon/smithy/java/client/aws/restjson/RestJson1ProtocolTests.java +++ b/aws/client/aws-client-restjson/src/it/java/software/amazon/smithy/java/client/aws/restjson/RestJson1ProtocolTests.java @@ -66,7 +66,11 @@ public void requestTest(DataStream expected, DataStream actual) { @HttpClientResponseTests @ProtocolTestFilter( skipTests = { - "RestJsonInputAndOutputWithQuotedStringHeaders" + "RestJsonInputAndOutputWithQuotedStringHeaders", + "RestJsonFooErrorUsingCode", + "RestJsonFooErrorUsingCodeAndNamespace", + "RestJsonFooErrorUsingCodeUriAndNamespace", + "RestJsonFooErrorWithDunderTypeUriAndNamespace" }) public void responseTest(Runnable test) { test.run(); diff --git a/aws/client/aws-client-restxml/src/it/java/software/amazon/smithy/java/aws/client/restxml/RestXmlProtocolTests.java b/aws/client/aws-client-restxml/src/it/java/software/amazon/smithy/java/aws/client/restxml/RestXmlProtocolTests.java index 51ec9a37d..8d3ac8091 100644 --- a/aws/client/aws-client-restxml/src/it/java/software/amazon/smithy/java/aws/client/restxml/RestXmlProtocolTests.java +++ b/aws/client/aws-client-restxml/src/it/java/software/amazon/smithy/java/aws/client/restxml/RestXmlProtocolTests.java @@ -57,6 +57,10 @@ public void requestTest(DataStream expected, DataStream actual) { } @HttpClientResponseTests + @ProtocolTestFilter(skipTests = { + "InvalidGreetingError", + "ComplexError" + }) public void responseTest(Runnable test) { test.run(); } diff --git a/aws/server/aws-server-restjson/src/it/java/software/amazon/smithy/java/server/protocols/restjson/AwsRestJson1ProtocolTests.java b/aws/server/aws-server-restjson/src/it/java/software/amazon/smithy/java/server/protocols/restjson/AwsRestJson1ProtocolTests.java index f576a6187..062933a73 100644 --- a/aws/server/aws-server-restjson/src/it/java/software/amazon/smithy/java/server/protocols/restjson/AwsRestJson1ProtocolTests.java +++ b/aws/server/aws-server-restjson/src/it/java/software/amazon/smithy/java/server/protocols/restjson/AwsRestJson1ProtocolTests.java @@ -73,7 +73,10 @@ public void requestTest(Runnable test) { "RestJsonStreamingTraitsWithMediaTypeWithBlob", "RestJsonDeserializesDenseSetMapAndSkipsNull", "RestJsonServerPopulatesDefaultsInResponseWhenMissingInParams", + // These can be fixed after https://github.com/smithy-lang/smithy-java/blob/main/http-binding/src/main/java/software/amazon/smithy/java/http/binding/HttpBindingSerializer.java#L109 "RestJsonInvalidGreetingError", + "RestJsonComplexErrorWithNoMessage", + "RestJsonEmptyComplexErrorWithNoMessage", //TODO this breaks because of Validation and errorCorrection doesn't handle that. "RestJsonServerPopulatesNestedDefaultValuesWhenMissingInInResponseParams" diff --git a/client/client-rpcv2-cbor/src/it/java/software/amazon/smithy/java/client/rpcv2/RpcV2CborProtocolTests.java b/client/client-rpcv2-cbor/src/it/java/software/amazon/smithy/java/client/rpcv2/RpcV2CborProtocolTests.java index 85cf7a6d1..e38ebd3d6 100644 --- a/client/client-rpcv2-cbor/src/it/java/software/amazon/smithy/java/client/rpcv2/RpcV2CborProtocolTests.java +++ b/client/client-rpcv2-cbor/src/it/java/software/amazon/smithy/java/client/rpcv2/RpcV2CborProtocolTests.java @@ -35,7 +35,10 @@ public void requestTest(DataStream expected, DataStream actual) { @HttpClientResponseTests @ProtocolTestFilter( skipTests = { - "RpcV2CborClientPopulatesDefaultsValuesWhenMissingInResponse" + "RpcV2CborClientPopulatesDefaultsValuesWhenMissingInResponse", + "RpcV2CborInvalidGreetingError", + "RpcV2CborEmptyComplexError", + "RpcV2CborComplexError" }) public void responseTest(Runnable test) { test.run(); diff --git a/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestExtension.java b/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestExtension.java index eac2f51d1..6614aa3bb 100644 --- a/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestExtension.java +++ b/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestExtension.java @@ -314,21 +314,20 @@ private static List getTestOperations( }); for (var errorId : operation.getErrors()) { var error = serviceModel.getShape(errorId); - if (error.map(Shape::isStructureShape).orElse(false)) { - continue; - } - var errorShape = error.get().asStructureShape().get(); - errorShape.getTrait(HttpResponseTestsTrait.class).ifPresent(httpResponseTestsTrait -> { - for (var testCase : httpResponseTestsTrait.getTestCases()) { - if (testTypeFiler.test(testCase)) { - responseTestsCases.add( - new HttpResponseProtocolTestCase( - testCase, - true, - getApiExceptionBuilder(symbolProvider, errorShape))); + if (error.isPresent() && error.get().isStructureShape()) { + var errorShape = error.get().asStructureShape().get(); + errorShape.getTrait(HttpResponseTestsTrait.class).ifPresent(httpResponseTestsTrait -> { + for (var testCase : httpResponseTestsTrait.getTestCases()) { + if (testTypeFiler.test(testCase)) { + responseTestsCases.add( + new HttpResponseProtocolTestCase( + testCase, + true, + getApiExceptionBuilder(symbolProvider, errorShape))); + } } - } - }); + }); + } } operation.getTrait(HttpMalformedRequestTestsTrait.class) .map(HttpMalformedRequestTestsTrait::getTestCases)