Home | History | Annotate | Line # | Download | only in integration
      1 # Copyright 2011 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 
     30 # Executes a mock test suite to generate data in the database.
     31 #
     32 # \param mock_env The value to store in a MOCK variable in the environment.
     33 #     Use this to be able to differentiate executions by inspecting the
     34 #     context of the output.
     35 #
     36 # \return The action identifier of the committed action.
     37 run_tests() {
     38     local mock_env="${1}"
     39 
     40     mkdir testsuite
     41     cd testsuite
     42 
     43     cat >Kyuafile <<EOF
     44 syntax(2)
     45 test_suite("integration")
     46 atf_test_program{name="simple_all_pass"}
     47 EOF
     48 
     49     utils_cp_helper simple_all_pass .
     50     test -d ../.kyua || mkdir ../.kyua
     51     kyua=$(which kyua)
     52     atf_check -s exit:0 -o save:stdout -e empty env \
     53         HOME="$(pwd)/home" MOCK="${mock_env}" \
     54         "${kyua}" test --store=../.kyua/store.db
     55 
     56     action_id=$(grep '^Committed action ' stdout | cut -d ' ' -f 3)
     57     echo "New action is ${action_id}"
     58 
     59     cd -
     60     # Ensure the results of 'report' come from the database.
     61     rm -rf testsuite
     62 
     63     return "${action_id}"
     64 }
     65 
     66 
     67 utils_test_case default_behavior__ok
     68 default_behavior__ok_body() {
     69     utils_install_timestamp_wrapper
     70 
     71     run_tests "mock1"
     72 
     73     cat >expout <<EOF
     74 ===> Skipped tests
     75 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
     76 ===> Summary
     77 Action: 1
     78 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
     79 Total time: S.UUUs
     80 EOF
     81     atf_check -s exit:0 -o file:expout -e empty kyua report
     82 
     83     run_tests "mock2"
     84 
     85     cat >expout <<EOF
     86 ===> Skipped tests
     87 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
     88 ===> Summary
     89 Action: 2
     90 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
     91 Total time: S.UUUs
     92 EOF
     93     atf_check -s exit:0 -o file:expout -e empty kyua report
     94 }
     95 
     96 
     97 utils_test_case default_behavior__no_actions
     98 default_behavior__no_actions_body() {
     99     kyua db-exec "SELECT * FROM actions"
    100 
    101     echo 'kyua: E: No actions in the database.' >experr
    102     atf_check -s exit:2 -o empty -e file:experr kyua report
    103 }
    104 
    105 
    106 utils_test_case default_behavior__no_store
    107 default_behavior__no_store_body() {
    108     atf_check -s exit:2 -o empty \
    109         -e match:"kyua: E: Cannot open '.*/.kyua/store.db': " kyua report
    110 }
    111 
    112 
    113 utils_test_case action__explicit
    114 action__explicit_body() {
    115     run_tests "mock1"; action1=$?
    116     run_tests "mock2"; action2=$?
    117 
    118     atf_check -s exit:0 -o match:"MOCK=mock1" -o not-match:"MOCK=mock2" \
    119         -o match:"Action: 1" -o not-match:"Action: 2" \
    120         -e empty kyua report --action="${action1}" --show-context
    121     atf_check -s exit:0 -o not-match:"MOCK=mock1" -o match:"MOCK=mock2" \
    122         -o match:"Action: 2" -o not-match:"Action: 1" \
    123         -e empty kyua report --action="${action2}" --show-context
    124 }
    125 
    126 
    127 utils_test_case action__not_found
    128 action__not_found_body() {
    129     kyua db-exec "SELECT * FROM actions"
    130 
    131     echo 'kyua: E: Error loading action 514: does not exist.' >experr
    132     atf_check -s exit:2 -o empty -e file:experr kyua report --action=514
    133 }
    134 
    135 
    136 utils_test_case show_context
    137 show_context_body() {
    138     run_tests "mock1"
    139 
    140     cat >expout <<EOF
    141 ===> Execution context
    142 Current directory: $(pwd)/testsuite
    143 Environment variables:
    144 EOF
    145     mkdir testsuite
    146     ( cd testsuite && HOME=$(pwd)/home MOCK=mock1 env ) \
    147         | sort | sed -e 's,^,    ,' | grep -v '^    _.*=.*' >>expout
    148     rmdir testsuite
    149     cat >>expout <<EOF
    150 ===> Skipped tests
    151 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
    152 ===> Summary
    153 Action: 1
    154 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    155 Total time: S.UUUs
    156 EOF
    157     atf_check -s exit:0 -o file:expout -e empty -x kyua report --show-context \
    158         "| ${utils_strip_timestamp} | grep -v '^    _.*=.*'"
    159 }
    160 
    161 
    162 utils_test_case output__change_file
    163 output__change_file_body() {
    164     run_tests
    165 
    166     cat >report <<EOF
    167 ===> Skipped tests
    168 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
    169 ===> Summary
    170 Action: 1
    171 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    172 Total time: S.UUUs
    173 EOF
    174 
    175     atf_check -s exit:0 -o file:report -e empty -x kyua report \
    176         --output=/dev/stdout "| ${utils_strip_timestamp}"
    177     atf_check -s exit:0 -o empty -e save:stderr kyua report \
    178         --output=/dev/stderr
    179     atf_check -s exit:0 -o file:report -x cat stderr \
    180         "| ${utils_strip_timestamp}"
    181 
    182     atf_check -s exit:0 -o empty -e empty kyua report \
    183         --output=my-file
    184     atf_check -s exit:0 -o file:report -x cat my-file \
    185         "| ${utils_strip_timestamp}"
    186 }
    187 
    188 
    189 utils_test_case results_filter__empty
    190 results_filter__empty_body() {
    191     utils_install_timestamp_wrapper
    192 
    193     run_tests "mock1"
    194 
    195     cat >expout <<EOF
    196 ===> Passed tests
    197 simple_all_pass:pass  ->  passed  [S.UUUs]
    198 ===> Skipped tests
    199 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
    200 ===> Summary
    201 Action: 1
    202 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    203 Total time: S.UUUs
    204 EOF
    205     atf_check -s exit:0 -o file:expout -e empty kyua report --results-filter=
    206 }
    207 
    208 
    209 utils_test_case results_filter__one
    210 results_filter__one_body() {
    211     utils_install_timestamp_wrapper
    212 
    213     run_tests "mock1"
    214 
    215     cat >expout <<EOF
    216 ===> Passed tests
    217 simple_all_pass:pass  ->  passed  [S.UUUs]
    218 ===> Summary
    219 Action: 1
    220 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    221 Total time: S.UUUs
    222 EOF
    223     atf_check -s exit:0 -o file:expout -e empty kyua report \
    224         --results-filter=passed
    225 }
    226 
    227 
    228 utils_test_case results_filter__multiple_all_match
    229 results_filter__multiple_all_match_body() {
    230     utils_install_timestamp_wrapper
    231 
    232     run_tests "mock1"
    233 
    234     cat >expout <<EOF
    235 ===> Skipped tests
    236 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
    237 ===> Passed tests
    238 simple_all_pass:pass  ->  passed  [S.UUUs]
    239 ===> Summary
    240 Action: 1
    241 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    242 Total time: S.UUUs
    243 EOF
    244     atf_check -s exit:0 -o file:expout -e empty kyua report \
    245         --results-filter=skipped,passed
    246 }
    247 
    248 
    249 utils_test_case results_filter__multiple_some_match
    250 results_filter__multiple_some_match_body() {
    251     utils_install_timestamp_wrapper
    252 
    253     run_tests "mock1"
    254 
    255     cat >expout <<EOF
    256 ===> Skipped tests
    257 simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
    258 ===> Summary
    259 Action: 1
    260 Test cases: 2 total, 1 skipped, 0 expected failures, 0 broken, 0 failed
    261 Total time: S.UUUs
    262 EOF
    263     atf_check -s exit:0 -o file:expout -e empty kyua report \
    264         --results-filter=skipped,xfail,broken,failed
    265 }
    266 
    267 
    268 atf_init_test_cases() {
    269     atf_add_test_case default_behavior__ok
    270     atf_add_test_case default_behavior__no_actions
    271     atf_add_test_case default_behavior__no_store
    272 
    273     atf_add_test_case action__explicit
    274     atf_add_test_case action__not_found
    275 
    276     atf_add_test_case show_context
    277 
    278     atf_add_test_case output__change_file
    279 
    280     atf_add_test_case results_filter__empty
    281     atf_add_test_case results_filter__one
    282     atf_add_test_case results_filter__multiple_all_match
    283     atf_add_test_case results_filter__multiple_some_match
    284 }
    285