Path: blob/main/lib/libc/tests/string/strerror_test.c
39485 views
/*-1* Copyright (c) 2001 Wes Peters <[email protected]>2* All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7* 1. Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9* 2. Redistributions in binary form must reproduce the above copyright10* notice, this list of conditions and the following disclaimer in the11* documentation and/or other materials provided with the distribution.12*13* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND14* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE15* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE16* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE17* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL18* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS19* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)20* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT21* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY22* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF23* SUCH DAMAGE.24*/2526#include <assert.h>27#include <errno.h>28#include <limits.h>29#include <stdio.h>30#include <stdlib.h>31#include <string.h>3233#include <atf-c.h>3435static char buf[64];36static char *sret;37static int iret;3839ATF_TC_WITHOUT_HEAD(strerror_unknown_error);40ATF_TC_BODY(strerror_unknown_error, tc)41{4243errno = 0;44sret = strerror(INT_MAX);45snprintf(buf, sizeof(buf), "Unknown error: %d", INT_MAX);46ATF_CHECK(strcmp(sret, buf) == 0);47ATF_CHECK(errno == EINVAL);48}4950ATF_TC_WITHOUT_HEAD(strerror_no_error);51ATF_TC_BODY(strerror_no_error, tc)52{5354errno = 0;55sret = strerror(0);56ATF_CHECK(strcmp(sret, "No error: 0") == 0);57ATF_CHECK(errno == 0);58}5960ATF_TC_WITHOUT_HEAD(strerror_EPERM_test);61ATF_TC_BODY(strerror_EPERM_test, tc)62{6364errno = 0;65sret = strerror(EPERM);66ATF_CHECK(strcmp(sret, "Operation not permitted") == 0);67ATF_CHECK(errno == 0);68}6970ATF_TC_WITHOUT_HEAD(strerror_EPFNOSUPPORT_test);71ATF_TC_BODY(strerror_EPFNOSUPPORT_test, tc)72{7374errno = 0;75sret = strerror(EPFNOSUPPORT);76ATF_CHECK(strcmp(sret, "Protocol family not supported") == 0);77ATF_CHECK(errno == 0);78}7980ATF_TC_WITHOUT_HEAD(strerror_ELAST_test);81ATF_TC_BODY(strerror_ELAST_test, tc)82{8384errno = 0;85sret = strerror(ELAST);86ATF_CHECK(errno == 0);87}8889ATF_TC_WITHOUT_HEAD(strerror_r__unknown_error);90ATF_TC_BODY(strerror_r__unknown_error, tc)91{9293memset(buf, '*', sizeof(buf));94iret = strerror_r(-1, buf, sizeof(buf));95ATF_CHECK(strcmp(buf, "Unknown error: -1") == 0);96ATF_CHECK(iret == EINVAL);97}9899ATF_TC_WITHOUT_HEAD(strerror_r__EPERM_one_byte_short);100ATF_TC_BODY(strerror_r__EPERM_one_byte_short, tc)101{102103memset(buf, '*', sizeof(buf));104/* One byte too short. */105iret = strerror_r(EPERM, buf, strlen("Operation not permitted"));106ATF_CHECK(strcmp(buf, "Operation not permitte") == 0);107ATF_CHECK(iret == ERANGE);108}109110ATF_TC_WITHOUT_HEAD(strerror_r__EPERM_unknown_error_one_byte_short);111ATF_TC_BODY(strerror_r__EPERM_unknown_error_one_byte_short, tc)112{113114memset(buf, '*', sizeof(buf));115/* One byte too short. */116iret = strerror_r(-1, buf, strlen("Unknown error: -1"));117ATF_CHECK(strcmp(buf, "Unknown error: -") == 0);118ATF_CHECK(iret == EINVAL);119}120121ATF_TC_WITHOUT_HEAD(strerror_r__EPERM_unknown_error_two_bytes_short);122ATF_TC_BODY(strerror_r__EPERM_unknown_error_two_bytes_short, tc)123{124125memset(buf, '*', sizeof(buf));126/* Two bytes too short. */127iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 1);128ATF_CHECK(strcmp(buf, "Unknown error: ") == 0);129ATF_CHECK(iret == EINVAL);130}131132ATF_TC_WITHOUT_HEAD(strerror_r__EPERM_unknown_error_three_bytes_short);133ATF_TC_BODY(strerror_r__EPERM_unknown_error_three_bytes_short, tc)134{135136memset(buf, '*', sizeof(buf));137/* Three bytes too short. */138iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 2);139ATF_CHECK(strcmp(buf, "Unknown error:") == 0);140ATF_CHECK(iret == EINVAL);141}142143ATF_TC_WITHOUT_HEAD(strerror_r__EPERM_unknown_error_12345_one_byte_short);144ATF_TC_BODY(strerror_r__EPERM_unknown_error_12345_one_byte_short, tc)145{146147memset(buf, '*', sizeof(buf));148/* One byte too short. */149iret = strerror_r(12345, buf, strlen("Unknown error: 12345"));150ATF_CHECK(strcmp(buf, "Unknown error: 1234") == 0);151ATF_CHECK(iret == EINVAL);152}153154ATF_TC_WITHOUT_HEAD(strerror_r__no_error);155ATF_TC_BODY(strerror_r__no_error, tc)156{157158memset(buf, '*', sizeof(buf));159iret = strerror_r(0, buf, sizeof(buf));160ATF_CHECK(strcmp(buf, "No error: 0") == 0);161ATF_CHECK(iret == 0);162}163164ATF_TC_WITHOUT_HEAD(strerror_r__EDEADLK);165ATF_TC_BODY(strerror_r__EDEADLK, tc)166{167168memset(buf, '*', sizeof(buf));169iret = strerror_r(EDEADLK, buf, sizeof(buf));170ATF_CHECK(strcmp(buf, "Resource deadlock avoided") == 0);171ATF_CHECK(iret == 0);172}173174ATF_TC_WITHOUT_HEAD(strerror_r__EPROCLIM);175ATF_TC_BODY(strerror_r__EPROCLIM, tc)176{177178memset(buf, '*', sizeof(buf));179iret = strerror_r(EPROCLIM, buf, sizeof(buf));180ATF_CHECK(strcmp(buf, "Too many processes") == 0);181ATF_CHECK(iret == 0);182}183184ATF_TP_ADD_TCS(tp)185{186187ATF_TP_ADD_TC(tp, strerror_unknown_error);188ATF_TP_ADD_TC(tp, strerror_no_error);189ATF_TP_ADD_TC(tp, strerror_EPERM_test);190ATF_TP_ADD_TC(tp, strerror_EPFNOSUPPORT_test);191ATF_TP_ADD_TC(tp, strerror_ELAST_test);192ATF_TP_ADD_TC(tp, strerror_r__unknown_error);193ATF_TP_ADD_TC(tp, strerror_r__EPERM_one_byte_short);194ATF_TP_ADD_TC(tp, strerror_r__EPERM_unknown_error_one_byte_short);195ATF_TP_ADD_TC(tp, strerror_r__EPERM_unknown_error_two_bytes_short);196ATF_TP_ADD_TC(tp, strerror_r__EPERM_unknown_error_three_bytes_short);197ATF_TP_ADD_TC(tp, strerror_r__EPERM_unknown_error_12345_one_byte_short);198ATF_TP_ADD_TC(tp, strerror_r__no_error);199ATF_TP_ADD_TC(tp, strerror_r__EDEADLK);200ATF_TP_ADD_TC(tp, strerror_r__EPROCLIM);201202return (atf_no_error());203}204205206