Как проверить прогресс загрузки с MockWebServer - PullRequest
0 голосов
/ 21 сентября 2018

Я написал небольшой фрагмент кода, который загружает файл с использованием OkHttp3 и сообщает о прогрессе через прослушиватель, для этого я использовал пример реализации, предоставленной в рецепте здесь .Теперь, чтобы проверить это, я использую MockWebServer, моя проблема в том, что если тело MockResponse маленькое, фактический прогресс не будет сообщаться.Чтобы получить большое тело ответа, я попробовал 2 подхода:

  1. Наличие тела ответа, превышающего размер внутреннего буфера:

    val bytes = ByteArray(10000)
    Random().nextBytes(bytes)
    server.enqueue(MockResponse()
            .setResponseCode(200)
            .setBody(bytes.toByteString().utf8()))
    

    В этом случае тольковозвращается один ответ, или, другими словами, ForwardingSource#read вызывается только один раз.

  2. Вызов setChunkedBody, это заставит ForwardingSource#read быть вызванным несколько раз до ответапрочитано полностью:

    val bytes = ByteArray(1024)
    Random().nextBytes(bytes)
    server.enqueue(MockResponse()
            .setResponseCode(200)
            .setChunkedBody(bytes.toByteString().utf8(), 256))
    

    Проблема в том, что content-length равен -1, поэтому прогресс не может быть рассчитан.

Как это можно решить?

...