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

Unified Diff: components/variations/variations_seed_store_unittest.cc

Issue 2935623004: [Cleanup] Clean up the VariationsSeedStore's histograms. (Closed)
Patch Set: Rebase Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/variations/variations_seed_store.cc ('k') | tools/metrics/histograms/enums.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/variations/variations_seed_store_unittest.cc
diff --git a/components/variations/variations_seed_store_unittest.cc b/components/variations/variations_seed_store_unittest.cc
index a40ecdbe9a60da16e63a6baabf13511b0e5fa310..9958c7c916cd9edabd74a633cb295e447b242302 100644
--- a/components/variations/variations_seed_store_unittest.cc
+++ b/components/variations/variations_seed_store_unittest.cc
@@ -6,6 +6,7 @@
#include "base/base64.h"
#include "base/macros.h"
+#include "base/test/histogram_tester.h"
#include "build/build_config.h"
#include "components/prefs/testing_pref_service.h"
#include "components/variations/pref_names.h"
@@ -33,16 +34,26 @@ class TestVariationsSeedStore : public VariationsSeedStore {
base::Time::Now(), false, false, nullptr);
}
- VariationsSeedStore::VerifySignatureResult VerifySeedSignature(
- const std::string& seed_bytes,
- const std::string& base64_seed_signature) override {
- return VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_ENUM_SIZE;
- }
+ bool SignatureVerificationEnabled() override { return false; }
private:
DISALLOW_COPY_AND_ASSIGN(TestVariationsSeedStore);
};
+// Signature verification is disabled on Android and iOS for performance
+// reasons. This class re-enables it for tests, which don't mind the (small)
+// performance penalty.
+class SignatureVerifyingVariationsSeedStore : public VariationsSeedStore {
+ public:
+ explicit SignatureVerifyingVariationsSeedStore(PrefService* local_state)
+ : VariationsSeedStore(local_state) {}
+ ~SignatureVerifyingVariationsSeedStore() override {}
+
+ bool SignatureVerificationEnabled() override { return true; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SignatureVerifyingVariationsSeedStore);
+};
// Populates |seed| with simple test data. The resulting seed will contain one
// study called "test", which contains one experiment called "abc" with
@@ -159,14 +170,18 @@ TEST(VariationsSeedStoreTest, GetInvalidSignature) {
VariationsSeedStore seed_store(&prefs);
VariationsSeed loaded_seed;
- seed_store.LoadSeed(&loaded_seed);
+ EXPECT_TRUE(seed_store.LoadSeed(&loaded_seed));
std::string invalid_signature = seed_store.GetInvalidSignature();
// Valid signature so we get an empty string.
EXPECT_EQ(std::string(), invalid_signature);
prefs.SetString(prefs::kVariationsSeedSignature,
base64_seed_signature_invalid);
- seed_store.LoadSeed(&loaded_seed);
+#if defined(OS_IOS) || defined(OS_ANDROID)
+ EXPECT_TRUE(seed_store.LoadSeed(&loaded_seed));
+#else
+ EXPECT_FALSE(seed_store.LoadSeed(&loaded_seed));
+#endif
// Invalid signature, so we should get the signature itself, except on mobile
// where we should get an empty string because verification is not enabled.
invalid_signature = seed_store.GetInvalidSignature();
@@ -177,7 +192,11 @@ TEST(VariationsSeedStoreTest, GetInvalidSignature) {
#endif
prefs.SetString(prefs::kVariationsSeedSignature, std::string());
- seed_store.LoadSeed(&loaded_seed);
+#if defined(OS_IOS) || defined(OS_ANDROID)
+ EXPECT_TRUE(seed_store.LoadSeed(&loaded_seed));
+#else
+ EXPECT_FALSE(seed_store.LoadSeed(&loaded_seed));
+#endif
invalid_signature = seed_store.GetInvalidSignature();
// Empty signature, not considered invalid.
EXPECT_EQ(std::string(), invalid_signature);
@@ -279,7 +298,7 @@ TEST(VariationsSeedStoreTest, StoreSeedData_GzippedEmptySeed) {
TEST(VariationsSeedStoreTest, VerifySeedSignature) {
// The below seed and signature pair were generated using the server's
// private key.
- const std::string base64_seed_data =
+ const std::string uncompressed_base64_seed_data =
"CigxZDI5NDY0ZmIzZDc4ZmYxNTU2ZTViNTUxYzY0NDdjYmM3NGU1ZmQwEr0BCh9VTUEtVW5p"
"Zm9ybWl0eS1UcmlhbC0xMC1QZXJjZW50GICckqUFOAFCB2RlZmF1bHRKCwoHZGVmYXVsdBAB"
"SgwKCGdyb3VwXzAxEAFKDAoIZ3JvdXBfMDIQAUoMCghncm91cF8wMxABSgwKCGdyb3VwXzA0"
@@ -290,40 +309,101 @@ TEST(VariationsSeedStoreTest, VerifySeedSignature) {
"96JkMYgzTkHPwbv7K/CmgA==";
std::string seed_data;
- EXPECT_TRUE(base::Base64Decode(base64_seed_data, &seed_data));
-
- VariationsSeedStore seed_store(NULL);
+ ASSERT_TRUE(base::Base64Decode(uncompressed_base64_seed_data, &seed_data));
+ VariationsSeed seed;
+ ASSERT_TRUE(seed.ParseFromString(seed_data));
+ std::string base64_seed_data = SerializeSeedBase64(seed);
-#if defined(OS_IOS) || defined(OS_ANDROID)
- // Signature verification is not enabled on mobile.
- if (seed_store.VerifySeedSignature(seed_data, base64_seed_signature) ==
- VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_ENUM_SIZE) {
- return;
- }
-#endif
+ TestingPrefServiceSimple prefs;
+ VariationsSeedStore::RegisterPrefs(prefs.registry());
// The above inputs should be valid.
- EXPECT_EQ(VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_VALID,
- seed_store.VerifySeedSignature(seed_data, base64_seed_signature));
+ {
+ prefs.SetString(prefs::kVariationsCompressedSeed, base64_seed_data);
+ prefs.SetString(prefs::kVariationsSeedSignature, base64_seed_signature);
+ SignatureVerifyingVariationsSeedStore seed_store(&prefs);
+
+ base::HistogramTester histogram_tester;
+ VariationsSeed seed;
+ EXPECT_TRUE(seed_store.LoadSeed(&seed));
+ histogram_tester.ExpectUniqueSample(
+ "Variations.LoadSeedSignature",
+ static_cast<base::HistogramBase::Sample>(
+ VerifySignatureResult::VALID_SIGNATURE),
+ 1);
+ }
// If there's no signature, the corresponding result should be returned.
- EXPECT_EQ(VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_MISSING,
- seed_store.VerifySeedSignature(seed_data, std::string()));
+ {
+ prefs.SetString(prefs::kVariationsCompressedSeed, base64_seed_data);
+ prefs.SetString(prefs::kVariationsSeedSignature, std::string());
+ SignatureVerifyingVariationsSeedStore seed_store(&prefs);
+
+ base::HistogramTester histogram_tester;
+ VariationsSeed seed;
+ EXPECT_FALSE(seed_store.LoadSeed(&seed));
+ histogram_tester.ExpectUniqueSample(
+ "Variations.LoadSeedSignature",
+ static_cast<base::HistogramBase::Sample>(
+ VerifySignatureResult::MISSING_SIGNATURE),
+ 1);
+ }
- // Using non-base64 encoded value as signature (e.g. seed data) should fail.
- EXPECT_EQ(VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_DECODE_FAILED,
- seed_store.VerifySeedSignature(seed_data, seed_data));
+ // Using non-base64 encoded value as signature should fail.
+ {
+ prefs.SetString(prefs::kVariationsCompressedSeed, base64_seed_data);
+ prefs.SetString(prefs::kVariationsSeedSignature,
+ "not a base64-encoded string");
+ SignatureVerifyingVariationsSeedStore seed_store(&prefs);
+
+ base::HistogramTester histogram_tester;
+ VariationsSeed seed;
+ EXPECT_FALSE(seed_store.LoadSeed(&seed));
+ histogram_tester.ExpectUniqueSample(
+ "Variations.LoadSeedSignature",
+ static_cast<base::HistogramBase::Sample>(
+ VerifySignatureResult::DECODE_FAILED),
+ 1);
+ }
// Using a different signature (e.g. the base64 seed data) should fail.
// OpenSSL doesn't distinguish signature decode failure from the
// signature not matching.
- EXPECT_EQ(VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_INVALID_SEED,
- seed_store.VerifySeedSignature(seed_data, base64_seed_data));
+ {
+ prefs.SetString(prefs::kVariationsCompressedSeed, base64_seed_data);
+ prefs.SetString(prefs::kVariationsSeedSignature, base64_seed_data);
+ SignatureVerifyingVariationsSeedStore seed_store(&prefs);
+
+ base::HistogramTester histogram_tester;
+ VariationsSeed seed;
+ EXPECT_FALSE(seed_store.LoadSeed(&seed));
+ histogram_tester.ExpectUniqueSample(
+ "Variations.LoadSeedSignature",
+ static_cast<base::HistogramBase::Sample>(
+ VerifySignatureResult::INVALID_SEED),
+ 1);
+ }
// Using a different seed should not match the signature.
- seed_data[0] = 'x';
- EXPECT_EQ(VariationsSeedStore::VARIATIONS_SEED_SIGNATURE_INVALID_SEED,
- seed_store.VerifySeedSignature(seed_data, base64_seed_signature));
+ {
+ VariationsSeed wrong_seed;
+ ASSERT_TRUE(wrong_seed.ParseFromString(seed_data));
+ (*wrong_seed.mutable_study(0)->mutable_name())[0] = 'x';
+ std::string base64_wrong_seed_data = SerializeSeedBase64(wrong_seed);
+
+ prefs.SetString(prefs::kVariationsCompressedSeed, base64_wrong_seed_data);
+ prefs.SetString(prefs::kVariationsSeedSignature, base64_seed_signature);
+ SignatureVerifyingVariationsSeedStore seed_store(&prefs);
+
+ base::HistogramTester histogram_tester;
+ VariationsSeed seed;
+ EXPECT_FALSE(seed_store.LoadSeed(&seed));
+ histogram_tester.ExpectUniqueSample(
+ "Variations.LoadSeedSignature",
+ static_cast<base::HistogramBase::Sample>(
+ VerifySignatureResult::INVALID_SEED),
+ 1);
+ }
}
TEST(VariationsSeedStoreTest, ApplyDeltaPatch) {
« no previous file with comments | « components/variations/variations_seed_store.cc ('k') | tools/metrics/histograms/enums.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698