Use seeds to drive variations extended safe mode end-to-end test
This CL updates the variations extended safe mode end-to-end tests
[see TEST_P(FieldTrialTest, ExtendedSafeModeEndToEnd)] to inject a
safe seed into the test environment and use a candidate seed to
enable a crashing feature.
Bug: 1249256
Change-Id: Ibeb5131750188b0b99ebf9d7eed4acb16fd0b193
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3175920
Commit-Queue: Roger McFarlane <[email protected]>
Reviewed-by: Rohit Rao <[email protected]>
Reviewed-by: Alexei Svitkine <[email protected]>
Reviewed-by: Caitlin Fischer <[email protected]>
Cr-Commit-Position: refs/heads/main@{#928645}
diff --git a/components/variations/variations_test_utils_unittest.cc b/components/variations/variations_test_utils_unittest.cc
new file mode 100644
index 0000000..b717044
--- /dev/null
+++ b/components/variations/variations_test_utils_unittest.cc
@@ -0,0 +1,74 @@
+// Copyright 2021 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 "components/variations/variations_test_utils.h"
+
+#include "base/base64.h"
+#include "base/ranges/algorithm.h"
+#include "components/variations/metrics.h"
+#include "components/variations/proto/variations_seed.pb.h"
+#include "components/variations/variations_seed_store.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/zlib/google/compression_utils.h"
+
+namespace variations {
+
+using SignedSeedDataTest = ::testing::TestWithParam<SignedSeedData>;
+
+TEST_P(SignedSeedDataTest, HasValidBase64Data) {
+ const auto& signed_seed_data = GetParam();
+
+ std::string decoded_compressed_data;
+ ASSERT_TRUE(base::Base64Decode(signed_seed_data.base64_compressed_data,
+ &decoded_compressed_data));
+
+ std::string actual_uncompressed_data;
+ ASSERT_TRUE(compression::GzipUncompress(decoded_compressed_data,
+ &actual_uncompressed_data));
+
+ std::string actual_encoded_uncompressed_data;
+ base::Base64Encode(actual_uncompressed_data,
+ &actual_encoded_uncompressed_data);
+ EXPECT_EQ(actual_encoded_uncompressed_data,
+ signed_seed_data.base64_uncompressed_data);
+
+ std::string decoded_uncompressed_data;
+ ASSERT_TRUE(base::Base64Decode(signed_seed_data.base64_uncompressed_data,
+ &decoded_uncompressed_data));
+
+ EXPECT_EQ(decoded_uncompressed_data, actual_uncompressed_data);
+}
+
+TEST_P(SignedSeedDataTest, HasValidSignature) {
+ const auto& signed_seed_data = GetParam();
+ std::string decoded_uncompressed_data;
+ ASSERT_TRUE(base::Base64Decode(signed_seed_data.base64_uncompressed_data,
+ &decoded_uncompressed_data));
+
+ const auto verify_signature_result =
+ VariationsSeedStore::VerifySeedSignatureForTesting(
+ decoded_uncompressed_data, signed_seed_data.base64_signature);
+ EXPECT_EQ(VerifySignatureResult::VALID_SIGNATURE, verify_signature_result);
+}
+
+TEST_P(SignedSeedDataTest, HasStudyNames) {
+ const auto& signed_seed_data = GetParam();
+ std::string decoded_uncompressed_data;
+ ASSERT_TRUE(base::Base64Decode(signed_seed_data.base64_uncompressed_data,
+ &decoded_uncompressed_data));
+ VariationsSeed seed;
+ ASSERT_TRUE(seed.ParseFromString(decoded_uncompressed_data));
+ std::vector<std::string> parsed_study_names;
+ base::ranges::transform(seed.study(), std::back_inserter(parsed_study_names),
+ [](const Study& s) { return s.name(); });
+ EXPECT_THAT(parsed_study_names, ::testing::UnorderedElementsAreArray(
+ signed_seed_data.study_names));
+}
+
+INSTANTIATE_TEST_CASE_P(VariationsTestUtils,
+ SignedSeedDataTest,
+ ::testing::Values(kTestSeedData, kCrashingSeedData));
+
+} // namespace variations
\ No newline at end of file