1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include <iostream>
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/build_time.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/functional/bind.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/test/launcher/unit_test_launcher.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/socket/transport_client_socket_pool.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/test/net_test_suite.h"
13*6777b538SAndroid Build Coastguard Worker #include "url/buildflags.h"
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker namespace {
16*6777b538SAndroid Build Coastguard Worker
VerifyBuildIsTimely()17*6777b538SAndroid Build Coastguard Worker bool VerifyBuildIsTimely() {
18*6777b538SAndroid Build Coastguard Worker // This lines up with various //net security features, like Certificate
19*6777b538SAndroid Build Coastguard Worker // Transparency or HPKP, in that they require the build time be less than 70
20*6777b538SAndroid Build Coastguard Worker // days old. Moreover, operating on the assumption that tests are run against
21*6777b538SAndroid Build Coastguard Worker // recently compiled builds, this also serves as a sanity check for the
22*6777b538SAndroid Build Coastguard Worker // system clock, which should be close to the build date.
23*6777b538SAndroid Build Coastguard Worker base::TimeDelta kMaxAge = base::Days(70);
24*6777b538SAndroid Build Coastguard Worker
25*6777b538SAndroid Build Coastguard Worker base::Time build_time = base::GetBuildTime();
26*6777b538SAndroid Build Coastguard Worker base::Time now = base::Time::Now();
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker if ((now - build_time).magnitude() <= kMaxAge)
29*6777b538SAndroid Build Coastguard Worker return true;
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard Worker std::cerr
32*6777b538SAndroid Build Coastguard Worker << "ERROR: This build is more than " << kMaxAge.InDays()
33*6777b538SAndroid Build Coastguard Worker << " days out of date.\n"
34*6777b538SAndroid Build Coastguard Worker "This could indicate a problem with the device's clock, or the build "
35*6777b538SAndroid Build Coastguard Worker "is simply too old.\n"
36*6777b538SAndroid Build Coastguard Worker "See crbug.com/666821 for why this is a problem\n"
37*6777b538SAndroid Build Coastguard Worker << " base::Time::Now() --> " << now << " (" << now.ToInternalValue()
38*6777b538SAndroid Build Coastguard Worker << ")\n"
39*6777b538SAndroid Build Coastguard Worker << " base::GetBuildTime() --> " << build_time << " ("
40*6777b538SAndroid Build Coastguard Worker << build_time.ToInternalValue() << ")\n";
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker return false;
43*6777b538SAndroid Build Coastguard Worker }
44*6777b538SAndroid Build Coastguard Worker
45*6777b538SAndroid Build Coastguard Worker } // namespace
46*6777b538SAndroid Build Coastguard Worker
main(int argc,char ** argv)47*6777b538SAndroid Build Coastguard Worker int main(int argc, char** argv) {
48*6777b538SAndroid Build Coastguard Worker if (!VerifyBuildIsTimely())
49*6777b538SAndroid Build Coastguard Worker return 1;
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Worker NetTestSuite test_suite(argc, argv);
52*6777b538SAndroid Build Coastguard Worker net::TransportClientSocketPool::set_connect_backup_jobs_enabled(false);
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Worker return base::LaunchUnitTests(
55*6777b538SAndroid Build Coastguard Worker argc, argv,
56*6777b538SAndroid Build Coastguard Worker base::BindOnce(&NetTestSuite::Run, base::Unretained(&test_suite)));
57*6777b538SAndroid Build Coastguard Worker }
58