예제 #1
0
TEST_F(TestCacheManager, SaveNothing) {
  string temp_dir;
  ASSERT_TRUE(makeTempDir(&temp_dir));

  string save_path(temp_dir);
  save_path.append("/cm.save");

  CacheManager cm;
  ASSERT_TRUE(cm.saveCache(save_path));

  ASSERT_EQ(unlink(save_path.c_str()), 0);
}
예제 #2
0
TEST_F(TestFileCache, AutodetectNewCache) {
  // Make a quick new cache file on disk.
  CacheManager cm;
  ASSERT_TRUE(cm.addEmptyEntry("test_entry"));

  string temp_dir;
  ASSERT_TRUE(makeTempDir(&temp_dir));

  string cache_fn(temp_dir);
  cache_fn.append("/cache.dump");

  ASSERT_TRUE(cm.saveCache(cache_fn));

  // Now make sure this file-cache is in default mode.
  FileCache fc;
  FileCache::UseNewCache = false;

  fc.loadMmap(cache_fn.c_str(), 1);
  ASSERT_TRUE(fc.exists("test_entry"));
}
예제 #3
0
TEST_F(TestCacheManager, SaveBadPath) {
  CacheManager cm;
  ASSERT_FALSE(cm.saveCache("/__invalid__/__path__/"));
}
예제 #4
0
TEST_F(TestCacheManager, SaveAndLoad) {
  CacheManager cm;

  // Create an uncompressed file.

                      //1234567890123456
  string test_data_1 = "don't compress!!";
  string data_fn_1;
  ASSERT_TRUE(makeTempFile(test_data_1, &data_fn_1));
  string name_1 = "/test/name/not_compressible12345";

  ASSERT_TRUE(cm.addFileContents(name_1, data_fn_1));
  ASSERT_EQ(unlink(data_fn_1.c_str()), 0);

  ASSERT_TRUE(cm.dirExists("/test"));
  ASSERT_TRUE(cm.dirExists("/test/name"));

  // Create a compressed file.

  string test_data_2;
  test_data_2.assign(1048576, 0x55);
  string data_fn_2;

  ASSERT_TRUE(makeTempFile(test_data_2, &data_fn_2));
  string name_2 = "/test/name/very/compressible1234";

  ASSERT_TRUE(cm.addFileContents(name_2, data_fn_2));
  ASSERT_EQ(unlink(data_fn_2.c_str()), 0);

  ASSERT_TRUE(cm.dirExists("/test"));
  ASSERT_TRUE(cm.dirExists("/test/name"));
  ASSERT_TRUE(cm.dirExists("/test/name/very"));

  // Create an empty entry.

  string name_3 = "/test/with/a/very/long/name/for/an/empty/entry";
  ASSERT_TRUE(cm.addEmptyEntry(name_3));

  // Write it out ...

  string temp_dir;
  ASSERT_TRUE(makeTempDir(&temp_dir));

  string save_path(temp_dir);
  save_path.append("/cm.save");

  ASSERT_TRUE(cm.saveCache(save_path));

  // ... and load it back in.

  CacheManager cm2;
  ASSERT_TRUE(cm2.loadCache(save_path));

  ASSERT_TRUE(cm2.fileExists(name_1));
  ASSERT_TRUE(cm2.fileExists(name_2));
  ASSERT_TRUE(cm2.entryExists(name_3));

  EXPECT_TRUE(cm.dirExists("/test"));
  EXPECT_TRUE(cm.dirExists("/test/name"));

  // Empty entries also get their parent directories added.
  EXPECT_TRUE(cm.dirExists("/test/with"));

  const char* compare_1;
  uint64_t compare_len_1;
  bool compressed_1;
  ASSERT_TRUE(cm2.getFileContents(name_1, &compare_1, &compare_len_1,
                                  &compressed_1));

  ASSERT_FALSE(compressed_1);
  ASSERT_EQ(test_data_1.length(), compare_len_1);

  ASSERT_EQ(memcmp(test_data_1.c_str(), compare_1, compare_len_1), 0);

  string compare_2;
  ASSERT_TRUE(cm2.getDecompressed(name_2, &compare_2));
  EXPECT_EQ(compare_2, test_data_2);

  // Clean up the mess.
  ASSERT_EQ(unlink(save_path.c_str()), 0);
  ASSERT_EQ(rmdir(temp_dir.c_str()), 0);
}