From 78208eeb16344292f08791c0b555f9345311d84b Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Mon, 25 Mar 2024 12:17:39 -0500 Subject: [PATCH] Add container*Context tests --- .../requestcontext/ContextOperation.java | 2 +- .../requestcontext/JAXRSClientIT.java | 28 ++++++++++++++ .../requestcontext/RequestFilter.java | 34 ++++++++++++++++- .../responsecontext/ContextOperation.java | 2 +- .../responsecontext/JAXRSClientIT.java | 19 ++++++++++ .../container/responsecontext/Resource.java | 11 ++++++ .../responsecontext/ResponseFilter.java | 37 +++++++++++++++++-- 7 files changed, 127 insertions(+), 6 deletions(-) diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java index bace61872..26ac3439b 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java @@ -17,5 +17,5 @@ package ee.jakarta.tck.ws.rs.ee.rs.container.requestcontext; public enum ContextOperation { - ABORTWITH, GETACCEPTABLELANGUAGES, GETACCEPTABLELANGUAGESISREADONLY, GETACCEPTABLEMEDIATYPES, GETACCEPTABLEMEDIATYPESISREADONLY, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITYSTREAM, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRING2, GETLANGUAGE, GETLENGTH, GETMEDIATYPE, GETMETHOD, GETPROPERTY, GETPROPERTYNAMES, GETPROPERTYNAMESISREADONLY, GETREQUEST, GETSECURITYCONTEXT, GETURIINFO, HASENTITY, REMOVEPROPERTY, SETENTITYSTREAM, SETMETHOD, SETPROPERTY, SETPROPERTYNULL, SETPROPERTYCONTEXT, SETREQUESTURI1, SETREQUESTURI2, SETSECURITYCONTEXT; + ABORTWITH, GETACCEPTABLELANGUAGES, GETACCEPTABLELANGUAGESISREADONLY, GETACCEPTABLEMEDIATYPES, GETACCEPTABLEMEDIATYPESISREADONLY, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITYSTREAM, CONTAINSHEADERSTRING, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRING2, GETLANGUAGE, GETLENGTH, GETMEDIATYPE, GETMETHOD, GETPROPERTY, GETPROPERTYNAMES, GETPROPERTYNAMESISREADONLY, GETREQUEST, GETSECURITYCONTEXT, GETURIINFO, HASENTITY, REMOVEPROPERTY, SETENTITYSTREAM, SETMETHOD, SETPROPERTY, SETPROPERTYNULL, SETPROPERTYCONTEXT, SETREQUESTURI1, SETREQUESTURI2, SETSECURITYCONTEXT; } diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java index dc3d48a9d..b41f8b956 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java @@ -333,6 +333,34 @@ public void getEntityStreamTest() throws Fault { ContextOperation.GETENTITYSTREAM); } + /* + * @testName: containsHeaderStringTest + * + * @assertion_ids: JAXRS:JAVADOC:??? + * + * @test_Strategy: Check if the specified header contains a specified value. + * + * Filter method called before a request has been dispatched to a resource. + * Throws IOException. + */ + @Test + @Tag("servlet") + public void containsHeaderStringTest() throws Fault { + setProperty(Property.REQUEST_HEADERS, + "Accept:text/*, text/html, text/html;level=1, */*"); + setProperty(Property.REQUEST_HEADERS, + "Content-Type:application/xml;charset=utf8"); + setProperty(Property.REQUEST_HEADERS, + "Header3:value1 ;; Value2 ;;value 3"); + setProperty(Property.SEARCH_STRING, "Test1"); + setProperty(Property.SEARCH_STRING, "Test2"); + setProperty(Property.SEARCH_STRING, "Test3"); + setProperty(Property.SEARCH_STRING, "Test4"); + setProperty(Property.SEARCH_STRING, "Test5"); + + invokeRequestAndCheckResponse(ContextOperation.CONTAINSHEADERSTRING); + } + /* * @testName: getHeadersTest * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java index c0cc7568b..a2aa30e42 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java @@ -140,16 +140,48 @@ public void getEntityStream() throws IOException { abortWithEntity(entity); } + public void containsHeaderString() { + StringBuffer sb = new StringBuffer(); + sb.append("containsHeaderString= "); + + try { + assertTrue(requestContext.containsHeaderString("accept", "text/html"::equals)); + sb.append("Test1: accept contains text/html; "); + + //Verify Predicate and separator character usage + assertTrue(requestContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + sb.append("Test2: accept contains text/html;level=1; "); + + //Verify incorrect separator character fails + assertTrue(!(requestContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); + sb.append("Test3: Incorrect separator character fails as expected; "); + + //Verify white space in value not trimmed and double character separator + assertTrue(!(requestContext.containsHeaderString("header3", ";;", "value3"::equals))); + sb.append("Test4: White space not trimmed from value as expected; "); + + //Verify white space in front and back of value trimmed + assertTrue(requestContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); + sb.append("Test5: White space trimmed around value as expected; "); + } catch (Throwable ex) { + sb.append("Unexpected exception thrown in containsHeaderString: " + + ex.getMessage()); + ex.printStackTrace(); + } + abortWithEntity(sb.toString()); + } + public void getHeaders() { MultivaluedMap headers = requestContext.getHeaders(); StringBuilder sb = new StringBuilder(); for (Entry> set : headers.entrySet()) { - String first = headers.getFirst(set.getKey()); + String first = headers.getFirst(set.getKey()); sb.append(set.getKey()).append(":").append(first).append(";"); } abortWithEntity(sb.toString()); } + public void getHeadersIsMutable() { String key = "KEY"; MultivaluedMap headers = requestContext.getHeaders(); diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java index 057e978fe..a1c2e8b01 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java @@ -17,7 +17,7 @@ package ee.jakarta.tck.ws.rs.ee.rs.container.responsecontext; public enum ContextOperation { - GETALLOWEDMETHODS, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITY, GETENTITYANNOTATIONS, GETENTITYANNOTATIONSONENTITY, GETENTITYCLASS, GETENTITYSTREAM, GETENTITYTAG, GETENTITYTYPE, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRINGOPERATION, GETHEADERSTRINGHEADER, GETLANGUAGE, GETLASTMODIFIED, GETLENGTH, GETLINK, GETLINKBUILDER, GETLINKS, GETLOCATION, GETMEDIATYPE, GETSTATUS, GETSTATUSINFO, GETSTRINGHEADERS, HASENTITY, HASLINK, SETENTITY, SETENTITYSTREAM, SETSTATUS, SETSTATUSINFO, + GETALLOWEDMETHODS, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITY, GETENTITYANNOTATIONS, GETENTITYANNOTATIONSONENTITY, GETENTITYCLASS, GETENTITYSTREAM, GETENTITYTAG, GETENTITYTYPE, CONTAINSHEADERSTRING, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRINGOPERATION, GETHEADERSTRINGHEADER, GETLANGUAGE, GETLASTMODIFIED, GETLENGTH, GETLINK, GETLINKBUILDER, GETLINKS, GETLOCATION, GETMEDIATYPE, GETSTATUS, GETSTATUSINFO, GETSTRINGHEADERS, HASENTITY, HASLINK, SETENTITY, SETENTITYSTREAM, SETSTATUS, SETSTATUSINFO, // just helping methods, pass SETSTRINGBEANRUNTIME, SETORIGINALRUNTIME diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java index c40db3fbc..504b3600e 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java @@ -445,6 +445,25 @@ public void getEntityTypeInputStreamTest() throws Fault { invokeRequestAndCheckResponse(ContextOperation.GETENTITYTYPE); } + /* + * @testName: getHeadersTest + * + * @assertion_ids: JAXRS:JAVADOC:688; JAXRS:JAVADOC:707; JAXRS:JAVADOC:708; + * + * @test_Strategy: Get the mutable response headers multivalued map. + * + * Filter method called after a response has been provided for a request. + * Throws IOException. + */ + @Test + public void containsHeaderStringTest() throws Fault { + String header = "Test"; + for (int i = 1; i != 6; i++) + setProperty(Property.UNORDERED_SEARCH_STRING, header + i); + setProperty(Property.CONTENT, header); + invokeRequestAndCheckResponse(ContextOperation.CONTAINSHEADERSTRING); + } + /* * @testName: getHeadersTest * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java index dc0cef1f5..da7cfb64a 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java @@ -179,6 +179,17 @@ public Response setEntityStream() { return response; } + @POST + @Path("containsheaderstring") + public Response containsHeaderString(String header) { + ResponseBuilder builder = createResponseWithHeader(); + builder = builder.header("Accept", "text/html, text/html;level=1, */*"); + builder = builder.header("Content-Type", "application/xml;charset=utf8"); + builder = builder.header("Header3", "value1 ;; Value2 ;;value 3"); + Response response = builder.build(); + return response; + } + @POST @Path("getheaders") public Response getHeaders(String header) { diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java index 7c7c3c929..82cd7a69b 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java @@ -152,10 +152,41 @@ else if (type != null) setEntity(name); } + public void containsHeaderString() { + StringBuffer sb = new StringBuffer(); + sb.append("containsHeaderString= "); + + try { + assertTrue(requestContext.containsHeaderString("accept", "text/html"::equals)); + sb.append("Test1: accept contains text/html; "); + + //Verify Predicate and separator character usage + assertTrue(requestContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + sb.append("Test2: accept contains text/html;level=1; "); + + //Verify incorrect separator character fails + assertTrue(!(requestContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); + sb.append("Test3: Incorrect separator character fails as expected; "); + + //Verify white space in value not trimmed and double character separator + assertTrue(!(requestContext.containsHeaderString("header3", ";;", "value3"::equals))); + sb.append("Test4: White space not trimmed from value as expected; "); + + //Verify white space in front and back of value trimmed + assertTrue(requestContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); + sb.append("Test5: White space trimmed around value as expected; "); + } catch (Throwable ex) { + sb.append("Unexpected exception thrown in containsHeaderString: " + + ex.getMessage()); + ex.printStackTrace(); + } + setEntity(sb.toString()); + } + public void getHeaders() { - MultivaluedMap headers = responseContext.getHeaders(); - setEntity(collectionToString(headers.keySet())); - } + MultivaluedMap headers = responseContext.getHeaders(); + setEntity(collectionToString(headers.keySet())); + } public void getHeadersIsMutable() { MultivaluedMap headers = responseContext.getHeaders();