1// Copyright 2017 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <sys/random.h>
6
7#include <errno.h>
8#include <unittest/unittest.h>
9
10bool getentropy_valid() {
11    BEGIN_TEST;
12
13    char buf[16];
14
15    errno = 0;
16    int result = getentropy(buf, sizeof(buf));
17    int err = errno;
18
19    EXPECT_EQ(result, 0);
20    EXPECT_EQ(err, 0);
21
22    END_TEST;
23}
24
25bool getentropy_too_big() {
26    BEGIN_TEST;
27
28    const size_t size = 1024 * 1024 * 1024;
29
30    char* buf = static_cast<char*>(malloc(size));
31    EXPECT_NONNULL(buf);
32
33    errno = 0;
34    int result = getentropy(buf, size);
35    int err = errno;
36
37    EXPECT_EQ(result, -1);
38    EXPECT_EQ(err, EIO);
39
40    free(buf);
41
42    END_TEST;
43}
44
45BEGIN_TEST_CASE(getentropy_tests)
46RUN_TEST(getentropy_valid);
47RUN_TEST(getentropy_too_big);
48END_TEST_CASE(getentropy_tests)
49
50int main(int argc, char** argv) {
51    return unittest_run_all_tests(argc, argv) ? 0 : -1;
52}
53