Commit 8685419e authored by James Westman's avatar James Westman Committed by Marcus Lundblad
Browse files

tests: Add test for file cache ETags

parent 70248d81
......@@ -18,7 +18,7 @@ on_tile_stored (GObject *object, GAsyncResult *res, gpointer user_data)
}
static void
on_tile_retrieved (GObject *object, GAsyncResult *res, gpointer user_data)
on_tile_retrieved_no_etag (GObject *object, GAsyncResult *res, gpointer user_data)
{
g_autoptr(GError) error = NULL;
GMainLoop *loop = user_data;
......@@ -56,7 +56,7 @@ test_file_cache_store_retrieve ()
/* Now retrieve it */
g_main_loop_unref (loop);
loop = g_main_loop_new (NULL, TRUE);
shumate_file_cache_get_tile_async (cache, tile, NULL, on_tile_retrieved, loop);
shumate_file_cache_get_tile_async (cache, tile, NULL, on_tile_retrieved_no_etag, loop);
g_main_loop_run (loop);
}
......@@ -94,6 +94,66 @@ test_file_cache_miss ()
}
static void
on_tile_retrieved_with_etag (GObject *object, GAsyncResult *res, gpointer user_data)
{
g_autoptr(GError) error = NULL;
GMainLoop *loop = user_data;
g_autofree char *etag = NULL;
g_autoptr(GBytes) bytes = NULL;
g_autoptr(GBytes) expected_bytes = g_bytes_new_static (TEST_DATA, sizeof TEST_DATA);
/* Make sure the tile is there and the data is correct */
bytes = shumate_file_cache_get_tile_finish ((ShumateFileCache *) object, &etag, res, &error);
g_assert_no_error (error);
g_assert_true (g_bytes_equal (bytes, expected_bytes));
g_assert_cmpstr (etag, ==, TEST_ETAG);
g_main_loop_quit (loop);
}
/* Test that potentially out-of-date tile data returns an ETag */
static void
test_file_cache_etag ()
{
g_autoptr(ShumateFileCache) cache = shumate_file_cache_new_full (100000000, "test", NULL);
g_autoptr(ShumateTile) tile = shumate_tile_new_full (0, 0, 256, 0);
g_autoptr(GBytes) bytes = g_bytes_new_static (TEST_DATA, sizeof TEST_DATA);
g_autoptr(GMainLoop) loop = NULL;
g_autoptr(GFile) file = NULL;
guint64 mod_time = 1000;
g_object_ref_sink (tile);
/* Store the tile */
loop = g_main_loop_new (NULL, TRUE);
shumate_file_cache_store_tile_async (cache, tile, bytes, TEST_ETAG, NULL, on_tile_stored, loop);
g_main_loop_run (loop);
/* Change the modified date of the file */
file = g_file_new_build_filename (g_get_user_cache_dir(), "shumate/test/0/0/0.png", NULL);
g_file_set_attribute (file, G_FILE_ATTRIBUTE_TIME_MODIFIED,
G_FILE_ATTRIBUTE_TYPE_UINT64, &mod_time,
G_FILE_QUERY_INFO_NONE, NULL, NULL);
/* Now retrieve it */
g_main_loop_unref (loop);
loop = g_main_loop_new (NULL, TRUE);
shumate_file_cache_get_tile_async (cache, tile, NULL, on_tile_retrieved_with_etag, loop);
g_main_loop_run (loop);
/* Mark the tile up to date */
shumate_file_cache_mark_up_to_date (cache, tile);
/* There should be no ETag this time */
g_main_loop_unref (loop);
loop = g_main_loop_new (NULL, TRUE);
shumate_file_cache_get_tile_async (cache, tile, NULL, on_tile_retrieved_no_etag, loop);
g_main_loop_run (loop);
}
int
main (int argc, char *argv[])
{
......@@ -102,6 +162,7 @@ main (int argc, char *argv[])
g_test_add_func ("/file-cache/store-retrieve", test_file_cache_store_retrieve);
g_test_add_func ("/file-cache/miss", test_file_cache_miss);
g_test_add_func ("/file-cache/etag", test_file_cache_etag);
return g_test_run ();
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment