Как проверить прогресс загрузки с MockWebServer

Я написал небольшой фрагмент кода, который загружает файл, используя 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, поэтому прогресс не может быть рассчитан.

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

0 ответов

Другие вопросы по тегам