1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/files/file_enumerator.h"
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/files/file_path.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/files/scoped_temp_dir.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/message_loop/message_loop.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/time/time.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/media/webrtc_log_util.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/test_browser_thread.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kExpectedDaysToKeepLogFiles = 5;
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WebRtcLogUtilTest : public testing::Test {
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebRtcLogUtilTest()
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      : file_thread_(content::BrowserThread::FILE, &message_loop_) {}
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void SetUp() {
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // Create three files. One with modified date as of now, one with date one
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // day younger than the keep limit, one with date one day older than the
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // limit. The two former are expected to be kept and the last to be deleted
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // when deleting old logs.
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ASSERT_TRUE(dir_.CreateUniqueTempDir());
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::FilePath file;
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ASSERT_TRUE(CreateTemporaryFileInDir(dir_.path(), &file));
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ASSERT_TRUE(CreateTemporaryFileInDir(dir_.path(), &file));
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::Time time_expect_to_keep =
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Time::Now() -
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::TimeDelta::FromDays(kExpectedDaysToKeepLogFiles - 1);
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    TouchFile(file, time_expect_to_keep, time_expect_to_keep);
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ASSERT_TRUE(CreateTemporaryFileInDir(dir_.path(), &file));
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::Time time_expect_to_delete =
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::Time::Now() -
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::TimeDelta::FromDays(kExpectedDaysToKeepLogFiles + 1);
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    TouchFile(file, time_expect_to_delete, time_expect_to_delete);
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void VerifyFiles(int expected_files) {
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::FileEnumerator files(dir_.path(), false, base::FileEnumerator::FILES);
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int file_counter = 0;
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    for (base::FilePath name = files.Next(); !name.empty();
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch         name = files.Next()) {
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      EXPECT_LT(base::Time::Now() - files.GetInfo().GetLastModifiedTime(),
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                base::TimeDelta::FromDays(kExpectedDaysToKeepLogFiles));
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ++file_counter;
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    EXPECT_EQ(expected_files, file_counter);
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  base::MessageLoopForUI message_loop_;
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  content::TestBrowserThread file_thread_;
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  base::ScopedTempDir dir_;
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
59effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(WebRtcLogUtilTest, DeleteOldWebRtcLogFiles) {
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebRtcLogUtil::DeleteOldWebRtcLogFiles(dir_.path());
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  VerifyFiles(2);
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
64effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(WebRtcLogUtilTest, DeleteOldAndRecentWebRtcLogFiles) {
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  base::Time time_begin_delete =
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      base::Time::Now() - base::TimeDelta::FromDays(1);
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebRtcLogUtil::DeleteOldAndRecentWebRtcLogFiles(dir_.path(),
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                                  time_begin_delete);
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  VerifyFiles(1);
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
71