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