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 <cerrno> 17#include <cstdio> 18#include <cstdlib> 19#include <unistd.h> 20#include <gtest/gtest.h> 21#include <linux/membarrier.h> 22#include <sys/syscall.h> 23 24using namespace testing::ext; 25using namespace std; 26 27class MembarrierApiTest : public testing::Test { 28public: 29 static void SetUpTestCase(); 30 static void TearDownTestCase(); 31 void SetUp(); 32 void TearDown(); 33private: 34}; 35void MembarrierApiTest::SetUp() 36{ 37} 38void MembarrierApiTest::TearDown() 39{ 40} 41void MembarrierApiTest::SetUpTestCase() 42{ 43} 44void MembarrierApiTest::TearDownTestCase() 45{ 46} 47 48/* 49 * @tc.number : SUB_KERNEL_SYSCALL_MEMBARRIER_0100 50 * @tc.name : MembarrierValidCmdTestSuccess_0001 51 * @tc.desc : Membarrier MEMBARRIER_CMD_QUERY and MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED cmd test success. 52 * @tc.size : MediumTest 53 * @tc.type : Function 54 * @tc.level : Level 1 55 */ 56HWTEST_F(MembarrierApiTest, MembarrierValidCmdTestSuccess_0001, Function | MediumTest | Level1) 57{ 58 int ret = syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 59 EXPECT_TRUE(ret >= 0); 60 61 ret = syscall(__NR_membarrier, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, 0); 62 EXPECT_EQ(ret, 0); 63} 64 65/* 66 * @tc.number : SUB_KERNEL_SYSCALL_MEMBARRIER_0200 67 * @tc.name : MembarrierInvalidCmdFailed_0002 68 * @tc.desc : membarrier verify memory masking by invalid cmd failed. 69 * @tc.size : MediumTest 70 * @tc.type : Function 71 * @tc.level : Level 2 72 */ 73HWTEST_F(MembarrierApiTest, MembarrierFailed_0002, Function | MediumTest | Level2) 74{ 75 errno = 0; 76 int ret = syscall(__NR_membarrier, -1, 0); 77 EXPECT_EQ(ret, -1); 78 EXPECT_EQ(errno, EINVAL); 79} 80 81/* 82 * @tc.number : SUB_KERNEL_SYSCALL_MEMBARRIER_0300 83 * @tc.name : MembarrierMEMBARRIER_CMD_PRIVATE_EXPEDITEDCmdSuccess_0003 84 * @tc.desc : membarrier MEMBARRIER_CMD_PRIVATE_EXPEDITED cmd test. 85 * @tc.size : MediumTest 86 * @tc.type : Function 87 * @tc.level : Level 1 88 */ 89HWTEST_F(MembarrierApiTest, MembarrierMEMBARRIER_CMD_PRIVATE_EXPEDITEDCmdSuccess_0003, Function | MediumTest | Level1) 90{ 91 int ret = syscall(__NR_membarrier, MEMBARRIER_CMD_PRIVATE_EXPEDITED, 0); 92 EXPECT_EQ(ret, 0); 93}