diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-09-28 16:01:06 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-09-30 14:57:26 +0200 |
commit | 1bf12e20a65a3e0e8212e0c24db5a136096896e7 (patch) | |
tree | 33e8cd7ac2d4fca6185bff1349fbb50e7fda8eb0 /test/storage | |
parent | eca126d804e96b4ca9ef1ff447448420a32747ee (diff) | |
download | qtlocation-mapboxgl-1bf12e20a65a3e0e8212e0c24db5a136096896e7.tar.gz |
[core] LocalFileSource implementation and tests
Diffstat (limited to 'test/storage')
-rw-r--r-- | test/storage/local_file_source.test.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/test/storage/local_file_source.test.cpp b/test/storage/local_file_source.test.cpp new file mode 100644 index 0000000000..afb418d735 --- /dev/null +++ b/test/storage/local_file_source.test.cpp @@ -0,0 +1,124 @@ +#include <mbgl/storage/local_file_source.hpp> +#include <mbgl/platform/platform.hpp> +#include <mbgl/util/run_loop.hpp> + +#include <unistd.h> +#include <limits.h> +#include <gtest/gtest.h> + +namespace { + +std::string toAbsoluteURL(const std::string& fileName) { + char buff[PATH_MAX + 1]; + char* cwd = getcwd( buff, PATH_MAX + 1 ); + std::string url = { "file://" + std::string(cwd) + "/test/fixtures/storage/assets/" + fileName }; + assert(url.size() <= PATH_MAX); + return url; +} + +} // namespace + +using namespace mbgl; + +TEST(LocalFileSource, EmptyFile) { + util::RunLoop loop; + + LocalFileSource fs; + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL("empty") }, [&](Response res) { + req.reset(); + EXPECT_EQ(nullptr, res.error); + ASSERT_TRUE(res.data.get()); + EXPECT_EQ("", *res.data); + loop.stop(); + }); + + loop.run(); +} + +TEST(LocalFileSource, NonEmptyFile) { + util::RunLoop loop; + + LocalFileSource fs; + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL("nonempty") }, [&](Response res) { + req.reset(); + EXPECT_EQ(nullptr, res.error); + ASSERT_TRUE(res.data.get()); + EXPECT_EQ("content is here\n", *res.data); + loop.stop(); + }); + + loop.run(); +} + +TEST(LocalFileSource, NonExistentFile) { + util::RunLoop loop; + + LocalFileSource fs; + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL("does_not_exist") }, [&](Response res) { + req.reset(); + ASSERT_NE(nullptr, res.error); + EXPECT_EQ(Response::Error::Reason::NotFound, res.error->reason); + ASSERT_FALSE(res.data.get()); + // Do not assert on platform-specific error message. + loop.stop(); + }); + + loop.run(); +} + +TEST(LocalFileSource, ReadDirectory) { + util::RunLoop loop; + + LocalFileSource fs; + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL("directory") }, [&](Response res) { + req.reset(); + ASSERT_NE(nullptr, res.error); + EXPECT_EQ(Response::Error::Reason::NotFound, res.error->reason); + ASSERT_FALSE(res.data.get()); + // Do not assert on platform-specific error message. + loop.stop(); + }); + + loop.run(); +} + +TEST(LocalFileSource, URLEncoding) { + util::RunLoop loop; + + LocalFileSource fs; + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL("%6eonempty") }, [&](Response res) { + req.reset(); + EXPECT_EQ(nullptr, res.error); + ASSERT_TRUE(res.data.get()); + EXPECT_EQ("content is here\n", *res.data); + loop.stop(); + }); + + loop.run(); +} + +TEST(LocalFileSource, URLLimit) { + util::RunLoop loop; + + size_t length = PATH_MAX - toAbsoluteURL("").size(); + LocalFileSource fs; + char filename[length]; + memset(filename, 'x', length); + + std::string url(filename, length); + + std::unique_ptr<AsyncRequest> req = fs.request({ Resource::Unknown, toAbsoluteURL(url) }, [&](Response res) { + req.reset(); + ASSERT_NE(nullptr, res.error); + EXPECT_EQ(Response::Error::Reason::Other, res.error->reason); + ASSERT_FALSE(res.data.get()); + loop.stop(); + }); + + loop.run(); +} |