1 // Copyright 2012 Google Inc. 2 // All rights reserved. 3 // 4 // Redistribution and use in source and binary forms, with or without 5 // modification, are permitted provided that the following conditions are 6 // met: 7 // 8 // * Redistributions of source code must retain the above copyright 9 // notice, this list of conditions and the following disclaimer. 10 // * Redistributions in binary form must reproduce the above copyright 11 // notice, this list of conditions and the following disclaimer in the 12 // documentation and/or other materials provided with the distribution. 13 // * Neither the name of Google Inc. nor the names of its contributors 14 // may be used to endorse or promote products derived from this software 15 // without specific prior written permission. 16 // 17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29 #include "result.h" 30 31 #include <sys/stat.h> 32 33 #include <atf-c.h> 34 35 #include "error.h" 36 37 38 ATF_TC_WITHOUT_HEAD(write__passed); 39 ATF_TC_BODY(write__passed, tc) 40 { 41 const kyua_error_t error = kyua_result_write( 42 "test.txt", KYUA_RESULT_PASSED, NULL); 43 ATF_REQUIRE(!kyua_error_is_set(error)); 44 ATF_REQUIRE(atf_utils_compare_file("test.txt", "passed\n")); 45 } 46 47 48 ATF_TC_WITHOUT_HEAD(write__failed); 49 ATF_TC_BODY(write__failed, tc) 50 { 51 const kyua_error_t error = kyua_result_write( 52 "test.txt", KYUA_RESULT_FAILED, "Some message"); 53 ATF_REQUIRE(!kyua_error_is_set(error)); 54 ATF_REQUIRE(atf_utils_compare_file("test.txt", "failed: Some message\n")); 55 } 56 57 58 ATF_TC_WITHOUT_HEAD(write__broken); 59 ATF_TC_BODY(write__broken, tc) 60 { 61 const kyua_error_t error = kyua_result_write( 62 "test.txt", KYUA_RESULT_BROKEN, "Some message"); 63 ATF_REQUIRE(!kyua_error_is_set(error)); 64 ATF_REQUIRE(atf_utils_compare_file("test.txt", "broken: Some message\n")); 65 } 66 67 68 ATF_TC_WITHOUT_HEAD(write__skipped); 69 ATF_TC_BODY(write__skipped, tc) 70 { 71 const kyua_error_t error = kyua_result_write( 72 "test.txt", KYUA_RESULT_SKIPPED, "Some message"); 73 ATF_REQUIRE(!kyua_error_is_set(error)); 74 ATF_REQUIRE(atf_utils_compare_file("test.txt", "skipped: Some message\n")); 75 } 76 77 78 ATF_TC_WITHOUT_HEAD(write__expected_failure); 79 ATF_TC_BODY(write__expected_failure, tc) 80 { 81 const kyua_error_t error = kyua_result_write( 82 "test.txt", KYUA_RESULT_EXPECTED_FAILURE, "Some message"); 83 ATF_REQUIRE(!kyua_error_is_set(error)); 84 ATF_REQUIRE(atf_utils_compare_file("test.txt", "expected_failure: " 85 "Some message\n")); 86 } 87 88 89 ATF_TC(write__open_error); 90 ATF_TC_HEAD(write__open_error, tc) 91 { 92 atf_tc_set_md_var(tc, "require.user", "unprivileged"); 93 } 94 ATF_TC_BODY(write__open_error, tc) 95 { 96 ATF_REQUIRE(mkdir("readonly", 0555) != -1); 97 const kyua_error_t error = kyua_result_write( 98 "readonly/test.txt", KYUA_RESULT_FAILED, "Some message"); 99 ATF_REQUIRE(kyua_error_is_set(error)); 100 ATF_REQUIRE(kyua_error_is_type(error, "libc")); 101 char buffer[512]; 102 kyua_error_format(error, buffer, sizeof(buffer)); 103 ATF_REQUIRE(atf_utils_grep_string( 104 "Cannot create result file 'readonly/test.txt'", buffer)); 105 kyua_error_free(error); 106 } 107 108 109 ATF_TP_ADD_TCS(tp) 110 { 111 ATF_TP_ADD_TC(tp, write__passed); 112 ATF_TP_ADD_TC(tp, write__failed); 113 ATF_TP_ADD_TC(tp, write__skipped); 114 ATF_TP_ADD_TC(tp, write__broken); 115 ATF_TP_ADD_TC(tp, write__expected_failure); 116 ATF_TP_ADD_TC(tp, write__open_error); 117 118 return atf_no_error(); 119 } 120