146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/feedback/feedback_common.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/bind.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/feedback/proto/common.pb.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/feedback/proto/dom.pb.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/feedback/proto/extension.pb.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/feedback/proto/math.pb.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/test/test_browser_thread.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kOne[] = "one"; 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kTwo[] = "two"; 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kThree[] = "three"; 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kFour[] = "four"; 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define TEN_LINES "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kLongLog[] = TEN_LINES TEN_LINES TEN_LINES TEN_LINES TEN_LINES; 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kLogsAttachmentName[] = "system_logs.zip"; 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class FeedbackCommonTest : public testing::Test { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) FeedbackCommonTest() { 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback = scoped_refptr<FeedbackCommon>(new FeedbackCommon()); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~FeedbackCommonTest() {} 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<FeedbackCommon> feedback; 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) userfeedback::ExtensionSubmit report; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(FeedbackCommonTest, TestBasicData) { 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Test that basic data can be set and propagates to the request. 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->set_category_tag(kOne); 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->set_description(kTwo); 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->set_page_url(kThree); 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->set_user_email(kFour); 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->PrepareReport(&report); 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kOne, report.bucket()); 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kTwo, report.common_data().description()); 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kThree, report.web_data().url()); 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kFour, report.common_data().user_email()); 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(FeedbackCommonTest, TestAddLogs) { 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kOne, kTwo); 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kThree, kFour); 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, feedback->sys_info()->size()); 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(FeedbackCommonTest, TestCompressionThreshold) { 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Add a large and small log, verify that only the small log gets 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // included in the report. 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kOne, kTwo); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kThree, kLongLog); 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->PrepareReport(&report); 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, report.web_data().product_specific_data_size()); 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kOne, report.web_data().product_specific_data(0).key()); 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(FeedbackCommonTest, TestCompression) { 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Add a large and small log, verify that an attachment has been 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // added with the right name. 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kOne, kTwo); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->AddLog(kThree, kLongLog); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->CompressLogs(); 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) feedback->PrepareReport(&report); 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, report.product_specific_binary_data_size()); 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kLogsAttachmentName, report.product_specific_binary_data(0).name()); 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 80