blob: 9f162b4908d090e47b376d3ea6015dc5c1545b3a [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <algorithm>
#include <memory>
#include <vector>
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
#include "blimp/common/blob_cache/blob_cache.h"
#include "blimp/common/blob_cache/in_memory_blob_cache.h"
#include "blimp/common/blob_cache/test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blimp {
namespace {
const char kFoo[] = "foo";
const char kBar[] = "bar";
const char kDeadbeef[] = "\xde\xad\xbe\xef";
const char kForbiddenCode[] = "\x4b\x1d\xc0\xd3";
class InMemoryBlobCacheTest : public testing::Test {
public:
InMemoryBlobCacheTest() {}
~InMemoryBlobCacheTest() override {}
protected:
InMemoryBlobCache cache_;
};
TEST_F(InMemoryBlobCacheTest, SimplePutContainsAndGetOperations) {
EXPECT_FALSE(cache_.Contains(kFoo));
EXPECT_FALSE(cache_.Get(kFoo));
EXPECT_FALSE(cache_.Contains(kBar));
EXPECT_FALSE(cache_.Get(kBar));
BlobDataPtr blob_data_1 = CreateBlobDataPtr(kDeadbeef);
cache_.Put(kFoo, blob_data_1);
EXPECT_TRUE(cache_.Contains(kFoo));
EXPECT_FALSE(cache_.Contains(kBar));
BlobDataPtr blob_data_2 = CreateBlobDataPtr(kDeadbeef);
cache_.Put(kBar, blob_data_2);
EXPECT_EQ(blob_data_1, cache_.Get(kFoo));
EXPECT_EQ(blob_data_2, cache_.Get(kBar));
auto cache_state = cache_.GetCachedBlobIds();
EXPECT_EQ(2u, cache_state.size());
EXPECT_EQ(kBar, cache_state[0]);
EXPECT_EQ(kFoo, cache_state[1]);
}
TEST_F(InMemoryBlobCacheTest, TestDuplicatePut) {
BlobDataPtr first = CreateBlobDataPtr(kDeadbeef);
BlobDataPtr duplicate = CreateBlobDataPtr(kForbiddenCode);
cache_.Put(kFoo, first);
BlobDataPtr out1 = cache_.Get(kFoo);
EXPECT_EQ(first, out1);
// The second put should be ignored and retrieving kFoo should still retrieve
// the first item.
cache_.Put(kFoo, duplicate);
BlobDataPtr out2 = cache_.Get(kFoo);
EXPECT_EQ(first, out2);
auto cache_state = cache_.GetCachedBlobIds();
EXPECT_EQ(1u, cache_state.size());
EXPECT_EQ(kFoo, cache_state[0]);
}
} // namespace
} // namespace blimp