env_test.c revision 240120
1138568Ssam/*
2138568Ssam * Automated Testing Framework (atf)
3170360Ssam *
4138568Ssam * Copyright (c) 2007 The NetBSD Foundation, Inc.
5138568Ssam * All rights reserved.
6138568Ssam *
7138568Ssam * Redistribution and use in source and binary forms, with or without
8138568Ssam * modification, are permitted provided that the following conditions
9138568Ssam * are met:
10138568Ssam * 1. Redistributions of source code must retain the above copyright
11138568Ssam *    notice, this list of conditions and the following disclaimer.
12138568Ssam * 2. Redistributions in binary form must reproduce the above copyright
13138568Ssam *    notice, this list of conditions and the following disclaimer in the
14138568Ssam *    documentation and/or other materials provided with the distribution.
15138568Ssam *
16138568Ssam * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17138568Ssam * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18138568Ssam * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19138568Ssam * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20138568Ssam * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21138568Ssam * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22138568Ssam * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23138568Ssam * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24138568Ssam * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25138568Ssam * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26138568Ssam * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27138568Ssam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28138568Ssam */
29138568Ssam
30138568Ssam#include <stdlib.h>
31138568Ssam#include <string.h>
32138568Ssam
33138568Ssam#include <atf-c.h>
34138568Ssam
35138568Ssam#include "env.h"
36170530Ssam#include "test_helpers.h"
37138568Ssam#include "text.h"
38138568Ssam
39138568Ssam/* ---------------------------------------------------------------------
40138568Ssam * Test cases for the free functions.
41138568Ssam * --------------------------------------------------------------------- */
42138568Ssam
43138568SsamATF_TC(has);
44138568SsamATF_TC_HEAD(has, tc)
45138568Ssam{
46138568Ssam    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_has function");
47138568Ssam}
48138568SsamATF_TC_BODY(has, tc)
49170530Ssam{
50170530Ssam    ATF_REQUIRE(atf_env_has("PATH"));
51170530Ssam    ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_"));
52138568Ssam}
53170530Ssam
54138568SsamATF_TC(get);
55138568SsamATF_TC_HEAD(get, tc)
56138568Ssam{
57138568Ssam    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_get function");
58138568Ssam}
59138568SsamATF_TC_BODY(get, tc)
60170530Ssam{
61170530Ssam    const char *val;
62138568Ssam
63167283Ssam    ATF_REQUIRE(atf_env_has("PATH"));
64138568Ssam
65138568Ssam    val = atf_env_get("PATH");
66170530Ssam    ATF_REQUIRE(strlen(val) > 0);
67138568Ssam    ATF_REQUIRE(strchr(val, ':') != NULL);
68138568Ssam}
69138568Ssam
70138568SsamATF_TC(set);
71138568SsamATF_TC_HEAD(set, tc)
72138568Ssam{
73138568Ssam    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_set function");
74138568Ssam}
75138568SsamATF_TC_BODY(set, tc)
76138568Ssam{
77138568Ssam    char *oldval;
78138568Ssam
79138568Ssam    ATF_REQUIRE(atf_env_has("PATH"));
80138568Ssam    RE(atf_text_format(&oldval, "%s", atf_env_get("PATH")));
81138568Ssam    RE(atf_env_set("PATH", "foo-bar"));
82138568Ssam    ATF_REQUIRE(strcmp(atf_env_get("PATH"), oldval) != 0);
83138568Ssam    ATF_REQUIRE(strcmp(atf_env_get("PATH"), "foo-bar") == 0);
84138568Ssam    free(oldval);
85138568Ssam
86138568Ssam    ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_"));
87138568Ssam    RE(atf_env_set("_UNDEFINED_VARIABLE_", "foo2-bar2"));
88138568Ssam    ATF_REQUIRE(strcmp(atf_env_get("_UNDEFINED_VARIABLE_"),
89138568Ssam                     "foo2-bar2") == 0);
90138568Ssam}
91138568Ssam
92138568SsamATF_TC(unset);
93138568SsamATF_TC_HEAD(unset, tc)
94138568Ssam{
95138568Ssam    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_unset function");
96138568Ssam}
97138568SsamATF_TC_BODY(unset, tc)
98138568Ssam{
99138568Ssam    ATF_REQUIRE(atf_env_has("PATH"));
100138568Ssam    RE(atf_env_unset("PATH"));
101138568Ssam    ATF_REQUIRE(!atf_env_has("PATH"));
102138568Ssam}
103138568Ssam
104138568Ssam/* ---------------------------------------------------------------------
105138568Ssam * Main.
106170530Ssam * --------------------------------------------------------------------- */
107170530Ssam
108170530SsamATF_TP_ADD_TCS(tp)
109170530Ssam{
110170530Ssam    ATF_TP_ADD_TC(tp, has);
111170530Ssam    ATF_TP_ADD_TC(tp, get);
112172056Ssam    ATF_TP_ADD_TC(tp, set);
113172056Ssam    ATF_TP_ADD_TC(tp, unset);
114138568Ssam
115138568Ssam    return atf_no_error();
116138568Ssam}
117138568Ssam