144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Use of this source code is governed by a BSD-style license that can be
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/files/scoped_temp_dir.h"
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/threading/thread.h"
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/browser/browser_thread_impl.h"
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/browser/gpu/shader_disk_cache.h"
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/public/test/test_browser_thread_bundle.h"
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "net/base/test_completion_callback.h"
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "testing/gtest/include/gtest/gtest.h"
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace content {
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace {
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst int kDefaultClientId = 42;
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char kCacheKey[] = "key";
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char kCacheValue[] = "cached value";
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}  // namespace
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass ShaderDiskCacheTest : public testing::Test {
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public:
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ShaderDiskCacheTest()
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  virtual ~ShaderDiskCacheTest() {}
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  const base::FilePath& cache_path() { return temp_dir_.path(); }
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  void InitCache() {
33f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
34b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org    ShaderCacheFactory::GetInstance()->SetCacheInfo(kDefaultClientId,
3565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org                                                        cache_path());
36ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  }
37dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private:
39fa943b736b1d996084393011529d568165bb5d83lrn@chromium.org  virtual void TearDown() OVERRIDE {
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ShaderCacheFactory::GetInstance()->RemoveCacheInfo(kDefaultClientId);
41b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org  }
42a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  base::ScopedTempDir temp_dir_;
44dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org  content::TestBrowserThreadBundle thread_bundle_;
45dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org
4671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org  DISALLOW_COPY_AND_ASSIGN(ShaderDiskCacheTest);
4771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org};
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
49b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgTEST_F(ShaderDiskCacheTest, ClearsCache) {
50b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  InitCache();
51b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
52b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  scoped_refptr<ShaderDiskCache> cache =
53b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org      ShaderCacheFactory::GetInstance()->Get(kDefaultClientId);
54b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  ASSERT_TRUE(cache.get() != NULL);
55b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
56b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  net::TestCompletionCallback available_cb;
57b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  int rv = cache->SetAvailableCallback(available_cb.callback());
58b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  ASSERT_EQ(net::OK, available_cb.GetResult(rv));
59b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  EXPECT_EQ(0, cache->Size());
60b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
61b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  cache->Cache(kCacheKey, kCacheValue);
62b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
63b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  net::TestCompletionCallback complete_cb;
64b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  rv = cache->SetCacheCompleteCallback(complete_cb.callback());
65b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  ASSERT_EQ(net::OK, complete_cb.GetResult(rv));
66b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  EXPECT_EQ(1, cache->Size());
67b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
68b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  base::Time time;
69b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  net::TestCompletionCallback clear_cb;
70b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  rv = cache->Clear(time, time, clear_cb.callback());
71b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  ASSERT_EQ(net::OK, clear_cb.GetResult(rv));
72b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org  EXPECT_EQ(0, cache->Size());
73b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org};
74b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org
75b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org}  // namespace content
76b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org