Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1640eee authored by Yunlian Jiang's avatar Yunlian Jiang Committed by chrome-internal-fetch
Browse files

metrics: fix memory leaks in unittest.

This fixes the memory leaks exposed in unittest.

BUG=chromium:408309
TEST=The memory leak related to |sender_| is gone.

Change-Id: I92970d0560f6ccd1ccd7f5022ece8cc5eba4a674
Reviewed-on: https://chromium-review.googlesource.com/214578


Reviewed-by: default avatarYunlian Jiang <yunlian@chromium.org>
Tested-by: default avatarYunlian Jiang <yunlian@chromium.org>
Commit-Queue: Yunlian Jiang <yunlian@chromium.org>
parent 0b8cc1c9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
class CurlSender : public Sender {
 public:
  explicit CurlSender(std::string server_url);

  virtual ~CurlSender() {}
  // Sends |content| whose SHA1 hash is |hash| to server_url with a synchronous
  // POST request to server_url.
  bool Send(const std::string& content, const std::string& hash) override;
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
// Abstract class for a Sender that uploads a metrics message.
class Sender {
 public:
  virtual ~Sender() {}
  // Sends a message |content| with its sha1 hash |hash|
  virtual bool Send(const std::string& content, const std::string& hash) = 0;
};
+1 −1
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ class UploadService : public base::HistogramFlattener {

  SystemProfileSetter* system_profile_setter_;
  base::HistogramSnapshotManager histogram_snapshot_manager_;
  Sender* sender_;
  scoped_ptr<Sender> sender_;
  int failed_upload_count_;
  scoped_ptr<MetricsLog> current_log_;
  scoped_ptr<MetricsLog> staged_log_;
+22 −20
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@ class UploadServiceTest : public testing::Test {
 protected:
  UploadServiceTest()
      : upload_service_(), exit_manager_(new base::AtExitManager()) {
    upload_service_.sender_ = &sender_;
    sender_ = new SenderMock;
    upload_service_.sender_.reset(sender_);
    upload_service_.system_profile_setter_ = new MockSystemProfileSetter();
    upload_service_.Init();
  }
@@ -32,7 +33,7 @@ class UploadServiceTest : public testing::Test {
    CHECK(dir_.CreateUniqueTempDir());
    upload_service_.GatherHistograms();
    upload_service_.Reset();
    sender_.Reset();
    sender_->Reset();
    cache_.is_testing_ = true;

    chromeos_metrics::PersistentInteger::SetTestingMode(true);
@@ -45,7 +46,7 @@ class UploadServiceTest : public testing::Test {
  }

  base::ScopedTempDir dir_;
  SenderMock sender_;
  SenderMock *sender_;
  SystemProfileCache cache_;
  UploadService upload_service_;

@@ -90,20 +91,20 @@ TEST_F(UploadServiceTest, UnknownCrashIgnored) {
}

TEST_F(UploadServiceTest, FailedSendAreRetried) {
  sender_.set_should_succeed(false);
  sender_->set_should_succeed(false);

  upload_service_.AddSample(*Crash("user"));
  upload_service_.UploadEvent();
  EXPECT_EQ(1, sender_.send_call_count());
  std::string sent_string = sender_.last_message();
  EXPECT_EQ(1, sender_->send_call_count());
  std::string sent_string = sender_->last_message();

  upload_service_.UploadEvent();
  EXPECT_EQ(2, sender_.send_call_count());
  EXPECT_EQ(sent_string, sender_.last_message());
  EXPECT_EQ(2, sender_->send_call_count());
  EXPECT_EQ(sent_string, sender_->last_message());
}

TEST_F(UploadServiceTest, DiscardLogsAfterTooManyFailedUpload) {
  sender_.set_should_succeed(false);
  sender_->set_should_succeed(false);
  upload_service_.AddSample(*Crash("user"));

  for (int i = 0; i < UploadService::kMaxFailedUpload; i++) {
@@ -118,7 +119,7 @@ TEST_F(UploadServiceTest, DiscardLogsAfterTooManyFailedUpload) {
TEST_F(UploadServiceTest, EmptyLogsAreNotSent) {
  upload_service_.UploadEvent();
  EXPECT_FALSE(upload_service_.current_log_);
  EXPECT_EQ(0, sender_.send_call_count());
  EXPECT_EQ(0, sender_->send_call_count());
}

TEST_F(UploadServiceTest, LogEmptyByDefault) {
@@ -133,12 +134,12 @@ TEST_F(UploadServiceTest, CanSendMultipleTimes) {
  upload_service_.AddSample(*Crash("user"));
  upload_service_.UploadEvent();

  std::string first_message = sender_.last_message();
  std::string first_message = sender_->last_message();

  upload_service_.AddSample(*Crash("kernel"));
  upload_service_.UploadEvent();

  EXPECT_NE(first_message, sender_.last_message());
  EXPECT_NE(first_message, sender_->last_message());
}

TEST_F(UploadServiceTest, LogEmptyAfterUpload) {
@@ -197,16 +198,17 @@ TEST_F(UploadServiceTest, ValuesInConfigFileAreSent) {
  upload_service_.AddSample(*histogram.get());
  upload_service_.UploadEvent();

  EXPECT_EQ(1, sender_.send_call_count());
  EXPECT_TRUE(sender_.is_good_proto());
  EXPECT_EQ(1, sender_.last_message_proto().histogram_event().size());
  EXPECT_EQ(1, sender_->send_call_count());
  EXPECT_TRUE(sender_->is_good_proto());
  EXPECT_EQ(1, sender_->last_message_proto().histogram_event().size());

  EXPECT_EQ(name, sender_.last_message_proto().system_profile().os().name());
  EXPECT_EQ(name, sender_->last_message_proto().system_profile().os().name());
  EXPECT_EQ(metrics::SystemProfileProto::CHANNEL_BETA,
            sender_.last_message_proto().system_profile().channel());
  EXPECT_NE(0, sender_.last_message_proto().client_id());
  EXPECT_NE(0, sender_.last_message_proto().system_profile().build_timestamp());
  EXPECT_NE(0, sender_.last_message_proto().session_id());
            sender_->last_message_proto().system_profile().channel());
  EXPECT_NE(0, sender_->last_message_proto().client_id());
  EXPECT_NE(0,
            sender_->last_message_proto().system_profile().build_timestamp());
  EXPECT_NE(0, sender_->last_message_proto().session_id());
}

TEST_F(UploadServiceTest, PersistentGUID) {