| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include <map> |
| 6 |
| 7 #include "base/macros.h" |
| 8 #include "components/leveldb/public/cpp/remote_iterator.h" |
| 9 #include "components/leveldb/public/interfaces/leveldb.mojom.h" |
| 10 #include "mojo/common/common_type_converters.h" |
| 11 #include "mojo/shell/public/cpp/shell_connection.h" |
| 12 #include "mojo/shell/public/cpp/shell_test.h" |
| 13 #include "mojo/util/capture_util.h" |
| 14 |
| 15 using mojo::Capture; |
| 16 |
| 17 namespace leveldb { |
| 18 namespace { |
| 19 |
| 20 class RemoteIteratorTest : public mojo::test::ShellTest { |
| 21 public: |
| 22 RemoteIteratorTest() : ShellTest("exe:leveldb_service_unittests") {} |
| 23 ~RemoteIteratorTest() override {} |
| 24 |
| 25 protected: |
| 26 // Overridden from mojo::test::ApplicationTestBase: |
| 27 void SetUp() override { |
| 28 ShellTest::SetUp(); |
| 29 connector()->ConnectToInterface("mojo:leveldb", &leveldb_); |
| 30 |
| 31 DatabaseError error; |
| 32 leveldb()->OpenInMemory(GetProxy(&database_), Capture(&error)); |
| 33 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); |
| 34 EXPECT_EQ(DatabaseError::OK, error); |
| 35 |
| 36 std::map<std::string, std::string> data{ |
| 37 {"a", "first"}, {"b:suffix", "second"}, {"c", "third"}}; |
| 38 |
| 39 for (auto p : data) { |
| 40 // Write a key to the database. |
| 41 error = DatabaseError::INVALID_ARGUMENT; |
| 42 database_->Put(mojo::Array<uint8_t>::From(p.first), |
| 43 mojo::Array<uint8_t>::From(p.second), Capture(&error)); |
| 44 ASSERT_TRUE(database_.WaitForIncomingResponse()); |
| 45 EXPECT_EQ(DatabaseError::OK, error); |
| 46 } |
| 47 } |
| 48 |
| 49 void TearDown() override { |
| 50 leveldb_.reset(); |
| 51 ShellTest::TearDown(); |
| 52 } |
| 53 |
| 54 LevelDBServicePtr& leveldb() { return leveldb_; } |
| 55 LevelDBDatabasePtr& database() { return database_; } |
| 56 |
| 57 private: |
| 58 LevelDBServicePtr leveldb_; |
| 59 LevelDBDatabasePtr database_; |
| 60 |
| 61 DISALLOW_COPY_AND_ASSIGN(RemoteIteratorTest); |
| 62 }; |
| 63 |
| 64 TEST_F(RemoteIteratorTest, Seeking) { |
| 65 uint64_t iterator_id = 0; |
| 66 database()->NewIterator(Capture(&iterator_id)); |
| 67 ASSERT_TRUE(database().WaitForIncomingResponse()); |
| 68 EXPECT_NE(0u, iterator_id); |
| 69 |
| 70 RemoteIterator it(database().get(), iterator_id); |
| 71 EXPECT_FALSE(it.Valid()); |
| 72 |
| 73 it.SeekToFirst(); |
| 74 EXPECT_TRUE(it.Valid()); |
| 75 EXPECT_EQ("a", it.key()); |
| 76 EXPECT_EQ("first", it.value()); |
| 77 |
| 78 it.SeekToLast(); |
| 79 EXPECT_TRUE(it.Valid()); |
| 80 EXPECT_EQ("c", it.key()); |
| 81 EXPECT_EQ("third", it.value()); |
| 82 |
| 83 it.Seek("b"); |
| 84 EXPECT_TRUE(it.Valid()); |
| 85 EXPECT_EQ("b:suffix", it.key()); |
| 86 EXPECT_EQ("second", it.value()); |
| 87 } |
| 88 |
| 89 TEST_F(RemoteIteratorTest, Next) { |
| 90 uint64_t iterator_id = 0; |
| 91 database()->NewIterator(Capture(&iterator_id)); |
| 92 ASSERT_TRUE(database().WaitForIncomingResponse()); |
| 93 EXPECT_NE(0u, iterator_id); |
| 94 |
| 95 RemoteIterator it(database().get(), iterator_id); |
| 96 EXPECT_FALSE(it.Valid()); |
| 97 |
| 98 it.SeekToFirst(); |
| 99 EXPECT_TRUE(it.Valid()); |
| 100 EXPECT_EQ("a", it.key()); |
| 101 EXPECT_EQ("first", it.value()); |
| 102 |
| 103 it.Next(); |
| 104 EXPECT_TRUE(it.Valid()); |
| 105 EXPECT_EQ("b:suffix", it.key()); |
| 106 EXPECT_EQ("second", it.value()); |
| 107 |
| 108 it.Next(); |
| 109 EXPECT_TRUE(it.Valid()); |
| 110 EXPECT_EQ("c", it.key()); |
| 111 EXPECT_EQ("third", it.value()); |
| 112 |
| 113 it.Next(); |
| 114 EXPECT_FALSE(it.Valid()); |
| 115 } |
| 116 |
| 117 TEST_F(RemoteIteratorTest, Prev) { |
| 118 uint64_t iterator_id = 0; |
| 119 database()->NewIterator(Capture(&iterator_id)); |
| 120 ASSERT_TRUE(database().WaitForIncomingResponse()); |
| 121 EXPECT_NE(0u, iterator_id); |
| 122 |
| 123 RemoteIterator it(database().get(), iterator_id); |
| 124 EXPECT_FALSE(it.Valid()); |
| 125 |
| 126 it.SeekToLast(); |
| 127 EXPECT_TRUE(it.Valid()); |
| 128 EXPECT_EQ("c", it.key()); |
| 129 EXPECT_EQ("third", it.value()); |
| 130 |
| 131 it.Prev(); |
| 132 EXPECT_TRUE(it.Valid()); |
| 133 EXPECT_EQ("b:suffix", it.key()); |
| 134 EXPECT_EQ("second", it.value()); |
| 135 |
| 136 it.Prev(); |
| 137 EXPECT_TRUE(it.Valid()); |
| 138 EXPECT_EQ("a", it.key()); |
| 139 EXPECT_EQ("first", it.value()); |
| 140 |
| 141 it.Prev(); |
| 142 EXPECT_FALSE(it.Valid()); |
| 143 } |
| 144 |
| 145 } // namespace |
| 146 } // namespace leveldb |
| OLD | NEW |