1/* 2 * Copyright (C) 2024 HiHope Open Source Organization. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <gtest/gtest.h> 17#include <sys/random.h> 18 19using namespace testing::ext; 20 21class HatsGetrandomTest : public testing::Test { 22public: 23 static void SetUpTestCase(); 24 static void TearDownTestCase(); 25 void SetUp(); 26 void TearDown(); 27private: 28}; 29void HatsGetrandomTest::SetUp() 30{ 31} 32void HatsGetrandomTest::TearDown() 33{ 34} 35void HatsGetrandomTest::SetUpTestCase() 36{ 37} 38void HatsGetrandomTest::TearDownTestCase() 39{ 40} 41 42/* 43 * @tc.number : SUB_KERNEL_SYSCALL_GETRANDOM_0100 44 * @tc.name : GetrandomFunctionalityTestSuccess_0001 45 * @tc.desc : getrandom functionality test success. 46 * @tc.size : MediumTest 47 * @tc.type : Function 48 * @tc.level : Level 1 49 */ 50HWTEST_F(HatsGetrandomTest, GetrandomFunctionalityTestSuccess_0001, Function | MediumTest | Level1) 51{ 52 size_t len = 256; 53 char buffer[len]; 54 ssize_t ret = getrandom(buffer, len, 0); 55 EXPECT_EQ(ret, static_cast<ssize_t>(len)); 56} 57 58/* 59 * @tc.number : SUB_KERNEL_SYSCALL_GETRANDOM_0200 60 * @tc.name : GetrandomMultipleCallsConsistencySuccess_0002 61 * @tc.desc : getrandom multiple calls consistency success. 62 * @tc.size : MediumTest 63 * @tc.type : Function 64 * @tc.level : Level 1 65 */ 66HWTEST_F(HatsGetrandomTest, GetrandomMultipleCallsConsistencySuccess_0002, Function | MediumTest | Level1) 67{ 68 size_t len = 8; 69 char buffer1[len]; 70 char buffer2[len]; 71 ssize_t ret = 0; 72 ssize_t ret1 = 0; 73 ssize_t ret2 = 0; 74 75 ret1 = getrandom(buffer1, len, 0); 76 EXPECT_EQ(ret1, static_cast<ssize_t>(len)); 77 ret2 = getrandom(buffer2, len, 0); 78 EXPECT_EQ(ret2, static_cast<ssize_t>(len)); 79 ret = memcmp(buffer1, buffer2, len); 80 EXPECT_NE(ret, 0); 81} 82 83/* 84 * @tc.number : SUB_KERNEL_SYSCALL_GETRANDOM_0300 85 * @tc.name : GetrandomInvalidParametersBuffFail_0003 86 * @tc.desc : getrandom invalid parameters buffer address fail, return -1, and set errno. 87 * @tc.size : MediumTest 88 * @tc.type : Function 89 * @tc.level : Level 2 90 */ 91HWTEST_F(HatsGetrandomTest, GetrandomInvalidParametersBuffFail_0003, Function | MediumTest | Level2) 92{ 93 size_t len = 10; 94 95 errno = 0; 96 ssize_t ret = getrandom(nullptr, len, 0); 97 EXPECT_EQ(ret, -1); 98 EXPECT_EQ(errno, EFAULT); 99} 100 101/* 102 * @tc.number : SUB_KERNEL_SYSCALL_GETRANDOM_0400 103 * @tc.name : GetrandomInvalidParametersFlagFail_0004 104 * @tc.desc : getrandom invalid parameters flag fail, return -1, and set errno. 105 * @tc.size : MediumTest 106 * @tc.type : Function 107 * @tc.level : Level 2 108 */ 109HWTEST_F(HatsGetrandomTest, GetrandomInvalidParametersFlagFail_0004, Function | MediumTest | Level2) 110{ 111 size_t len = 32; 112 char buffer[len]; 113 ssize_t invalidFlag = -1; 114 115 errno = 0; 116 ssize_t ret = getrandom(buffer, len, invalidFlag); 117 EXPECT_EQ(ret, -1); 118 EXPECT_EQ(errno, EINVAL); 119} 120 121/* 122 * @tc.number : SUB_KERNEL_SYSCALL_GETRANDOM_0500 123 * @tc.name : GetrandomGRND_RANDOMFlagSuccess_0005 124 * @tc.desc : getrandom use GRND_RANDOM flag success. 125 * @tc.size : MediumTest 126 * @tc.type : Function 127 * @tc.level : Level 1 128 */ 129HWTEST_F(HatsGetrandomTest, GetrandomGRND_RANDOMFlagSuccess_0005, Function | MediumTest | Level1) 130{ 131 size_t len = 256; 132 char buffer[len]; 133 ssize_t ret = getrandom(buffer, len, GRND_RANDOM | GRND_NONBLOCK); 134 EXPECT_EQ(ret, static_cast<ssize_t>(len)); 135} 136