Index: chrome/browser/sync/util/cryptographer_unittest.cc |
diff --git a/chrome/browser/sync/util/cryptographer_unittest.cc b/chrome/browser/sync/util/cryptographer_unittest.cc |
index 9e51ada52e215e6f5ecf60a8215dedcf77036665..7f3983caeb4d549250819bcf33a59e8e33d9cb0b 100644 |
--- a/chrome/browser/sync/util/cryptographer_unittest.cc |
+++ b/chrome/browser/sync/util/cryptographer_unittest.cc |
@@ -11,11 +11,25 @@ |
#include "chrome/browser/password_manager/encryptor.h" |
#include "chrome/browser/sync/protocol/nigori_specifics.pb.h" |
#include "chrome/browser/sync/protocol/password_specifics.pb.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+namespace browser_sync { |
+ |
+using ::testing::Mock; |
+using ::testing::StrictMock; |
using syncable::ModelTypeSet; |
-namespace browser_sync { |
+namespace { |
+ |
+class MockObserver : public Cryptographer::Observer { |
+ public: |
+ MOCK_METHOD2(OnEncryptedTypesChanged, |
+ void(const syncable::ModelTypeSet&, bool)); |
+ MOCK_METHOD0(OnEncryptionComplete, void()); |
+}; |
+ |
+} // namespace |
TEST(CryptographerTest, EmptyCantDecrypt) { |
Cryptographer cryptographer; |
@@ -181,12 +195,36 @@ TEST(CryptographerTest, MAYBE_PackUnpack) { |
EXPECT_EQ(expected_mac, mac_key); |
} |
+TEST(CryptographerTest, MarkEncryptionComplete) { |
+ Cryptographer cryptographer; |
+ StrictMock<MockObserver> observer; |
+ cryptographer.AddObserver(&observer); |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(Cryptographer::SensitiveTypes(), |
+ false)); |
+ EXPECT_CALL(observer, OnEncryptionComplete()); |
+ |
+ cryptographer.MarkEncryptionComplete(); |
+} |
+ |
TEST(CryptographerTest, NigoriEncryptionTypes) { |
Cryptographer cryptographer; |
Cryptographer cryptographer2; |
sync_pb::NigoriSpecifics nigori; |
ModelTypeSet encrypted_types; |
+ StrictMock<MockObserver> observer; |
+ cryptographer.AddObserver(&observer); |
+ StrictMock<MockObserver> observer2; |
+ cryptographer2.AddObserver(&observer2); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(Cryptographer::SensitiveTypes(), |
+ false)); |
+ EXPECT_CALL(observer2, |
+ OnEncryptedTypesChanged(Cryptographer::SensitiveTypes(), |
+ false)); |
+ |
// Just set the sensitive types. |
encrypted_types.insert(syncable::PASSWORDS); |
encrypted_types.insert(syncable::NIGORI); |
@@ -196,6 +234,16 @@ TEST(CryptographerTest, NigoriEncryptionTypes) { |
EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); |
EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ Mock::VerifyAndClearExpectations(&observer2); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ false)); |
+ EXPECT_CALL(observer2, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ false)); |
+ |
// Set all encrypted types |
encrypted_types = syncable::GetAllRealModelTypes(); |
cryptographer.SetEncryptedTypes(encrypted_types); |
@@ -204,8 +252,24 @@ TEST(CryptographerTest, NigoriEncryptionTypes) { |
EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); |
EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ Mock::VerifyAndClearExpectations(&observer2); |
+ |
// Ensure encrypted types are never unset. |
Cryptographer cryptographer3; // Empty cryptographer. |
+ StrictMock<MockObserver> observer3; |
+ cryptographer3.AddObserver(&observer3); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ false)); |
+ EXPECT_CALL(observer2, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ false)); |
+ EXPECT_CALL(observer3, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ false)); |
+ |
encrypted_types.erase(syncable::BOOKMARKS); |
encrypted_types.erase(syncable::SESSIONS); |
cryptographer.SetEncryptedTypes(encrypted_types); |
@@ -216,6 +280,10 @@ TEST(CryptographerTest, NigoriEncryptionTypes) { |
EXPECT_EQ(encrypted_types, cryptographer.GetEncryptedTypes()); |
EXPECT_EQ(encrypted_types, cryptographer2.GetEncryptedTypes()); |
EXPECT_EQ(encrypted_types, cryptographer3.GetEncryptedTypes()); |
+ |
+ cryptographer3.RemoveObserver(&observer3); |
+ cryptographer2.RemoveObserver(&observer2); |
+ cryptographer.RemoveObserver(&observer); |
} |
TEST(CryptographerTest, EncryptEverythingExplicit) { |
@@ -224,6 +292,13 @@ TEST(CryptographerTest, EncryptEverythingExplicit) { |
specifics.set_encrypt_everything(true); |
Cryptographer cryptographer; |
+ StrictMock<MockObserver> observer; |
+ cryptographer.AddObserver(&observer); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ true)); |
+ |
EXPECT_FALSE(cryptographer.encrypt_everything()); |
ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); |
for (ModelTypeSet::iterator iter = real_types.begin(); |
@@ -244,14 +319,23 @@ TEST(CryptographerTest, EncryptEverythingExplicit) { |
++iter) { |
EXPECT_EQ(1U, encrypted_types.count(*iter)); |
} |
+ |
+ cryptographer.RemoveObserver(&observer); |
} |
TEST(CryptographerTest, EncryptEverythingImplicit) { |
ModelTypeSet real_types = syncable::GetAllRealModelTypes(); |
sync_pb::NigoriSpecifics specifics; |
- specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything. |
+ specifics.set_encrypt_bookmarks(true); // Non-passwords = encrypt everything |
Cryptographer cryptographer; |
+ StrictMock<MockObserver> observer; |
+ cryptographer.AddObserver(&observer); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(syncable::GetAllRealModelTypes(), |
+ true)); |
+ |
EXPECT_FALSE(cryptographer.encrypt_everything()); |
ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); |
for (ModelTypeSet::iterator iter = real_types.begin(); |
@@ -272,6 +356,8 @@ TEST(CryptographerTest, EncryptEverythingImplicit) { |
++iter) { |
EXPECT_EQ(1U, encrypted_types.count(*iter)); |
} |
+ |
+ cryptographer.RemoveObserver(&observer); |
} |
TEST(CryptographerTest, UnknownSensitiveTypes) { |
@@ -283,6 +369,17 @@ TEST(CryptographerTest, UnknownSensitiveTypes) { |
specifics.set_encrypt_bookmarks(true); |
Cryptographer cryptographer; |
+ StrictMock<MockObserver> observer; |
+ cryptographer.AddObserver(&observer); |
+ |
+ syncable::ModelTypeSet expected_encrypted_types = |
+ Cryptographer::SensitiveTypes(); |
+ expected_encrypted_types.insert(syncable::BOOKMARKS); |
+ |
+ EXPECT_CALL(observer, |
+ OnEncryptedTypesChanged(expected_encrypted_types, |
+ false)); |
+ |
EXPECT_FALSE(cryptographer.encrypt_everything()); |
ModelTypeSet encrypted_types = cryptographer.GetEncryptedTypes(); |
for (ModelTypeSet::iterator iter = real_types.begin(); |
@@ -308,6 +405,8 @@ TEST(CryptographerTest, UnknownSensitiveTypes) { |
else |
EXPECT_EQ(0U, encrypted_types.count(*iter)); |
} |
+ |
+ cryptographer.RemoveObserver(&observer); |
} |
} // namespace browser_sync |