brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 249942d Raw
56 lines · cpp
1//===-- Unittests for getrandom -------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "src/__support/CPP/array.h"10#include "src/math/fabs.h"11#include "src/sys/random/getrandom.h"12#include "test/UnitTest/ErrnoCheckingTest.h"13#include "test/UnitTest/ErrnoSetterMatcher.h"14#include "test/UnitTest/Test.h"15 16using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;17using LlvmLibcGetRandomTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;18 19TEST_F(LlvmLibcGetRandomTest, InvalidFlag) {20  LIBC_NAMESPACE::cpp::array<char, 10> buffer;21  ASSERT_THAT(LIBC_NAMESPACE::getrandom(buffer.data(), buffer.size(), -1),22              Fails<ssize_t>(EINVAL));23}24 25TEST_F(LlvmLibcGetRandomTest, InvalidBuffer) {26  ASSERT_THAT(LIBC_NAMESPACE::getrandom(nullptr, 65536, 0),27              Fails<ssize_t>(EFAULT));28}29 30TEST_F(LlvmLibcGetRandomTest, ReturnsSize) {31  LIBC_NAMESPACE::cpp::array<char, 10> buffer;32  for (size_t i = 0; i < buffer.size(); ++i) {33    // Without GRND_RANDOM set this should never fail.34    ASSERT_EQ(LIBC_NAMESPACE::getrandom(buffer.data(), i, 0),35              static_cast<ssize_t>(i));36  }37}38 39TEST_F(LlvmLibcGetRandomTest, CheckValue) {40  // Probability of picking one particular value amongst 256 possibilities a41  // hundred times in a row is (1/256)^100 = 1.49969681e-241.42  LIBC_NAMESPACE::cpp::array<char, 100> buffer;43 44  for (char &c : buffer)45    c = 0;46 47  LIBC_NAMESPACE::getrandom(buffer.data(), buffer.size(), 0);48 49  bool all_zeros = true;50  for (char c : buffer)51    if (c != 0)52      all_zeros = false;53 54  ASSERT_FALSE(all_zeros);55}56