Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: chrome/browser/sync/syncable/syncable_unittest.cc

Issue 2830027: Remove extended attributes. The lame broken codepath in the DBS was causing (Closed)
Patch Set: Synced with TOT, resolved conflicts. Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/syncable/syncable.h" 5 #include "chrome/browser/sync/syncable/syncable.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #include <sys/types.h> 9 #include <sys/types.h>
10 10
(...skipping 29 matching lines...) Expand all
40 #include "third_party/sqlite/preprocessed/sqlite3.h" 40 #include "third_party/sqlite/preprocessed/sqlite3.h"
41 41
42 using browser_sync::TestIdFactory; 42 using browser_sync::TestIdFactory;
43 using std::cout; 43 using std::cout;
44 using std::endl; 44 using std::endl;
45 using std::string; 45 using std::string;
46 46
47 namespace syncable { 47 namespace syncable {
48 48
49 namespace { 49 namespace {
50 // A lot of these tests were written expecting to be able to read and write 50 void PutDataAsBookmarkFavicon(WriteTransaction* wtrans,
51 // object data on entries. However, the design has changed. 51 MutableEntry* e,
52 void PutDataAsExtendedAttribute(WriteTransaction* wtrans, 52 const char* bytes,
53 MutableEntry* e, 53 size_t bytes_length) {
54 const char* bytes, 54 sync_pb::EntitySpecifics specifics;
55 size_t bytes_length) { 55 specifics.MutableExtension(sync_pb::bookmark)->set_url("http://demo/");
56 ExtendedAttributeKey key(e->Get(META_HANDLE), "DATA"); 56 specifics.MutableExtension(sync_pb::bookmark)->set_favicon(bytes,
57 MutableExtendedAttribute attr(wtrans, CREATE, key); 57 bytes_length);
58 Blob bytes_blob(bytes, bytes + bytes_length); 58 e->Put(SPECIFICS, specifics);
59 attr.mutable_value()->swap(bytes_blob);
60 } 59 }
61 60
62 void ExpectDataFromExtendedAttributeEquals(BaseTransaction* trans, 61 void ExpectDataFromBookmarkFaviconEquals(BaseTransaction* trans,
63 Entry* e, 62 Entry* e,
64 const char* bytes, 63 const char* bytes,
65 size_t bytes_length) { 64 size_t bytes_length) {
66 ASSERT_TRUE(e->good()); 65 ASSERT_TRUE(e->good());
67 Blob expected_value(bytes, bytes + bytes_length); 66 ASSERT_TRUE(e->Get(SPECIFICS).HasExtension(sync_pb::bookmark));
68 ExtendedAttributeKey key(e->Get(META_HANDLE), "DATA"); 67 ASSERT_EQ("http://demo/",
69 ExtendedAttribute attr(trans, GET_BY_HANDLE, key); 68 e->Get(SPECIFICS).GetExtension(sync_pb::bookmark).url());
70 EXPECT_FALSE(attr.is_deleted()); 69 ASSERT_EQ(std::string(bytes, bytes_length),
71 EXPECT_EQ(expected_value, attr.value()); 70 e->Get(SPECIFICS).GetExtension(sync_pb::bookmark).favicon());
72 } 71 }
73 } // namespace 72 } // namespace
74 73
75 class SyncableGeneralTest : public testing::Test { 74 class SyncableGeneralTest : public testing::Test {
76 public: 75 public:
77 virtual void SetUp() { 76 virtual void SetUp() {
78 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 77 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
79 db_path_ = temp_dir_.path().Append( 78 db_path_ = temp_dir_.path().Append(
80 FILE_PATH_LITERAL("SyncableTest.sqlite3")); 79 FILE_PATH_LITERAL("SyncableTest.sqlite3"));
81 } 80 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 EXPECT_EQ(*i, written_metahandle); 130 EXPECT_EQ(*i, written_metahandle);
132 } 131 }
133 } 132 }
134 133
135 // Test writing data to an entity. Also check that GET_BY_HANDLE works. 134 // Test writing data to an entity. Also check that GET_BY_HANDLE works.
136 static const char s[] = "Hello World."; 135 static const char s[] = "Hello World.";
137 { 136 {
138 WriteTransaction trans(&dir, UNITTEST, __FILE__, __LINE__); 137 WriteTransaction trans(&dir, UNITTEST, __FILE__, __LINE__);
139 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle); 138 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle);
140 ASSERT_TRUE(e.good()); 139 ASSERT_TRUE(e.good());
141 PutDataAsExtendedAttribute(&trans, &e, s, sizeof(s)); 140 PutDataAsBookmarkFavicon(&trans, &e, s, sizeof(s));
142 } 141 }
143 142
144 // Test reading back the contents that we just wrote. 143 // Test reading back the contents that we just wrote.
145 { 144 {
146 WriteTransaction trans(&dir, UNITTEST, __FILE__, __LINE__); 145 WriteTransaction trans(&dir, UNITTEST, __FILE__, __LINE__);
147 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle); 146 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle);
148 ASSERT_TRUE(e.good()); 147 ASSERT_TRUE(e.good());
149 ExpectDataFromExtendedAttributeEquals(&trans, &e, s, sizeof(s)); 148 ExpectDataFromBookmarkFaviconEquals(&trans, &e, s, sizeof(s));
150 } 149 }
151 150
152 // Verify it exists in the folder. 151 // Verify it exists in the folder.
153 { 152 {
154 ReadTransaction rtrans(&dir, __FILE__, __LINE__); 153 ReadTransaction rtrans(&dir, __FILE__, __LINE__);
155 EXPECT_EQ(1, CountEntriesWithName(&rtrans, rtrans.root_id(), name)); 154 EXPECT_EQ(1, CountEntriesWithName(&rtrans, rtrans.root_id(), name));
156 } 155 }
157 156
158 // Now delete it. 157 // Now delete it.
159 { 158 {
(...skipping 1243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 file_util::Delete(directory_manager_->GetSyncDataDatabasePath(), 1402 file_util::Delete(directory_manager_->GetSyncDataDatabasePath(),
1404 true); 1403 true);
1405 // Test. 1404 // Test.
1406 directory_manager_->Open(dirname); 1405 directory_manager_->Open(dirname);
1407 ScopedDirLookup dir(directory_manager_, dirname); 1406 ScopedDirLookup dir(directory_manager_, dirname);
1408 CHECK(dir.good()); 1407 CHECK(dir.good());
1409 WriteTransaction trans(dir, UNITTEST, __FILE__, __LINE__); 1408 WriteTransaction trans(dir, UNITTEST, __FILE__, __LINE__);
1410 MutableEntry me(&trans, CREATE, trans.root_id(), "Jeff"); 1409 MutableEntry me(&trans, CREATE, trans.root_id(), "Jeff");
1411 me.Put(BASE_VERSION, 1); 1410 me.Put(BASE_VERSION, 1);
1412 me.Put(ID, jeff_id); 1411 me.Put(ID, jeff_id);
1413 PutDataAsExtendedAttribute(&trans, &me, test_bytes, 1412 PutDataAsBookmarkFavicon(&trans, &me, test_bytes,
1414 sizeof(test_bytes)); 1413 sizeof(test_bytes));
1415 } 1414 }
1416 { 1415 {
1417 ScopedDirLookup dir(directory_manager_, dirname); 1416 ScopedDirLookup dir(directory_manager_, dirname);
1418 CHECK(dir.good()); 1417 CHECK(dir.good());
1419 dir->SaveChanges(); 1418 dir->SaveChanges();
1420 } 1419 }
1421 directory_manager_->Close(dirname); 1420 directory_manager_->Close(dirname);
1422 break; 1421 break;
1423 case 1: 1422 case 1:
1424 { 1423 {
1425 directory_manager_->Open(dirname); 1424 directory_manager_->Open(dirname);
1426 ScopedDirLookup dir(directory_manager_, dirname); 1425 ScopedDirLookup dir(directory_manager_, dirname);
1427 CHECK(dir.good()); 1426 CHECK(dir.good());
1428 } 1427 }
1429 break; 1428 break;
1430 case 2: 1429 case 2:
1431 { 1430 {
1432 ScopedDirLookup dir(directory_manager_, dirname); 1431 ScopedDirLookup dir(directory_manager_, dirname);
1433 CHECK(dir.good()); 1432 CHECK(dir.good());
1434 } 1433 }
1435 break; 1434 break;
1436 case 3: 1435 case 3:
1437 { 1436 {
1438 ScopedDirLookup dir(directory_manager_, dirname); 1437 ScopedDirLookup dir(directory_manager_, dirname);
1439 CHECK(dir.good()); 1438 CHECK(dir.good());
1440 ReadTransaction trans(dir, __FILE__, __LINE__); 1439 ReadTransaction trans(dir, __FILE__, __LINE__);
1441 Entry e(&trans, GET_BY_ID, jeff_id); 1440 Entry e(&trans, GET_BY_ID, jeff_id);
1442 ExpectDataFromExtendedAttributeEquals(&trans, &e, test_bytes, 1441 ExpectDataFromBookmarkFaviconEquals(&trans, &e, test_bytes,
1443 sizeof(test_bytes)); 1442 sizeof(test_bytes));
1444 } 1443 }
1445 // Same result as CloseAllDirectories, but more code coverage. 1444 // Same result as CloseAllDirectories, but more code coverage.
1446 directory_manager_->Close(dirname); 1445 directory_manager_->Close(dirname);
1447 break; 1446 break;
1448 } 1447 }
1449 step_->number += 1; 1448 step_->number += 1;
1450 step_->condvar.Signal(); 1449 step_->condvar.Signal();
1451 } 1450 }
1452 } 1451 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 } 1569 }
1571 } 1570 }
1572 } 1571 }
1573 1572
1574 void FakeSync(MutableEntry* e, const char* fake_id) { 1573 void FakeSync(MutableEntry* e, const char* fake_id) {
1575 e->Put(IS_UNSYNCED, false); 1574 e->Put(IS_UNSYNCED, false);
1576 e->Put(BASE_VERSION, 2); 1575 e->Put(BASE_VERSION, 2);
1577 e->Put(ID, Id::CreateFromServerId(fake_id)); 1576 e->Put(ID, Id::CreateFromServerId(fake_id));
1578 } 1577 }
1579 1578
1580 TEST_F(SyncableDirectoryTest, Bug1509232) {
1581 const string a = "alpha";
1582 const Id entry_id = dir_.get()->NextId();
1583 CreateEntry(a, entry_id);
1584 {
1585 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__);
1586 MutableEntry e(&trans, GET_BY_ID, entry_id);
1587 ASSERT_TRUE(e.good());
1588 ExtendedAttributeKey key(e.Get(META_HANDLE), "resourcefork");
1589 MutableExtendedAttribute ext(&trans, CREATE, key);
1590 ASSERT_TRUE(ext.good());
1591 const char value[] = "stuff";
1592 Blob value_blob(value, value + arraysize(value));
1593 ext.mutable_value()->swap(value_blob);
1594 ext.delete_attribute();
1595 }
1596 // This call to SaveChanges used to CHECK fail.
1597 dir_.get()->SaveChanges();
1598 }
1599
1600 class SyncableClientTagTest : public SyncableDirectoryTest { 1579 class SyncableClientTagTest : public SyncableDirectoryTest {
1601 public: 1580 public:
1602 static const int kBaseVersion = 1; 1581 static const int kBaseVersion = 1;
1603 const char* test_name_; 1582 const char* test_name_;
1604 const char* test_tag_; 1583 const char* test_tag_;
1605 1584
1606 SyncableClientTagTest() : test_name_("test_name"), test_tag_("dietcoke") {} 1585 SyncableClientTagTest() : test_name_("test_name"), test_tag_("dietcoke") {}
1607 1586
1608 bool CreateWithDefaultTag(Id id, bool deleted) { 1587 bool CreateWithDefaultTag(Id id, bool deleted) {
1609 return CreateWithTag(test_tag_, id, deleted); 1588 return CreateWithTag(test_tag_, id, deleted);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 TEST_F(SyncableClientTagTest, TestClientTagIndexDuplicateServer) { 1666 TEST_F(SyncableClientTagTest, TestClientTagIndexDuplicateServer) {
1688 EXPECT_TRUE(CreateWithDefaultTag(factory_.NewServerId(), true)); 1667 EXPECT_TRUE(CreateWithDefaultTag(factory_.NewServerId(), true));
1689 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), true)); 1668 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), true));
1690 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), false)); 1669 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewServerId(), false));
1691 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), false)); 1670 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), false));
1692 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), true)); 1671 EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), true));
1693 } 1672 }
1694 1673
1695 } // namespace 1674 } // namespace
1696 } // namespace syncable 1675 } // namespace syncable
OLDNEW
« no previous file with comments | « chrome/browser/sync/syncable/syncable.cc ('k') | chrome/test/sync/engine/mock_connection_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698