trimdomain-nodomain_test.c revision 303975
1132720Skan/* 2132720Skan * Copyright (C) 2005 Brooks Davis. All rights reserved. 397403Sobrien * 4132720Skan * Redistribution and use in source and binary forms, with or without 5132720Skan * modification, are permitted provided that the following conditions 6132720Skan * are met: 797403Sobrien * 1. Redistributions of source code must retain the above copyright 8132720Skan * notice, this list of conditions and the following disclaimer. 9132720Skan * 2. Redistributions in binary form must reproduce the above copyright 10132720Skan * notice, this list of conditions and the following disclaimer in the 11132720Skan * documentation and/or other materials provided with the distribution. 12132720Skan * 1397403Sobrien * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1497403Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15132720Skan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1697403Sobrien * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 17132720Skan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18132720Skan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19132720Skan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20132720Skan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21132720Skan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22132720Skan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2397403Sobrien * SUCH DAMAGE. 24132720Skan */ 2597403Sobrien 2697403Sobrien#include <sys/cdefs.h> 27132720Skan__FBSDID("$FreeBSD: releng/11.0/lib/libutil/tests/trimdomain-nodomain_test.c 269904 2014-08-13 04:56:27Z ngie $"); 2897403Sobrien 29132720Skan#include <sys/types.h> 30132720Skan#include <sys/param.h> 3197403Sobrien#include <errno.h> 3297403Sobrien#include <libutil.h> 33132720Skan#include <stdio.h> 3497403Sobrien#include <stdlib.h> 35107606Sobrien#include <string.h> 36132720Skan#include <unistd.h> 37107606Sobrien 38107606Sobrien#define TESTDOMAIN "" 39107606Sobrien#define TESTHOST "testhost" 40107606Sobrien#define TESTFQDN "testhost" TESTDOMAIN 41132720Skan 42132720Skanint failures = 0; 43132720Skanint tests = 0; 44132720Skan 45107606Sobrien/* 46132720Skan * Evily override gethostname(3) so trimdomain always gets the same result. 47107606Sobrien * This makes the tests much easier to write and less likely to fail on 48107606Sobrien * oddly configured systems. 49132720Skan */ 50132720Skanint 51132720Skangethostname(char *name, size_t namelen) 52132720Skan{ 53132720Skan if (strlcpy(name, TESTFQDN, namelen) > namelen) { 54132720Skan errno = ENAMETOOLONG; 55110614Skan return (-1); 56110614Skan } 57110614Skan return (0); 58132720Skan} 59132720Skan 60117397Skanvoid 61132720Skantestit(const char *input, int hostsize, const char *output, const char *test) 62132720Skan{ 63132720Skan char *testhost; 64132720Skan const char *expected = (output == NULL) ? input : output; 65132720Skan 66132720Skan testhost = strdup(input); 67132720Skan trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize); 68132720Skan tests++; 69132720Skan if (strcmp(testhost, expected) != 0) { 70117397Skan printf("not ok %d - %s\n", tests, test); 71117397Skan printf("# %s -> %s (expected %s)\n", input, testhost, expected); 72117397Skan } else 73117397Skan printf("ok %d - %s\n", tests, test); 74117397Skan free(testhost); 75117397Skan return; 76117397Skan} 77117397Skan 78117397Skanint 7997403Sobrienmain(void) 8097403Sobrien{ 8197403Sobrien 8297403Sobrien printf("1..5\n"); 8397403Sobrien 8497403Sobrien testit(TESTFQDN, -1, TESTHOST, "self"); 8597403Sobrien testit("XXX" TESTDOMAIN, -1, "XXX", "different host, same domain"); 8697403Sobrien testit("XXX" TESTDOMAIN, 1, NULL, "short hostsize"); 8797403Sobrien testit("bogus.example.net", -1, NULL, "arbitrary host"); 8897403Sobrien testit("XXX." TESTFQDN, -1, NULL, "domain is local hostname"); 8997403Sobrien 9097403Sobrien return (0); 9197403Sobrien} 9297403Sobrien