package org.jboss.resteasy.test.client; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Assert; import org.junit.Test; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.TimeZone; /** * @tpSubChapter Resteasy-client * @tpChapter Client tests * @tpSince RESTEasy 3.0.16 */ public class ResponseTest { protected static final Logger logger = LogManager.getLogger(ResponseTest.class.getName()); /** * @tpTestDetails Test getLastModified method of response" * @tpSince RESTEasy 3.0.16 */ @Test public void getLastModifiedTest() { Date date = Calendar.getInstance().getTime(); Response response = Response.ok().lastModified(date).build(); Date responseDate = response.getLastModified(); logger.info(String.format("Date: %s", date)); logger.info(String.format("Response data: %s", responseDate)); Assert.assertTrue("Wrong response data", date.equals(responseDate)); } /** * @tpTestDetails Test expires item from metadata. * @tpSince RESTEasy 3.0.16 */ @Test public void expiresTest() { Date now = Calendar.getInstance().getTime(); Response.ResponseBuilder rs = Response.ok(); rs.expires(now); Response response = rs.build(); MultivaluedMap<String, Object> metadata = response.getMetadata(); Assert.assertNotNull("Response metatada should not be null", metadata); List<Object> expires = response.getMetadata().get("Expires"); Assert.assertNotNull("Missing expires item in metadata", expires); boolean condition; Object fetched = expires.iterator().next(); if (Date.class.isInstance(fetched)) { condition = ((Date) fetched).compareTo(now) == 0; } else if (String.class.isInstance(fetched)) { condition = formats(now).contains(fetched.toString()); } else { throw new RuntimeException("Fetched object not recognised"); } Assert.assertTrue("Wrong fetched object", condition); } public static final DateFormat createDateFormat(TimeZone timezone) { SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); sdf.setTimeZone(timezone); return sdf; } private static String formats(Date date) { DateFormat format; StringBuilder sb = new StringBuilder(); for (String tz : TimeZone.getAvailableIDs()) { format = createDateFormat(TimeZone.getTimeZone(tz)); sb.append(format.format(date)); } return sb.toString(); } }