/ tests / netbsd_strerror.c
netbsd_strerror.c
  1  /* $NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $ */
  2  
  3  /*-
  4   * Copyright (c) 2011 The NetBSD Foundation, Inc.
  5   * All rights reserved.
  6   *
  7   * This code is derived from software contributed to The NetBSD Foundation
  8   * by Jukka Ruohonen.
  9   *
 10   * Redistribution and use in source and binary forms, with or without
 11   * modification, are permitted provided that the following conditions
 12   * are met:
 13   * 1. Redistributions of source code must retain the above copyright
 14   *    notice, this list of conditions and the following disclaimer.
 15   * 2. Redistributions in binary form must reproduce the above copyright
 16   *    notice, this list of conditions and the following disclaimer in the
 17   *    documentation and/or other materials provided with the distribution.
 18   *
 19   * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 20   * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 21   * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 22   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 23   * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 24   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 25   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 26   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 27   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 28   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 29   * POSSIBILITY OF SUCH DAMAGE.
 30   */
 31  #include <sys/cdefs.h>
 32  __RCSID("$NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $");
 33  
 34  #include <errno.h>
 35  #include <limits.h>
 36  #include <locale.h>
 37  #include <string.h>
 38  #include <stdio.h>
 39  
 40  #include "darwintest.h"
 41  
 42  T_DECL(netbsd_strerror_basic, "A basic test of strerror(3)")
 43  {
 44  	int i;
 45  
 46  	for (i = 1; i < sys_nerr; i++)
 47  		T_EXPECT_NULL(strstr(strerror(i), "Unknown error:"), NULL);
 48  
 49  	for (; i < sys_nerr + 10; i++)
 50  		T_EXPECT_NOTNULL(strstr(strerror(i), "Unknown error:"), NULL);
 51  }
 52  
 53  T_DECL(netbsd_strerror_err, "Test errors from strerror(3)")
 54  {
 55  	(void)setlocale(LC_ALL, "C");
 56  
 57  	errno = 0;
 58  
 59  	T_ASSERT_NOTNULL(strstr(strerror(INT_MAX), "Unknown error:"), NULL);
 60  	T_ASSERT_EQ(errno, EINVAL, NULL);
 61  
 62  	errno = 0;
 63  
 64  	T_ASSERT_NOTNULL(strstr(strerror(INT_MIN), "Unknown error:"), NULL);
 65  	T_ASSERT_EQ(errno, EINVAL, NULL);
 66  }
 67  
 68  T_DECL(netbsd_strerror_r_basic, "A basic test of strerror_r(3)")
 69  {
 70  	char buf[512];
 71  	int i;
 72  
 73  	(void)setlocale(LC_ALL, "C");
 74  
 75  	for (i = 1; i < sys_nerr; i++) {
 76  		T_ASSERT_EQ(strerror_r(i, buf, sizeof(buf)), 0, NULL);
 77  		T_ASSERT_NULL(strstr(buf, "Unknown error:"), NULL);
 78  	}
 79  
 80  	for (; i < sys_nerr + 10; i++) {
 81  		T_ASSERT_EQ(strerror_r(i, buf, sizeof(buf)), EINVAL, NULL);
 82  		T_ASSERT_NOTNULL(strstr(buf, "Unknown error:"), NULL);
 83  	}
 84  }
 85  
 86  T_DECL(netbsd_strerror_r_err, "Test errors from strerror_r(3)")
 87  {
 88  	char buf[512];
 89  	int rv;
 90  
 91  	(void)setlocale(LC_ALL, "C");
 92  
 93  	rv = strerror_r(EPERM, buf, 1);
 94  	T_ASSERT_EQ(rv, ERANGE, NULL);
 95  
 96  	rv = strerror_r(INT_MAX, buf, sizeof(buf));
 97  
 98  	T_ASSERT_EQ(rv, EINVAL, NULL);
 99  	T_ASSERT_NOTNULL(strstr(buf, "Unknown error:"), NULL);
100  
101  	rv = strerror_r(INT_MIN, buf, sizeof(buf));
102  
103  	T_ASSERT_EQ(rv, EINVAL, NULL);
104  	T_ASSERT_NOTNULL(strstr(buf, "Unknown error:"), NULL);
105  }