Index: components/feedback/feedback_common_unittest.cc |
diff --git a/components/feedback/feedback_common_unittest.cc b/components/feedback/feedback_common_unittest.cc |
index d3fb9502210c7de0d591c84275b96038a58a6793..d47105bbe2f92cbdf4ff17ea5c1cb13a7de53c42 100644 |
--- a/components/feedback/feedback_common_unittest.cc |
+++ b/components/feedback/feedback_common_unittest.cc |
@@ -5,12 +5,14 @@ |
#include "components/feedback/feedback_common.h" |
#include "base/bind.h" |
+#include "base/files/scoped_temp_dir.h" |
#include "components/feedback/proto/common.pb.h" |
#include "components/feedback/proto/dom.pb.h" |
#include "components/feedback/proto/extension.pb.h" |
#include "components/feedback/proto/math.pb.h" |
#include "content/public/test/test_browser_thread.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/zlib/google/zip.h" |
namespace { |
const char kOne[] = "one"; |
@@ -20,60 +22,100 @@ const char kFour[] = "four"; |
#define TEN_LINES "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n" |
const char kLongLog[] = TEN_LINES TEN_LINES TEN_LINES TEN_LINES TEN_LINES; |
const char kLogsAttachmentName[] = "system_logs.zip"; |
+const char kLogsFilename[] = "system_logs.txt"; |
} // namespace |
class FeedbackCommonTest : public testing::Test { |
protected: |
FeedbackCommonTest() { |
- feedback = scoped_refptr<FeedbackCommon>(new FeedbackCommon()); |
+ feedback_ = scoped_refptr<FeedbackCommon>(new FeedbackCommon()); |
} |
~FeedbackCommonTest() override {} |
- scoped_refptr<FeedbackCommon> feedback; |
- userfeedback::ExtensionSubmit report; |
+ scoped_refptr<FeedbackCommon> feedback_; |
+ userfeedback::ExtensionSubmit report_; |
}; |
TEST_F(FeedbackCommonTest, TestBasicData) { |
// Test that basic data can be set and propagates to the request. |
- feedback->set_category_tag(kOne); |
- feedback->set_description(kTwo); |
- feedback->set_page_url(kThree); |
- feedback->set_user_email(kFour); |
- feedback->PrepareReport(&report); |
- |
- EXPECT_EQ(kOne, report.bucket()); |
- EXPECT_EQ(kTwo, report.common_data().description()); |
- EXPECT_EQ(kThree, report.web_data().url()); |
- EXPECT_EQ(kFour, report.common_data().user_email()); |
+ feedback_->set_category_tag(kOne); |
+ feedback_->set_description(kTwo); |
+ feedback_->set_page_url(kThree); |
+ feedback_->set_user_email(kFour); |
+ feedback_->PrepareReport(&report_); |
+ |
+ EXPECT_EQ(kOne, report_.bucket()); |
+ EXPECT_EQ(kTwo, report_.common_data().description()); |
+ EXPECT_EQ(kThree, report_.web_data().url()); |
+ EXPECT_EQ(kFour, report_.common_data().user_email()); |
} |
TEST_F(FeedbackCommonTest, TestAddLogs) { |
- feedback->AddLog(kOne, kTwo); |
- feedback->AddLog(kThree, kFour); |
+ feedback_->AddLog(kOne, kTwo); |
+ feedback_->AddLog(kThree, kFour); |
- EXPECT_EQ(2U, feedback->sys_info()->size()); |
+ EXPECT_EQ(2U, feedback_->sys_info()->size()); |
} |
TEST_F(FeedbackCommonTest, TestCompressionThreshold) { |
// Add a large and small log, verify that only the small log gets |
// included in the report. |
- feedback->AddLog(kOne, kTwo); |
- feedback->AddLog(kThree, kLongLog); |
- feedback->PrepareReport(&report); |
+ feedback_->AddLog(kOne, kTwo); |
+ feedback_->AddLog(kThree, kLongLog); |
+ feedback_->PrepareReport(&report_); |
- EXPECT_EQ(1, report.web_data().product_specific_data_size()); |
- EXPECT_EQ(kOne, report.web_data().product_specific_data(0).key()); |
+ EXPECT_EQ(1, report_.web_data().product_specific_data_size()); |
+ EXPECT_EQ(kOne, report_.web_data().product_specific_data(0).key()); |
} |
TEST_F(FeedbackCommonTest, TestCompression) { |
// Add a large and small log, verify that an attachment has been |
// added with the right name. |
- feedback->AddLog(kOne, kTwo); |
- feedback->AddLog(kThree, kLongLog); |
- feedback->CompressLogs(); |
- feedback->PrepareReport(&report); |
+ feedback_->AddLog(kOne, kTwo); |
+ feedback_->AddLog(kThree, kLongLog); |
+ feedback_->CompressLogs(); |
+ feedback_->PrepareReport(&report_); |
+ |
+ EXPECT_EQ(1, report_.product_specific_binary_data_size()); |
+ EXPECT_EQ(kLogsAttachmentName, |
+ report_.product_specific_binary_data(0).name()); |
+} |
+ |
+TEST_F(FeedbackCommonTest, TestAddLogsAnonymization) { |
+ std::string mac_address = "Some text 00:11:22:33:44:55 text"; |
+ std::string anonymized_mac_address = "Some text 00:11:22:00:00:01 text"; |
+ feedback_->AddLog(kOne, mac_address); |
+ feedback_->AddLog(kThree, mac_address + kLongLog); |
+ feedback_->CompressLogs(); |
+ feedback_->PrepareReport(&report_); |
+ |
+ // Verify that uncompressed data is anonymized. |
+ ASSERT_EQ(1, report_.web_data().product_specific_data_size()); |
+ EXPECT_EQ(anonymized_mac_address, |
+ report_.web_data().product_specific_data(0).value()); |
+ |
+ // Verify that compressed data is anonymized. |
+ ASSERT_EQ(1, report_.product_specific_binary_data_size()); |
+ const ::userfeedback::ProductSpecificBinaryData& binary_data = |
+ report_.product_specific_binary_data(0); |
+ |
+ base::ScopedTempDir scoped_dir; |
+ ASSERT_TRUE(scoped_dir.CreateUniqueTempDir()); |
+ base::FilePath zip_file = scoped_dir.path().Append("logs.zip"); |
+ |
+ ASSERT_TRUE(binary_data.has_data()); |
+ bool success = base::WriteFile(zip_file, binary_data.data().data(), |
+ binary_data.data().size()); |
+ ASSERT_TRUE(success); |
+ success = zip::Unzip(zip_file, scoped_dir.path()); |
+ ASSERT_TRUE(success); |
+ |
+ std::string file_content; |
+ success = base::ReadFileToString(scoped_dir.path().Append(kLogsFilename), |
+ &file_content); |
+ ASSERT_TRUE(success); |
- EXPECT_EQ(1, report.product_specific_binary_data_size()); |
- EXPECT_EQ(kLogsAttachmentName, report.product_specific_binary_data(0).name()); |
+ EXPECT_TRUE(file_content.find(anonymized_mac_address) != std::string::npos); |
+ EXPECT_TRUE(file_content.find(mac_address) == std::string::npos); |
} |