Loading src/main/kotlin/at/bitfire/dav4jvm/HttpUtils.kt +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ object HttpUtils { * @return date, or null if date could not be parsed */ fun parseDate(dateStr: String) = try { DateUtils.parseDate(dateStr, DateUtils.parseDate(dateStr, Locale.ROOT, httpDateFormatStr, "EEE, dd MMM yyyy HH:mm:ss zzz", // RFC 822, updated by RFC 1123 with any TZ "EEEE, dd-MMM-yy HH:mm:ss zzz", // RFC 850, obsoleted by RFC 1036 with any TZ. Loading src/main/kotlin/at/bitfire/dav4jvm/exception/ServiceUnavailableException.kt +4 −4 Original line number Diff line number Diff line Loading @@ -22,18 +22,18 @@ class ServiceUnavailableException: HttpException { // Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds ) // HTTP-date = rfc1123-date | rfc850-date | asctime-date response.header("Retry-After")?.let { retryAfter = HttpUtils.parseDate(it) ?: response.header("Retry-After")?.let { after -> retryAfter = HttpUtils.parseDate(after) ?: // not a HTTP-date, must be delta-seconds try { val seconds = Integer.parseInt(it) val seconds = Integer.parseInt(after) val cal = Calendar.getInstance() cal.add(Calendar.SECOND, seconds) cal.time } catch (ignored: NumberFormatException) { Dav4jvm.log.warning("Received Retry-After which was not a HTTP-date nor delta-seconds") Dav4jvm.log.warning("Received Retry-After which was not a HTTP-date nor delta-seconds: $after") null } } Loading src/test/kotlin/at/bitfire/dav4jvm/exception/ServiceUnavailableExceptionTest.kt +21 −15 Original line number Diff line number Diff line Loading @@ -17,9 +17,7 @@ import kotlin.math.abs class ServiceUnavailableExceptionTest { @Test fun testRetryAfter() { var response = Response.Builder() val response503 = Response.Builder() .request(Request.Builder() .url("http://www.example.com") .get() Loading @@ -28,22 +26,30 @@ class ServiceUnavailableExceptionTest { .code(503).message("Try later") .build() var e = ServiceUnavailableException(response) @Test fun testRetryAfter_NoTime() { val e = ServiceUnavailableException(response503) assertNull(e.retryAfter) } response = response.newBuilder() @Test fun testRetryAfter_Seconds() { val response = response503.newBuilder() .header("Retry-After", "120") .build() e = ServiceUnavailableException(response) val e = ServiceUnavailableException(response) assertNotNull(e.retryAfter) assertTrue(withinTimeRange(e.retryAfter!!, 120)) } @Test fun testRetryAfter_Date() { val cal = Calendar.getInstance() cal.add(Calendar.MINUTE, 30) response = response.newBuilder() val response = response503.newBuilder() .header("Retry-After", HttpUtils.formatDate(cal.time)) .build() e = ServiceUnavailableException(response) val e = ServiceUnavailableException(response) assertNotNull(e.retryAfter) assertTrue(withinTimeRange(e.retryAfter!!, 30*60)) } Loading Loading
src/main/kotlin/at/bitfire/dav4jvm/HttpUtils.kt +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ object HttpUtils { * @return date, or null if date could not be parsed */ fun parseDate(dateStr: String) = try { DateUtils.parseDate(dateStr, DateUtils.parseDate(dateStr, Locale.ROOT, httpDateFormatStr, "EEE, dd MMM yyyy HH:mm:ss zzz", // RFC 822, updated by RFC 1123 with any TZ "EEEE, dd-MMM-yy HH:mm:ss zzz", // RFC 850, obsoleted by RFC 1036 with any TZ. Loading
src/main/kotlin/at/bitfire/dav4jvm/exception/ServiceUnavailableException.kt +4 −4 Original line number Diff line number Diff line Loading @@ -22,18 +22,18 @@ class ServiceUnavailableException: HttpException { // Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds ) // HTTP-date = rfc1123-date | rfc850-date | asctime-date response.header("Retry-After")?.let { retryAfter = HttpUtils.parseDate(it) ?: response.header("Retry-After")?.let { after -> retryAfter = HttpUtils.parseDate(after) ?: // not a HTTP-date, must be delta-seconds try { val seconds = Integer.parseInt(it) val seconds = Integer.parseInt(after) val cal = Calendar.getInstance() cal.add(Calendar.SECOND, seconds) cal.time } catch (ignored: NumberFormatException) { Dav4jvm.log.warning("Received Retry-After which was not a HTTP-date nor delta-seconds") Dav4jvm.log.warning("Received Retry-After which was not a HTTP-date nor delta-seconds: $after") null } } Loading
src/test/kotlin/at/bitfire/dav4jvm/exception/ServiceUnavailableExceptionTest.kt +21 −15 Original line number Diff line number Diff line Loading @@ -17,9 +17,7 @@ import kotlin.math.abs class ServiceUnavailableExceptionTest { @Test fun testRetryAfter() { var response = Response.Builder() val response503 = Response.Builder() .request(Request.Builder() .url("http://www.example.com") .get() Loading @@ -28,22 +26,30 @@ class ServiceUnavailableExceptionTest { .code(503).message("Try later") .build() var e = ServiceUnavailableException(response) @Test fun testRetryAfter_NoTime() { val e = ServiceUnavailableException(response503) assertNull(e.retryAfter) } response = response.newBuilder() @Test fun testRetryAfter_Seconds() { val response = response503.newBuilder() .header("Retry-After", "120") .build() e = ServiceUnavailableException(response) val e = ServiceUnavailableException(response) assertNotNull(e.retryAfter) assertTrue(withinTimeRange(e.retryAfter!!, 120)) } @Test fun testRetryAfter_Date() { val cal = Calendar.getInstance() cal.add(Calendar.MINUTE, 30) response = response.newBuilder() val response = response503.newBuilder() .header("Retry-After", HttpUtils.formatDate(cal.time)) .build() e = ServiceUnavailableException(response) val e = ServiceUnavailableException(response) assertNotNull(e.retryAfter) assertTrue(withinTimeRange(e.retryAfter!!, 30*60)) } Loading