blob: 2d88fb5f713c142327ed24806be83f501ab7ea3e [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdlib.h>
#include <base/files/file.h>
#include <base/files/file_path.h>
#include <base/time/time.h>
#include <brillo/flag_helper.h>
namespace {
constexpr int kNumBytesRead = 1024 * 1024;
}
// 'urandom' command-line tool:
//
// Based on the urandom python factory test. Reads 1MiB of data from
// /dev/urandom for a specified amount of time.
int main(int argc, char** argv) {
DEFINE_int64(time_delta_ms, 0, "TimeDelta in ms to run routine for.");
DEFINE_string(urandom_path, "/dev/urandom", "Path to urandom interface.");
brillo::FlagHelper::Init(argc, argv, "urandom - diagnostic routine.");
base::File urandom_file(base::FilePath(FLAGS_urandom_path),
base::File::FLAG_OPEN | base::File::FLAG_READ);
if (!urandom_file.IsValid())
return EXIT_FAILURE;
char urandom_data[kNumBytesRead];
base::TimeTicks end_time =
base::TimeTicks::Now() +
base::TimeDelta::FromMilliseconds(FLAGS_time_delta_ms);
while (base::TimeTicks::Now() < end_time) {
if (kNumBytesRead != urandom_file.Read(0, urandom_data, kNumBytesRead))
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}