diff options
Diffstat (limited to 'test/fixtures/mock_file_source.hpp')
-rw-r--r-- | test/fixtures/mock_file_source.hpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/fixtures/mock_file_source.hpp b/test/fixtures/mock_file_source.hpp new file mode 100644 index 0000000000..6bee95dcf8 --- /dev/null +++ b/test/fixtures/mock_file_source.hpp @@ -0,0 +1,59 @@ +#ifndef TEST_RESOURCES_MOCK_FILE_SOURCE +#define TEST_RESOURCES_MOCK_FILE_SOURCE + +#include <mbgl/storage/file_source.hpp> +#include <mbgl/util/thread.hpp> + +#include <string> +#include <memory> + +namespace mbgl { + +// The MockFileSource is a FileSource that can simulate different +// types of failures and it will work completely offline. +class MockFileSource : public FileSource { +public: + // Success: + // Will reply to every request correctly with valid data. + // + // SuccessWithDelay: + // Will reply to every request correctly with valid data, + // but the ones that contains the "match" string on the + // URL will be answered after a delay. This can be useful + // for testing request cancellation. + // + // RequestFail: + // Will reply with an error to requests that contains + // the "match" string on the URL. + // + // RequestWithCorruptedData: + // Will answer every request successfully but will return + // corrupt data on the requests that contains the "match" + // string on the URL. + enum Type { + Success, + SuccessWithDelay, + RequestFail, + RequestWithCorruptedData + }; + + class Impl; + + MockFileSource(Type type, const std::string& match); + ~MockFileSource() override = default; + + // Function that gets called when a delayed resource is enqueued. The + // callback must be safe to call from any thread. + void setOnRequestDelayedCallback(std::function<void(void)> callback); + + // FileSource implementation. + Request* request(const Resource&, uv_loop_t*, Callback) override; + void cancel(Request*) override; + +private: + const std::unique_ptr<util::Thread<Impl>> thread_; +}; + +} + +#endif |