1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 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 "IpcMqTest.h" 17 #include <stdio.h> 18 #include <mqueue.h> 19 #include <fcntl.h> 20 #include <sys/stat.h> 21 #include <sys/types.h> 22 #include "log.h" 23 #include "utils.h" 24 #include "KernelConstants.h" 25 #include <securec.h> 26 27 using namespace testing::ext; 28 29 /* * 30 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0100 31 * @tc.name mq_open function errno for EEXIST test 32 * @tc.desc [C- SOFTWARE -0200] 33 */ 34 HWTEST_F(IpcMqTest, testMqOpenEEXIST, Function | MediumTest | Level2) 35 { 36 char qName[MQ_NAME_LEN]; 37 mqd_t queue, queueOther; 38 39 sprintf_s(qName, sizeof(qName), "testMqOpenEEXIST_%d", GetRandom(10000)); 40 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL); 41 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 42 43 queueOther = mq_open(qName, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, NULL); 44 EXPECT_TRUE(queueOther == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1, queueOther = " << queueOther; 45 EXPECT_TRUE(errno == EEXIST) << "ERROR: errno != EEXIST" 46 << " errno = " << errno << " strerror(errno) = " << strerror(errno); 47 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 48 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 49 } 50 51 /* * 52 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0200 53 * @tc.name mq_open function errno for EINVAL test 54 * @tc.desc [C- SOFTWARE -0200] 55 */ 56 HWTEST_F(IpcMqTest, testMqOpenEINVAL, Function | MediumTest | Level2) 57 { 58 int i; 59 mqd_t queue; 60 struct mq_attr attr = { 0 }; 61 char qName[MQ_NAME_LEN]; 62 const int max = 65535; 63 64 sprintf_s(qName, sizeof(qName), "testMqOpenEINVAL_%d", GetRandom(10000)); 65 66 for (i = 0; i < 6; i++) { 67 switch (i) { 68 case 0: 69 attr.mq_msgsize = -1; 70 attr.mq_maxmsg = max; 71 break; 72 case 1: 73 /* attr.mq_msgsize > USHRT_MAX - 4 */ 74 attr.mq_msgsize = max; 75 attr.mq_maxmsg = max; 76 break; 77 case 2: 78 attr.mq_msgsize = 10; 79 attr.mq_maxmsg = -1; 80 break; 81 case 3: 82 attr.mq_msgsize = 10; 83 attr.mq_maxmsg = max + 1; 84 break; 85 86 case 4: 87 attr.mq_msgsize = 0; 88 attr.mq_maxmsg = 16; 89 break; 90 91 case 5: 92 attr.mq_msgsize = 64; 93 attr.mq_maxmsg = 0; 94 break; 95 } 96 97 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 98 EXPECT_TRUE(queue == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1, i = " << i; 99 100 if (queue != (mqd_t)-1) { 101 mq_close(queue); 102 mq_unlink(qName); 103 } 104 105 /* if NOT call mq_close & mq_unlink then errno == ENOENT */ 106 EXPECT_TRUE(errno == EINVAL) << "errno != EINVAL, errno = " << errno << " i = " << i << " qName = " << qName; 107 } 108 109 for (i = 0; i < MQ_NAME_LEN; i++) { 110 qName[i] = 0; 111 } 112 attr.mq_msgsize = MQ_MSG_SIZE; 113 attr.mq_maxmsg = MQ_MAX_MSG; 114 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 115 EXPECT_TRUE(errno == EINVAL) << "errno != EINVAL, errno = " << errno << " i = " << i << " qName = " << qName; 116 } 117 118 /* * 119 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0300 120 * @tc.name mq_open function errno for ENAMETOOLONG test 121 * @tc.desc [C- SOFTWARE -0200] 122 */ 123 HWTEST_F(IpcMqTest, testMqOpenENAMETOOLONG, Function | MediumTest | Level2) 124 { 125 char qName[MAX_MQ_NAME_LEN + 10]; 126 mqd_t queue; 127 int i; 128 129 for (i = 0; i < MAX_MQ_NAME_LEN + 5; i++) { 130 qName[i] = '8'; 131 } 132 qName[i] = '\0'; 133 134 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL); 135 EXPECT_TRUE(queue == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1 "; 136 137 if (queue != (mqd_t)-1) { 138 mq_close(queue); 139 mq_unlink(qName); 140 } 141 142 ASSERT_TRUE(errno == ENAMETOOLONG) << "errno != ENAMETOOLONG, errno = " << errno; 143 } 144 145 /* * 146 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0400 147 * @tc.name mq_open function errno for ENOENT test 148 * @tc.desc [C- SOFTWARE -0200] 149 */ 150 HWTEST_F(IpcMqTest, testMqOpenENOENT, Function | MediumTest | Level3) 151 { 152 mqd_t queue; 153 char qName[MQ_NAME_LEN]; 154 155 sprintf(qName, "testMqOpenENOENT_%d", GetRandom(10000)); 156 queue = mq_open(qName, O_RDWR, S_IRUSR | S_IWUSR, NULL); 157 EXPECT_TRUE(queue == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1 "; 158 159 if (queue != (mqd_t)-1) { 160 mq_close(queue); 161 mq_unlink(qName); 162 } 163 ASSERT_TRUE(errno == ENOENT) << "errno != ENOENT, errno = " << errno; 164 } 165 166 /* * 167 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0500 168 * @tc.name mq_open function errno for ENFILE test 169 * @tc.desc [C- SOFTWARE -0200] 170 */ 171 HWTEST_F(IpcMqTest, testMqOpenENFILE, Function | MediumTest | Level3) 172 { 173 char qName[MAX_MQ_NUMBER + 1][30]; 174 mqd_t queue[MAX_MQ_NUMBER + 1]; 175 int flag = 0; 176 int i; 177 for (i = 0; i < MAX_MQ_NUMBER + 1; i++) { 178 sprintf(qName[i], "testMqOpenENFILE_%d", i); 179 } 180 181 for (i = 0; i < MAX_MQ_NUMBER; i++) { 182 queue[i] = mq_open(qName[i], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL); 183 184 if (queue[i] == (mqd_t)-1) { 185 flag = 1; 186 LOG("break: i = %d", i); 187 break; 188 } 189 190 EXPECT_TRUE(queue[i] != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1, i = " << i << " errno = " << errno << 191 " strerror(errno) = " << strerror(errno); 192 } 193 194 LOG("func: i = %d", i); 195 if (flag == 0) { 196 queue[i] = mq_open(qName[i], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL); 197 } 198 EXPECT_TRUE(queue[i] == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1, i = " << i << " queue = " << queue[i] << 199 " errno = " << errno << " strerror(errno) = " << strerror(errno); 200 EXPECT_TRUE(errno == ENFILE) << "ERROR: errno != ENFILE, i = " << i << " errno = " << errno << 201 " strerror(errno) = " << strerror(errno); 202 203 for (i = 0; i < MAX_MQ_NUMBER + 1; i++) { 204 mq_close(queue[i]); 205 mq_unlink(qName[i]); 206 } 207 } 208 209 /* * 210 * @tc.number SUB_KERNEL_IPC_MQ_OPEN_0600 211 * @tc.name mq_open function errno for ENOSPC test 212 * @tc.desc [C- SOFTWARE -0200] 213 */ 214 HWTEST_F(IpcMqTest, testMqOpenENOSPC, Function | MediumTest | Level3) 215 { 216 mqd_t queue; 217 struct mq_attr setAttr = { 0 }; 218 char qName[MQ_NAME_LEN]; 219 220 sprintf(qName, "testMqOpenENOSPC_%d", GetRandom(10000)); 221 setAttr.mq_msgsize = MAX_MQ_MSG_SIZE + 1; 222 setAttr.mq_maxmsg = MAX_MQ_NAME_LEN; 223 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &setAttr); 224 EXPECT_TRUE(queue == (mqd_t)-1) << "ERROR: mq_open() != (mqd_t)-1 "; 225 226 if (queue != (mqd_t)-1) { 227 mq_close(queue); 228 mq_unlink(qName); 229 } 230 ASSERT_TRUE(errno == ENOSPC) << "errno != ENOSPC, errno = " << errno; 231 } 232 233 /* * 234 * @tc.number SUB_KERNEL_IPC_MQ_CLOSE_0100 235 * @tc.name mq_close function errno for EBADF test 236 * @tc.desc [C- SOFTWARE -0200] 237 */ 238 HWTEST_F(IpcMqTest, testMqCloseEBADF, Function | MediumTest | Level2) 239 { 240 ASSERT_TRUE(mq_close(0) == -1) << "ERROR: mq_close() != -1"; 241 ASSERT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 242 } 243 244 /* * 245 * @tc.number SUB_KERNEL_IPC_MQ_SEND_0100 246 * @tc.name mq_send function errno for EAGAIN test 247 * @tc.desc [C- SOFTWARE -0200] 248 */ 249 HWTEST_F(IpcMqTest, testMqSendEAGAIN, Function | MediumTest | Level2) 250 { 251 mqd_t queue; 252 struct mq_attr attr = { 0 }; 253 char qName[MQ_NAME_LEN]; 254 255 sprintf(qName, "testMqSendEAGAIN_%d", GetRandom(10000)); 256 attr.mq_msgsize = MQ_MSG_SIZE; 257 attr.mq_maxmsg = 1; 258 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 259 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 260 261 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, 0) == 0) << "ERROR: mq_send() != 0"; 262 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, 0) == -1) << "ERROR: mq_send() != -1"; 263 EXPECT_TRUE(errno == EAGAIN) << "ERROR: errno != EAGAIN, errno = " << errno << " EAGAIN = " << EAGAIN; 264 265 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 266 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 267 } 268 269 /* * 270 * @tc.number SUB_KERNEL_IPC_MQ_SEND_0200 271 * @tc.name mq_send function errno for EBADF and EMSGSIZE test 272 * @tc.desc [C- SOFTWARE -0200] 273 */ 274 HWTEST_F(IpcMqTest, testMqSendEBADFEMSGSIZE, Function | MediumTest | Level2) 275 { 276 mqd_t queue; 277 struct mq_attr attr = { 0 }; 278 char qName[MQ_NAME_LEN]; 279 280 sprintf(qName, "testMqSendEAGAIN_%d", GetRandom(10000)); 281 attr.mq_msgsize = 1; 282 attr.mq_maxmsg = MQ_MAX_MSG; 283 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 284 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 285 286 EXPECT_TRUE(mq_send(0, MQ_MSG, 1, MQ_MSG_PRIO) == -1) << "ERROR: mq_send() != -1"; 287 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 288 289 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == -1) << "ERROR: mq_send() != -1"; 290 EXPECT_TRUE(errno == EMSGSIZE) << "ERROR: errno != EMSGSIZE, errno = " << errno << " EMSGSIZE = " << EMSGSIZE; 291 292 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 293 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 294 295 attr.mq_msgsize = MQ_MSG_SIZE; 296 attr.mq_maxmsg = MQ_MAX_MSG; 297 queue = mq_open(qName, O_CREAT | O_RDONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 298 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 299 300 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == -1) << "ERROR: mq_send() != -1"; 301 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 302 303 attr.mq_flags |= O_NONBLOCK; 304 EXPECT_TRUE(mq_setattr(queue, &attr, NULL) == 0) << "ERROR: mq_setattr() != 0"; 305 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == -1) << "ERROR: mq_send() != -1"; 306 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 307 308 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 309 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 310 } 311 312 /* * 313 * @tc.number SUB_KERNEL_IPC_MQ_SEND_0300 314 * @tc.name mq_send function errno for EINVAL test 315 * @tc.desc [C- SOFTWARE -0200] 316 */ 317 HWTEST_F(IpcMqTest, testMqSendEINVAL, Function | MediumTest | Level3) 318 { 319 mqd_t queue; 320 struct mq_attr attr = { 0 }; 321 char qName[MQ_NAME_LEN]; 322 323 sprintf(qName, "testMqSendEINVAL_%d", GetRandom(10000)); 324 attr.mq_msgsize = MQ_MSG_SIZE; 325 attr.mq_maxmsg = MQ_MAX_MSG; 326 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 327 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 328 329 EXPECT_TRUE(mq_send(queue, MQ_MSG, 0, MQ_MSG_PRIO) == -1) << "ERROR: mq_send() != -1"; 330 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL; 331 332 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 333 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 334 } 335 336 /* * 337 * @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0100 338 * @tc.name mq_receive function errno for EAGAIN test 339 * @tc.desc [C- SOFTWARE -0200] 340 */ 341 HWTEST_F(IpcMqTest, testMqReceiveEAGAIN, Function | MediumTest | Level2) 342 { 343 mqd_t queue; 344 unsigned int prio; 345 struct mq_attr attr = { 0 }; 346 struct mq_attr getAttr = { 0 }; 347 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 348 349 sprintf(qName, "testMqReceiveEAGAIN_%d", GetRandom(10000)); 350 attr.mq_msgsize = MQ_MSG_SIZE; 351 attr.mq_maxmsg = MQ_MAX_MSG; 352 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 353 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 354 355 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == 0) << "ERROR: mq_send() != 0"; 356 EXPECT_TRUE(mq_getattr(queue, &getAttr) == 0) << "ERROR: mq_getattr() != 0"; 357 EXPECT_TRUE(mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio) != -1) << "ERROR: mq_receive() == -1"; 358 EXPECT_TRUE(prio == MQ_MSG_PRIO) << "ERROR: prio != MQ_MSG_PRIO, prio = " << prio; 359 EXPECT_TRUE(strncmp(MQ_MSG, rMsg, MQ_MSG_LEN) == 0) << "ERROR: strncmp() != 0, sent != received: sent = " << 360 MQ_MSG << ", received = " << rMsg; 361 EXPECT_TRUE(mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio) == -1) << "ERROR: mq_receive() != -1"; 362 EXPECT_TRUE(errno == EAGAIN) << "ERROR: errno != EAGAIN, errno = " << errno << " EAGAIN = " << EAGAIN; 363 364 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 365 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 366 } 367 368 /* * 369 * @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0200 370 * @tc.name mq_receive function errno for EBADF and EMSGSIZE test 371 * @tc.desc [C- SOFTWARE -0200] 372 */ 373 HWTEST_F(IpcMqTest, testMqReceiveEBADFEMSGSIZE, Function | MediumTest | Level2) 374 { 375 mqd_t queue; 376 unsigned int prio; 377 struct mq_attr attr = { 0 }; 378 struct mq_attr getAttr = { 0 }; 379 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN], rMsgErr[1]; 380 381 sprintf(qName, "testMqReceiveEAGAIN_%d", GetRandom(10000)); 382 attr.mq_msgsize = MQ_MSG_SIZE; 383 attr.mq_maxmsg = MQ_MAX_MSG; 384 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 385 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 386 387 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == 0) << "ERROR: mq_send() != 0"; 388 EXPECT_TRUE(mq_getattr(queue, &getAttr) == 0) << "ERROR: mq_getattr() != 0"; 389 EXPECT_TRUE(mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio) != -1) << "ERROR: mq_receive() == -1"; 390 EXPECT_TRUE(strncmp(MQ_MSG, rMsg, MQ_MSG_LEN) == 0) << "ERROR: strncmp() != 0, sent != received: sent = " << 391 MQ_MSG << ", received = " << rMsg; 392 393 EXPECT_TRUE(mq_receive(0, rMsg, getAttr.mq_msgsize, &prio) == -1) << "ERROR: mq_receive() != -1"; 394 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 395 396 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == 0) << "ERROR: mq_send() != 0"; 397 EXPECT_TRUE(mq_receive(queue, rMsgErr, sizeof(rMsgErr), &prio) == -1) << "ERROR: mq_receive() != -1"; 398 EXPECT_TRUE(errno == EMSGSIZE) << "ERROR: errno != EMSGSIZE, errno = " << errno << " EMSGSIZE = " << EMSGSIZE; 399 400 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 401 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 402 403 attr.mq_msgsize = MQ_MSG_SIZE; 404 attr.mq_maxmsg = MQ_MAX_MSG; 405 queue = mq_open(qName, O_CREAT | O_WRONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 406 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 407 408 EXPECT_TRUE(mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio) == -1) << "ERROR: mq_receive() != -1"; 409 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 410 411 attr.mq_flags |= O_NONBLOCK; 412 EXPECT_TRUE(mq_setattr(queue, &attr, NULL) == 0) << "ERROR: mq_setattr() != 0"; 413 EXPECT_TRUE(mq_receive(queue, rMsg, getAttr.mq_msgsize, &prio) == -1) << "ERROR: mq_receive() != -1"; 414 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 415 416 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 417 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 418 } 419 420 /* * 421 * @tc.number SUB_KERNEL_IPC_MQ_RECEIVE_0300 422 * @tc.name mq_receive function errno for EINVAL test 423 * @tc.desc [C- SOFTWARE -0200] 424 */ 425 HWTEST_F(IpcMqTest, testMqReceiveEINVAL, Function | MediumTest | Level3) 426 { 427 mqd_t queue; 428 unsigned int prio; 429 struct mq_attr attr = { 0 }; 430 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 431 432 sprintf(qName, "testMqReceiveEINVAL_%d", GetRandom(10000)); 433 attr.mq_msgsize = MQ_MSG_SIZE; 434 attr.mq_maxmsg = MQ_MAX_MSG; 435 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 436 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 437 438 EXPECT_TRUE(mq_receive(queue, rMsg, 0, &prio) == -1) << "ERROR: mq_receive() != -1"; 439 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL; 440 441 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 442 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 443 } 444 445 /* * 446 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0100 447 * @tc.name mq_timedsend function errno for EAGAIN and EBADF test 448 * @tc.desc [C- SOFTWARE -0200] 449 */ 450 HWTEST_F(IpcMqTest, testMqTimedSendEAGAINEBADF, Function | MediumTest | Level2) 451 { 452 mqd_t queue; 453 struct timespec ts = { 0, 0 }; 454 struct mq_attr attr = { 0 }; 455 char qName[MQ_NAME_LEN]; 456 457 sprintf(qName, "testMqTimedSendEAGAIN_%d", GetRandom(10000)); 458 attr.mq_msgsize = MQ_MSG_SIZE; 459 attr.mq_maxmsg = 1; 460 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 461 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 462 463 ts.tv_sec = time(NULL) + 1; 464 ts.tv_nsec = 0; 465 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == 0) << "ERROR: mq_timedsend() != 0"; 466 467 ts.tv_sec = 0; 468 ts.tv_nsec = 0; 469 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != 0"; 470 EXPECT_TRUE(errno == EAGAIN) << "ERROR: errno != EAGAIN, errno = " << errno << " EAGAIN = " << EAGAIN; 471 472 EXPECT_TRUE(mq_timedsend(0, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 473 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 474 475 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 476 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 477 478 attr.mq_msgsize = MQ_MSG_SIZE; 479 attr.mq_maxmsg = MQ_MAX_MSG; 480 queue = mq_open(qName, O_CREAT | O_RDONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 481 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 482 483 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 484 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 485 486 attr.mq_flags |= O_NONBLOCK; 487 EXPECT_TRUE(mq_setattr(queue, &attr, NULL) == 0) << "ERROR: mq_setattr() != 0"; 488 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 489 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 490 491 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 492 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 493 } 494 495 /* * 496 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0200 497 * @tc.name mq_timedsend function errno for EINVAL test 498 * @tc.desc [C- SOFTWARE -0200] 499 */ 500 HWTEST_F(IpcMqTest, testMqTimedSendEINVAL, Function | MediumTest | Level2) 501 { 502 mqd_t queue; 503 int i; 504 struct timespec ts = { 0, 0 }; 505 struct mq_attr attr = { 0 }; 506 char qName[MQ_NAME_LEN]; 507 508 sprintf(qName, "testMqTimedSendEINVAL_%d", GetRandom(10000)); 509 attr.mq_msgsize = MQ_MSG_SIZE; 510 attr.mq_maxmsg = MQ_MAX_MSG; 511 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 512 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 513 514 for (i = 0; i < 3; i++) { 515 switch (i) { 516 case 0: 517 ts.tv_sec = -1; 518 ts.tv_nsec = 0; 519 break; 520 case 1: 521 ts.tv_sec = time(NULL) + 1; 522 ts.tv_nsec = -1; 523 break; 524 case 2: 525 ts.tv_sec = time(NULL) + 1; 526 ts.tv_nsec = 1000000000UL + 1UL; 527 break; 528 } 529 530 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << 531 "ERROR: mq_timedsend() != -1, i = " << i; 532 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL << 533 " i = " << i; 534 } 535 536 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, 0, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 537 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL; 538 539 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 540 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 541 } 542 543 /* * 544 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0300 545 * @tc.name mq_timedsend function errno for EMSGSIZE test 546 * @tc.desc [C- SOFTWARE -0200] 547 */ 548 HWTEST_F(IpcMqTest, testMqTimedSendEMSGSIZE, Function | MediumTest | Level3) 549 { 550 mqd_t queue; 551 struct timespec ts = { 0, 0 }; 552 struct mq_attr attr = { 0 }; 553 char qName[MQ_NAME_LEN]; 554 555 sprintf(qName, "testMqTimedSendEMSGSIZE_%d", GetRandom(10000)); 556 attr.mq_msgsize = 1; 557 attr.mq_maxmsg = MQ_MAX_MSG; 558 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 559 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 560 561 ts.tv_sec = time(NULL) + 1; 562 ts.tv_nsec = 0; 563 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 564 EXPECT_TRUE(errno == EMSGSIZE) << "ERROR: errno != EMSGSIZE, errno = " << errno << " EMSGSIZE = " << EMSGSIZE; 565 566 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 567 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 568 } 569 570 /* * 571 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDSEND_0400 572 * @tc.name mq_timedsend function errno for ETIMEDOUT test 573 * @tc.desc [C- SOFTWARE -0200] 574 */ 575 HWTEST_F(IpcMqTest, testMqTimedSendETIMEDOUT, Function | MediumTest | Level3) 576 { 577 mqd_t queue; 578 struct timespec ts = { 0, 0 }; 579 struct mq_attr attr = { 0 }; 580 char qName[MQ_NAME_LEN]; 581 582 sprintf(qName, "testMqTimedSendETIMEDOUT_%d", GetRandom(10000)); 583 attr.mq_msgsize = MQ_MSG_SIZE; 584 attr.mq_maxmsg = 1; 585 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 586 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 587 588 ts.tv_sec = time(NULL) + 1; 589 ts.tv_nsec = 0; 590 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == 0) << "ERROR: mq_timedsend() != 0"; 591 592 ts.tv_sec = 0; 593 ts.tv_nsec = 100; 594 EXPECT_TRUE(mq_timedsend(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO, &ts) == -1) << "ERROR: mq_timedsend() != -1"; 595 EXPECT_TRUE(errno == ETIMEDOUT) << "ERROR: errno != ETIMEDOUT, errno = " << errno << " ETIMEDOUT = " << ETIMEDOUT; 596 597 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 598 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 599 } 600 601 /* * 602 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0100 603 * @tc.name mq_timedreceive function errno for EAGAIN and EBADF test 604 * @tc.desc [C- SOFTWARE -0200] 605 */ 606 HWTEST_F(IpcMqTest, testMqTimedReceiveEAGAINEBADF, Function | MediumTest | Level2) 607 { 608 mqd_t queue; 609 unsigned int prio; 610 struct timespec ts = { 0, 0 }; 611 struct mq_attr attr = { 0 }; 612 struct mq_attr getAttr = { 0 }; 613 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 614 615 sprintf(qName, "testMqTimedReceiveEAGAIN_%d", GetRandom(10000)); 616 attr.mq_msgsize = MQ_MSG_SIZE; 617 attr.mq_maxmsg = MQ_MAX_MSG; 618 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 619 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 620 621 EXPECT_TRUE(mq_getattr(queue, &getAttr) == 0) << "ERROR: mq_getattr() != 0"; 622 ts.tv_sec = time(NULL) + 1; 623 ts.tv_nsec = 0; 624 EXPECT_TRUE(mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 625 EXPECT_TRUE(errno == EAGAIN) << "ERROR: errno != EAGAIN, errno = " << errno << " EAGAIN = " << EAGAIN; 626 627 EXPECT_TRUE(mq_timedreceive(0, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 628 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 629 630 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 631 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 632 633 attr.mq_msgsize = MQ_MSG_SIZE; 634 attr.mq_maxmsg = MQ_MAX_MSG; 635 queue = mq_open(qName, O_CREAT | O_WRONLY | O_NONBLOCK, S_IRUSR | S_IWUSR, &attr); 636 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 637 638 EXPECT_TRUE(mq_timedreceive(0, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 639 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 640 641 attr.mq_flags |= O_NONBLOCK; 642 EXPECT_TRUE(mq_setattr(queue, &attr, NULL) == 0) << "ERROR: mq_setattr() != 0"; 643 EXPECT_TRUE(mq_timedreceive(0, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 644 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 645 646 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 647 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 648 } 649 650 /* * 651 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0200 652 * @tc.name mq_timedreceive function errno for EINVAL test 653 * @tc.desc [C- SOFTWARE -0200] 654 */ 655 HWTEST_F(IpcMqTest, testMqTimedReceiveEINVAL, Function | MediumTest | Level2) 656 { 657 mqd_t queue; 658 int i; 659 unsigned int prio; 660 struct timespec ts = { 0, 0 }; 661 struct mq_attr attr = { 0 }; 662 struct mq_attr getAttr = { 0 }; 663 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 664 665 sprintf(qName, "testMqTimedReceiveEINVAL_%d", GetRandom(10000)); 666 attr.mq_msgsize = MQ_MSG_SIZE; 667 attr.mq_maxmsg = MQ_MAX_MSG; 668 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 669 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 670 671 for (i = 0; i < 3; i++) { 672 switch (i) { 673 case 0: 674 ts.tv_sec = -1; 675 ts.tv_nsec = 0; 676 break; 677 case 1: 678 ts.tv_sec = time(NULL) + 1; 679 ts.tv_nsec = -1; 680 break; 681 case 2: 682 ts.tv_sec = time(NULL) + 1; 683 ts.tv_nsec = 1000000000UL + 1UL; 684 break; 685 } 686 687 EXPECT_TRUE(mq_getattr(queue, &getAttr) == 0) << "ERROR: mq_getattr() != 0"; 688 EXPECT_TRUE(mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << 689 "ERROR: mq_timedreceive() != -1, i = " << i; 690 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL << 691 " i = " << i; 692 } 693 694 EXPECT_TRUE(mq_timedreceive(queue, rMsg, 0, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 695 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL; 696 697 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 698 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 699 } 700 701 /* * 702 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0300 703 * @tc.name mq_timedreceive function errno for ETIMEDOUT test 704 * @tc.desc [C- SOFTWARE -0200] 705 */ 706 HWTEST_F(IpcMqTest, testMqTimedReceiveETIMEDOUT, Function | MediumTest | Level3) 707 { 708 mqd_t queue; 709 unsigned int prio; 710 struct timespec ts = { 0, 0 }; 711 struct mq_attr attr = { 0 }; 712 struct mq_attr getAttr = { 0 }; 713 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 714 715 sprintf(qName, "testMqTimedReceiveETIMEDOUT_%d", GetRandom(10000)); 716 attr.mq_msgsize = MQ_MSG_SIZE; 717 attr.mq_maxmsg = MQ_MAX_MSG; 718 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 719 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 720 721 EXPECT_TRUE(mq_getattr(queue, &getAttr) == 0) << "ERROR: mq_getattr() != 0"; 722 ts.tv_sec = 0; 723 ts.tv_nsec = 100; 724 EXPECT_TRUE(mq_timedreceive(queue, rMsg, getAttr.mq_msgsize, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 725 EXPECT_TRUE(errno == ETIMEDOUT) << "ERROR: errno != ETIMEDOUT, errno = " << errno << " ETIMEDOUT = " << ETIMEDOUT; 726 727 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 728 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 729 } 730 731 /* * 732 * @tc.number SUB_KERNEL_IPC_MQ_TIMEDRECEIVE_0400 733 * @tc.name mq_timedreceive function errno for EMSGSIZE test 734 * @tc.desc [C- SOFTWARE -0200] 735 */ 736 HWTEST_F(IpcMqTest, testMqTimedReceiveEMSGSIZE, Function | MediumTest | Level3) 737 { 738 mqd_t queue; 739 unsigned int prio; 740 struct timespec ts = { 0, 0 }; 741 struct mq_attr attr = { 0 }; 742 char qName[MQ_NAME_LEN], rMsg[MQ_RX_LEN]; 743 744 sprintf(qName, "testMqTimedReceiveEMSGSIZE_%d", GetRandom(10000)); 745 attr.mq_msgsize = MQ_MSG_SIZE; 746 attr.mq_maxmsg = MQ_MAX_MSG; 747 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr); 748 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 749 750 EXPECT_TRUE(mq_send(queue, MQ_MSG, MQ_MSG_LEN, MQ_MSG_PRIO) == 0) << "ERROR: mq_send() != 0"; 751 ts.tv_sec = time(NULL) + 1; 752 ts.tv_nsec = 0; 753 EXPECT_TRUE(mq_timedreceive(queue, rMsg, 1, &prio, &ts) == -1) << "ERROR: mq_timedreceive() != -1"; 754 EXPECT_TRUE(errno == EMSGSIZE) << "ERROR: errno != EMSGSIZE, errno = " << errno << " EMSGSIZE = " << EMSGSIZE; 755 756 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 757 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 758 } 759 760 /* * 761 * @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0100 762 * @tc.name mq_unlink function errno for ENAMETOOLONG test 763 * @tc.desc [C- SOFTWARE -0200] 764 */ 765 HWTEST_F(IpcMqTest, testMqUnlinkENAMETOOLONG, Function | MediumTest | Level2) 766 { 767 char qName[MAX_MQ_NAME_LEN + 10]; 768 int i; 769 770 for (i = 0; i < MAX_MQ_NAME_LEN + 5; i++) { 771 qName[i] = '8'; 772 } 773 qName[i] = '\0'; 774 775 ASSERT_TRUE(mq_unlink(qName) == -1) << "ERROR: mq_unlink() != -1"; 776 ASSERT_TRUE(errno == ENAMETOOLONG) << "ERROR: errno != ENAMETOOLONG"; 777 } 778 779 /* * 780 * @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0200 781 * @tc.name mq_unlink function errno for ENOENT test 782 * @tc.desc [C- SOFTWARE -0200] 783 */ 784 HWTEST_F(IpcMqTest, testMqUnlinkENOENT, Function | MediumTest | Level2) 785 { 786 char qName[MQ_NAME_LEN] = "/mq_file-does-not-exit"; 787 788 ASSERT_TRUE(mq_unlink(qName) == -1) << "ERROR: mq_unlink() != -1"; 789 ASSERT_TRUE(errno == ENOENT) << "ERROR: errno != ENOENT"; 790 } 791 792 /* * 793 * @tc.number SUB_KERNEL_IPC_MQ_UNLINK_0300 794 * @tc.name mq_unlink function errno for EINVAL test 795 * @tc.desc [C- SOFTWARE -0200] 796 */ 797 HWTEST_F(IpcMqTest, testMqUnlinkEINVAL, Function | MediumTest | Level3) 798 { 799 ASSERT_TRUE(mq_unlink("") == -1) << "ERROR: mq_unlink() != -1"; 800 ASSERT_TRUE(errno == EINVAL) << "ERROR: errno != ENOENT"; 801 } 802 803 /* * 804 * @tc.number SUB_KERNEL_IPC_MQ_GETATTR_0100 805 * @tc.name mq_getattr function errno for EBAD and EINVALF test 806 * @tc.desc [C- SOFTWARE -0200] 807 */ 808 HWTEST_F(IpcMqTest, testMqGetAttrEBADFEINVAL, Function | MediumTest | Level2) 809 { 810 int ret; 811 mqd_t queue; 812 struct mq_attr mqstat = { 0 }; 813 char qName[MQ_NAME_LEN]; 814 int memRet = -1; 815 816 memRet = memset_s(&mqstat, sizeof(mqstat), 0, sizeof(mqstat)); 817 EXPECT_EQ(0, memRet); 818 819 sprintf(qName, "testMqSendEINVAL_%d", GetRandom(10000)); 820 queue = mq_open(qName, O_CREAT | O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR, NULL); 821 822 ret = mq_getattr(0, &mqstat); 823 EXPECT_TRUE(ret == -1) << "ERROR: mq_getattr() != -1, ret = " << ret; 824 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 825 826 ret = mq_getattr(queue, nullptr); 827 EXPECT_TRUE(ret == -1) << "ERROR: mq_getattr() != -1, ret = " << ret; 828 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL , errno = " << errno << " EINVAL = " << EINVAL; 829 830 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 831 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 832 } 833 834 /* * 835 * @tc.number SUB_KERNEL_IPC_MQ_SETATTR_0100 836 * @tc.name mq_receive function errno for EBADF and EINVAL test 837 * @tc.desc [C- SOFTWARE -0200] 838 */ 839 HWTEST_F(IpcMqTest, testMqSetAttrEBADFEINVAL, Function | MediumTest | Level2) 840 { 841 char qName[MQ_NAME_LEN]; 842 mqd_t queue; 843 struct mq_attr gMqstat = { 0 }, sMqstat = { 0 }; 844 int memRet = -1; 845 846 sprintf(qName, "testMqSetAttrEBADFEINVAL_%d", GetRandom(10000)); 847 queue = mq_open(qName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, NULL); 848 ASSERT_TRUE(queue != (mqd_t)-1) << "ERROR: mq_open() == (mqd_t)-1"; 849 850 memRet = memset_s(&gMqstat, sizeof(gMqstat), 0, sizeof(gMqstat)); 851 EXPECT_EQ(0, memRet); 852 memRet = memset_s(&sMqstat, sizeof(sMqstat), 0, sizeof(sMqstat)); 853 EXPECT_EQ(0, memRet); 854 EXPECT_TRUE(mq_getattr(queue, &gMqstat) == 0) << "ERROR: mq_getattr() != 0"; 855 856 sMqstat.mq_flags |= O_NONBLOCK; 857 EXPECT_TRUE(mq_setattr(queue, &sMqstat, NULL) == 0) << "ERROR: mq_setattr() != 0"; 858 EXPECT_TRUE(mq_getattr(queue, &gMqstat) == 0) << "ERROR: mq_getattr() != 0"; 859 EXPECT_TRUE(gMqstat.mq_flags != sMqstat.mq_flags) << "ERROR: gMqstat != sMqstat, gMqstat.mq_flags = " << 860 gMqstat.mq_flags << "sMqstat.mq_flags = " << sMqstat.mq_flags; 861 862 EXPECT_TRUE(mq_setattr(0, &sMqstat, NULL) == -1) << "ERROR: mq_setattr() != -1"; 863 EXPECT_TRUE(errno == EBADF) << "ERROR: errno != EBADF, errno = " << errno << " EBADF = " << EBADF; 864 865 EXPECT_TRUE(mq_setattr(queue, NULL, NULL) == -1) << "ERROR: mq_setattr() != -1"; 866 EXPECT_TRUE(errno == EINVAL) << "ERROR: errno != EINVAL, errno = " << errno << " EINVAL = " << EINVAL; 867 868 EXPECT_TRUE(mq_close(queue) == 0) << "ERROR: mq_close() != 0"; 869 ASSERT_TRUE(mq_unlink(qName) == 0) << "ERROR: mq_unlink() != 0"; 870 } 871