1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ci#include <sys/uio.h> 17f6603c60Sopenharmony_ci 18f6603c60Sopenharmony_ci#include <grp.h> 19f6603c60Sopenharmony_ci#include <shadow.h> 20f6603c60Sopenharmony_ci#include <pwd.h> 21f6603c60Sopenharmony_ci#include <inttypes.h> 22f6603c60Sopenharmony_ci#include <iconv.h> 23f6603c60Sopenharmony_ci 24f6603c60Sopenharmony_ci#include "IoTest.h" 25f6603c60Sopenharmony_ci#include <securec.h> 26f6603c60Sopenharmony_ci 27f6603c60Sopenharmony_ciusing namespace testing::ext; 28f6603c60Sopenharmony_ci 29f6603c60Sopenharmony_ci/** 30f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0400 31f6603c60Sopenharmony_ci * @tc.name toupper basic function test 32f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 33f6603c60Sopenharmony_ci */ 34f6603c60Sopenharmony_ciHWTEST_F(IoTest, testToupper, Function | MediumTest | Level1) 35f6603c60Sopenharmony_ci{ 36f6603c60Sopenharmony_ci for (int i = 0; i < 26; i++) { 37f6603c60Sopenharmony_ci int ret = _toupper('a' + i); 38f6603c60Sopenharmony_ci EXPECT_EQ(ret, 'A' + i); 39f6603c60Sopenharmony_ci } 40f6603c60Sopenharmony_ci} 41f6603c60Sopenharmony_ci 42f6603c60Sopenharmony_ci/** 43f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0500 44f6603c60Sopenharmony_ci * @tc.name strtoimax basic function test 45f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 46f6603c60Sopenharmony_ci */ 47f6603c60Sopenharmony_ciHWTEST_F(IoTest, testStrtuimax, Function | MediumTest | Level1) 48f6603c60Sopenharmony_ci{ 49f6603c60Sopenharmony_ci char nPtr[] = "12 0110 0XDEFE 0666 -1.6"; 50f6603c60Sopenharmony_ci char *endPtr = nullptr; 51f6603c60Sopenharmony_ci intmax_t ret = strtoimax(nPtr, &endPtr, 10); 52f6603c60Sopenharmony_ci EXPECT_EQ(ret, 12) << "> strtoimax fail, errno = " << errno; 53f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0110 0XDEFE 0666 -1.6"); 54f6603c60Sopenharmony_ci 55f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 2); 56f6603c60Sopenharmony_ci EXPECT_EQ(ret, 6) << "> strtoimax fail, errno = " << errno; 57f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0XDEFE 0666 -1.6"); 58f6603c60Sopenharmony_ci 59f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 16); 60f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0XDEFE) << "> strtoimax fail, errno = " << errno; 61f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0666 -1.6"); 62f6603c60Sopenharmony_ci 63f6603c60Sopenharmony_ci 64f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 8); 65f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0666) << "> strtoimax fail, errno = " << errno; 66f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " -1.6"); 67f6603c60Sopenharmony_ci 68f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 65); 69f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0) << "> strtoimax fail, errno = " << errno; 70f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " -1.6"); 71f6603c60Sopenharmony_ci 72f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 10); 73f6603c60Sopenharmony_ci EXPECT_EQ(ret, -1) << "> strtoimax fail, errno = " << errno; 74f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ".6"); 75f6603c60Sopenharmony_ci 76f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 10); 77f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0) << "> strtoimax fail, errno = " << errno; 78f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ".6"); 79f6603c60Sopenharmony_ci 80f6603c60Sopenharmony_ci char nPtr1[] = "9223372036854775807 9223372036854775808 -9223372036854775807"; // 2^63-1 81f6603c60Sopenharmony_ci ret = strtoimax(nPtr1, &endPtr, 10); 82f6603c60Sopenharmony_ci EXPECT_EQ(ret, 9223372036854775807) << "> strtoimax fail, errno = " << errno; 83f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 9223372036854775808 -9223372036854775807"); 84f6603c60Sopenharmony_ci 85f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 10); 86f6603c60Sopenharmony_ci EXPECT_EQ(ret, 9223372036854775807) << "> strtoimax fail, errno = " << errno; 87f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " -9223372036854775807"); 88f6603c60Sopenharmony_ci 89f6603c60Sopenharmony_ci ret = strtoimax(endPtr, &endPtr, 10); 90f6603c60Sopenharmony_ci EXPECT_EQ(ret, -9223372036854775807) << "> strtoimax fail, errno = " << errno; 91f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ""); 92f6603c60Sopenharmony_ci} 93f6603c60Sopenharmony_ci 94f6603c60Sopenharmony_ci/** 95f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0600 96f6603c60Sopenharmony_ci * @tc.name strtoumax basic function test 97f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 98f6603c60Sopenharmony_ci */ 99f6603c60Sopenharmony_ciHWTEST_F(IoTest, testStrtoumax, Function | MediumTest | Level1) 100f6603c60Sopenharmony_ci{ 101f6603c60Sopenharmony_ci char nPtr[] = "12 0110 0XDEFE 0666 1.6"; 102f6603c60Sopenharmony_ci char *endPtr = nullptr; 103f6603c60Sopenharmony_ci uintmax_t ret = strtoumax(nPtr, &endPtr, 10); 104f6603c60Sopenharmony_ci EXPECT_EQ(ret, 12ULL) << "> strtoumax fail, errno = " << errno; 105f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0110 0XDEFE 0666 1.6"); 106f6603c60Sopenharmony_ci 107f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 2); 108f6603c60Sopenharmony_ci EXPECT_EQ(ret, 6ULL) << "> strtoumax fail, errno = " << errno; 109f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0XDEFE 0666 1.6"); 110f6603c60Sopenharmony_ci 111f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 16); 112f6603c60Sopenharmony_ci EXPECT_EQ(ret, 57086ULL) << "> strtoumax fail, errno = " << errno; 113f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 0666 1.6"); 114f6603c60Sopenharmony_ci 115f6603c60Sopenharmony_ci 116f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 8); 117f6603c60Sopenharmony_ci EXPECT_EQ(ret, 438ULL) << "> strtoumax fail, errno = " << errno; 118f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 1.6"); 119f6603c60Sopenharmony_ci 120f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 65); 121f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0ULL) << "> strtoumax fail, errno = " << errno; 122f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 1.6"); 123f6603c60Sopenharmony_ci 124f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 10); 125f6603c60Sopenharmony_ci EXPECT_EQ(ret, 1ULL) << "> strtoumax fail, errno = " << errno; 126f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ".6"); 127f6603c60Sopenharmony_ci 128f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 10); 129f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0ULL) << "> strtoumax fail, errno = " << errno; 130f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ".6"); 131f6603c60Sopenharmony_ci 132f6603c60Sopenharmony_ci char nPtr1[] = "18446744073709551615 18446744073709551616"; // 2^64-1 133f6603c60Sopenharmony_ci ret = strtoumax(nPtr1, &endPtr, 10); 134f6603c60Sopenharmony_ci EXPECT_EQ(ret, 18446744073709551615ULL) << "> strtoumax fail, errno = " << errno; 135f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, " 18446744073709551616"); 136f6603c60Sopenharmony_ci 137f6603c60Sopenharmony_ci ret = strtoumax(endPtr, &endPtr, 10); 138f6603c60Sopenharmony_ci EXPECT_EQ(ret, 18446744073709551615ULL) << "> strtoumax fail, errno = " << errno; 139f6603c60Sopenharmony_ci EXPECT_STREQ(endPtr, ""); 140f6603c60Sopenharmony_ci} 141f6603c60Sopenharmony_ci 142f6603c60Sopenharmony_ci/** 143f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0700 144f6603c60Sopenharmony_ci * @tc.name writev basic function test 145f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 146f6603c60Sopenharmony_ci */ 147f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWritev, Function | MediumTest | Level1) 148f6603c60Sopenharmony_ci{ 149f6603c60Sopenharmony_ci struct iovec iov[2]; 150f6603c60Sopenharmony_ci char buf1[6] = {0}; 151f6603c60Sopenharmony_ci iov[0].iov_base = buf1; 152f6603c60Sopenharmony_ci iov[0].iov_len = sizeof(buf1) - 1; 153f6603c60Sopenharmony_ci 154f6603c60Sopenharmony_ci char buf2[6] = {0}; 155f6603c60Sopenharmony_ci iov[1].iov_base = buf2; 156f6603c60Sopenharmony_ci iov[1].iov_len = sizeof(buf2) - 1; 157f6603c60Sopenharmony_ci 158f6603c60Sopenharmony_ci FILE *fp = nullptr; 159f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 160f6603c60Sopenharmony_ci FOPEN_READ(fp); 161f6603c60Sopenharmony_ci int fd = 0; 162f6603c60Sopenharmony_ci FILENO(fp); 163f6603c60Sopenharmony_ci ssize_t ret = readv(fd, iov, 2); 164f6603c60Sopenharmony_ci EXPECT_EQ(ret, 10); 165f6603c60Sopenharmony_ci EXPECT_STREQ(buf1, "hello"); 166f6603c60Sopenharmony_ci EXPECT_STREQ(buf2, " worl"); 167f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 168f6603c60Sopenharmony_ci 169f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 170f6603c60Sopenharmony_ci FILENO(fp); 171f6603c60Sopenharmony_ci ret = writev(fd, iov, 2); 172f6603c60Sopenharmony_ci EXPECT_EQ(ret, 10); 173f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 174f6603c60Sopenharmony_ci 175f6603c60Sopenharmony_ci FOPEN_READ(fp); 176f6603c60Sopenharmony_ci char str[50] = {0}; 177f6603c60Sopenharmony_ci char *gStr = fgets(str, sizeof(str), fp); 178f6603c60Sopenharmony_ci EXPECT_STREQ(gStr, str); 179f6603c60Sopenharmony_ci EXPECT_STREQ(str, "hello worl"); 180f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 181f6603c60Sopenharmony_ci} 182f6603c60Sopenharmony_ci 183f6603c60Sopenharmony_ci/** 184f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0800 185f6603c60Sopenharmony_ci * @tc.name pread basic function test 186f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 187f6603c60Sopenharmony_ci */ 188f6603c60Sopenharmony_ciHWTEST_F(IoTest, testPread, Function | MediumTest | Level1) 189f6603c60Sopenharmony_ci{ 190f6603c60Sopenharmony_ci FILE *fp = nullptr; 191f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 192f6603c60Sopenharmony_ci int fd = 0; 193f6603c60Sopenharmony_ci FILENO(fp); 194f6603c60Sopenharmony_ci char str[50] = "hello world"; 195f6603c60Sopenharmony_ci ssize_t retR = pwrite(fd, str, strlen(str), 6); 196f6603c60Sopenharmony_ci EXPECT_EQ(retR, 11); 197f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 198f6603c60Sopenharmony_ci 199f6603c60Sopenharmony_ci FOPEN_READ(fp); 200f6603c60Sopenharmony_ci FILENO(fp); 201f6603c60Sopenharmony_ci char buf[50] = {0}; 202f6603c60Sopenharmony_ci retR = pread(fd, buf, strlen(str), 6); 203f6603c60Sopenharmony_ci EXPECT_EQ(retR, 11); 204f6603c60Sopenharmony_ci EXPECT_STREQ(buf, "hello world"); 205f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 206f6603c60Sopenharmony_ci} 207f6603c60Sopenharmony_ci 208f6603c60Sopenharmony_ci/** 209f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_0900 210f6603c60Sopenharmony_ci * @tc.name strptime basic function test 211f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 212f6603c60Sopenharmony_ci */ 213f6603c60Sopenharmony_ciHWTEST_F(IoTest, testStrptime, Function | MediumTest | Level1) 214f6603c60Sopenharmony_ci{ 215f6603c60Sopenharmony_ci struct tm tm; 216f6603c60Sopenharmony_ci int memRet = -1; 217f6603c60Sopenharmony_ci memRet = memset_s(&tm, sizeof(struct tm), 0, sizeof(struct tm)); 218f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 219f6603c60Sopenharmony_ci char *ret = strptime("2020-10-29 21:24:00abc", "%Y-%m-%d %H:%M:%S", &tm); 220f6603c60Sopenharmony_ci EXPECT_STREQ(ret, "abc"); 221f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_year, 120); 222f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_mon, 9); 223f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_mday, 29); 224f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_hour, 21); 225f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_min, 24); 226f6603c60Sopenharmony_ci 227f6603c60Sopenharmony_ci ret = strptime("14 Oct October 20 09:24:00 Sat Saturday 363", "%d %b %B %y %I:%M:%S %a %A %j", &tm); 228f6603c60Sopenharmony_ci EXPECT_STREQ(ret, ""); 229f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_year, 120); 230f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_mon, 9); 231f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_mday, 14); 232f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_hour, 9); 233f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_wday, 6); 234f6603c60Sopenharmony_ci EXPECT_EQ(tm.tm_yday, 362); 235f6603c60Sopenharmony_ci} 236f6603c60Sopenharmony_ci 237f6603c60Sopenharmony_ci/** 238f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_OTHER_1000 239f6603c60Sopenharmony_ci * @tc.name iconv basic function test 240f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 241f6603c60Sopenharmony_ci */ 242f6603c60Sopenharmony_ciHWTEST_F(IoTest, testIconv, Function | MediumTest | Level1) 243f6603c60Sopenharmony_ci{ 244f6603c60Sopenharmony_ci char inBuf[50] = "hello"; 245f6603c60Sopenharmony_ci size_t inLen = strlen(inBuf); 246f6603c60Sopenharmony_ci char outBuf[50] = {0}; 247f6603c60Sopenharmony_ci size_t outLen = sizeof(outBuf); 248f6603c60Sopenharmony_ci char *inSrc = inBuf; 249f6603c60Sopenharmony_ci char *outSrc = outBuf; 250f6603c60Sopenharmony_ci iconv_t cd = iconv_open("UTF_32", "UTF_16"); 251f6603c60Sopenharmony_ci size_t ret = iconv(cd, &inSrc, &inLen, &outSrc, &outLen); 252f6603c60Sopenharmony_ci EXPECT_EQ(ret, 4294967295U) << "iconv fail, errno = " << errno; 253f6603c60Sopenharmony_ci EXPECT_STREQ(inSrc, "o") << "iconv fail, errno = " << errno; 254f6603c60Sopenharmony_ci EXPECT_EQ(inLen, 1U) << "iconv fail, errno = " << errno; 255f6603c60Sopenharmony_ci EXPECT_STREQ(outSrc, "") << "iconv fail, errno = " << errno; 256f6603c60Sopenharmony_ci EXPECT_EQ(outLen, 42U) << "iconv fail, errno = " << errno; 257f6603c60Sopenharmony_ci EXPECT_STREQ(outBuf, "") << "iconv fail, errno = " << errno; 258f6603c60Sopenharmony_ci EXPECT_EQ(iconv_close(cd), 0) << "iconv_close fail, errn = " << errno; 259f6603c60Sopenharmony_ci}