// Copyright 2017 The Fuchsia 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 <sys/random.h>

#include <errno.h>
#include <unittest/unittest.h>

bool getentropy_valid() {
    BEGIN_TEST;

    char buf[16];

    errno = 0;
    int result = getentropy(buf, sizeof(buf));
    int err = errno;

    EXPECT_EQ(result, 0);
    EXPECT_EQ(err, 0);

    END_TEST;
}

bool getentropy_too_big() {
    BEGIN_TEST;

    const size_t size = 1024 * 1024 * 1024;

    char* buf = static_cast<char*>(malloc(size));
    EXPECT_NONNULL(buf);

    errno = 0;
    int result = getentropy(buf, size);
    int err = errno;

    EXPECT_EQ(result, -1);
    EXPECT_EQ(err, EIO);

    free(buf);

    END_TEST;
}

BEGIN_TEST_CASE(getentropy_tests)
RUN_TEST(getentropy_valid);
RUN_TEST(getentropy_too_big);
END_TEST_CASE(getentropy_tests)
