1b0d29bc4SBrooks Davis# Copyright 2014 The Kyua Authors. 2b0d29bc4SBrooks Davis# All rights reserved. 3b0d29bc4SBrooks Davis# 4b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without 5b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are 6b0d29bc4SBrooks Davis# met: 7b0d29bc4SBrooks Davis# 8b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright 9b0d29bc4SBrooks Davis# notice, this list of conditions and the following disclaimer. 10b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright 11b0d29bc4SBrooks Davis# notice, this list of conditions and the following disclaimer in the 12b0d29bc4SBrooks Davis# documentation and/or other materials provided with the distribution. 13b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors 14b0d29bc4SBrooks Davis# may be used to endorse or promote products derived from this software 15b0d29bc4SBrooks Davis# without specific prior written permission. 16b0d29bc4SBrooks Davis# 17b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28b0d29bc4SBrooks Davis 29b0d29bc4SBrooks Davis 30b0d29bc4SBrooks Davis# Executes a mock test suite to generate data in the database. 31b0d29bc4SBrooks Davis# 32b0d29bc4SBrooks Davis# \param mock_env The value to store in a MOCK variable in the environment. 33b0d29bc4SBrooks Davis# Use this to be able to differentiate executions by inspecting the 34b0d29bc4SBrooks Davis# context of the output. 35b0d29bc4SBrooks Davis# \param dbfile_name File to which to write the path to the generated database 36b0d29bc4SBrooks Davis# file. 37b0d29bc4SBrooks Davisrun_tests() { 38b0d29bc4SBrooks Davis local mock_env="${1}"; shift 39b0d29bc4SBrooks Davis local dbfile_name="${1}"; shift 40b0d29bc4SBrooks Davis 41b0d29bc4SBrooks Davis cat >Kyuafile <<EOF 42b0d29bc4SBrooks Davissyntax(2) 43b0d29bc4SBrooks Davistest_suite("integration") 44b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"} 45b0d29bc4SBrooks DavisEOF 46b0d29bc4SBrooks Davis 47b0d29bc4SBrooks Davis utils_cp_helper simple_all_pass . 48b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:stdout -e empty env MOCK="${mock_env}" kyua test 49b0d29bc4SBrooks Davis grep '^Results saved to ' stdout | cut -d ' ' -f 4 >"${dbfile_name}" 50b0d29bc4SBrooks Davis rm stdout 51b0d29bc4SBrooks Davis 52b0d29bc4SBrooks Davis # Ensure the results of 'report-junit' come from the database. 53b0d29bc4SBrooks Davis rm Kyuafile simple_all_pass 54b0d29bc4SBrooks Davis} 55b0d29bc4SBrooks Davis 56b0d29bc4SBrooks Davis 57b0d29bc4SBrooks Davis# Removes the contents of a properties tag from stdout. 58b0d29bc4SBrooks Davisstrip_properties='awk " 59b0d29bc4SBrooks DavisBEGIN { skip = 0; } 60b0d29bc4SBrooks Davis 61b0d29bc4SBrooks Davis/<\/properties>/ { 62b0d29bc4SBrooks Davis print \"</properties>\"; 63b0d29bc4SBrooks Davis skip = 0; 64b0d29bc4SBrooks Davis next; 65b0d29bc4SBrooks Davis} 66b0d29bc4SBrooks Davis 67b0d29bc4SBrooks Davis/<properties>/ { 68b0d29bc4SBrooks Davis print \"<properties>\"; 69b0d29bc4SBrooks Davis print \"CONTENTS STRIPPED BY TEST\"; 70b0d29bc4SBrooks Davis skip = 1; 71b0d29bc4SBrooks Davis next; 72b0d29bc4SBrooks Davis} 73b0d29bc4SBrooks Davis 74b0d29bc4SBrooks Davis{ if (!skip) print; }"' 75b0d29bc4SBrooks Davis 76b0d29bc4SBrooks Davis 77b0d29bc4SBrooks Davisutils_test_case default_behavior__ok 78b0d29bc4SBrooks Davisdefault_behavior__ok_body() { 79b0d29bc4SBrooks Davis utils_install_times_wrapper 80b0d29bc4SBrooks Davis 81b0d29bc4SBrooks Davis run_tests "mock1 82b0d29bc4SBrooks Davisthis should not be seen 83b0d29bc4SBrooks Davismock1 new line" unused_dbfile_name 84b0d29bc4SBrooks Davis 85b0d29bc4SBrooks Davis cat >expout <<EOF 86b0d29bc4SBrooks Davis<?xml version="1.0" encoding="iso-8859-1"?> 87b0d29bc4SBrooks Davis<testsuite> 88b0d29bc4SBrooks Davis<properties> 89b0d29bc4SBrooks DavisCONTENTS STRIPPED BY TEST 90b0d29bc4SBrooks Davis</properties> 91b0d29bc4SBrooks Davis<testcase classname="simple_all_pass" name="pass" time="S.UUU"> 92b0d29bc4SBrooks Davis<system-out>This is the stdout of pass 93b0d29bc4SBrooks Davis</system-out> 94b0d29bc4SBrooks Davis<system-err>Test case metadata 95b0d29bc4SBrooks Davis------------------ 96b0d29bc4SBrooks Davis 97b0d29bc4SBrooks Davisallowed_architectures is empty 98b0d29bc4SBrooks Davisallowed_platforms is empty 99b0d29bc4SBrooks Davisdescription is empty 100257e70f1SIgor Ostapenkoexecenv is empty 101257e70f1SIgor Ostapenkoexecenv_jail_params is empty 102b0d29bc4SBrooks Davishas_cleanup = false 103b0d29bc4SBrooks Davisis_exclusive = false 104b0d29bc4SBrooks Davisrequired_configs is empty 105b0d29bc4SBrooks Davisrequired_disk_space = 0 106b0d29bc4SBrooks Davisrequired_files is empty 107*939fec44SIgor Ostapenkorequired_kmods is empty 108b0d29bc4SBrooks Davisrequired_memory = 0 109b0d29bc4SBrooks Davisrequired_programs is empty 110b0d29bc4SBrooks Davisrequired_user is empty 111b0d29bc4SBrooks Davistimeout = 300 112b0d29bc4SBrooks Davis 113b0d29bc4SBrooks DavisTiming information 114b0d29bc4SBrooks Davis------------------ 115b0d29bc4SBrooks Davis 116b0d29bc4SBrooks DavisStart time: YYYY-MM-DDTHH:MM:SS.ssssssZ 117b0d29bc4SBrooks DavisEnd time: YYYY-MM-DDTHH:MM:SS.ssssssZ 118b0d29bc4SBrooks DavisDuration: S.UUUs 119b0d29bc4SBrooks Davis 120b0d29bc4SBrooks DavisOriginal stderr 121b0d29bc4SBrooks Davis--------------- 122b0d29bc4SBrooks Davis 123b0d29bc4SBrooks DavisThis is the stderr of pass 124b0d29bc4SBrooks Davis</system-err> 125b0d29bc4SBrooks Davis</testcase> 126b0d29bc4SBrooks Davis<testcase classname="simple_all_pass" name="skip" time="S.UUU"> 127b0d29bc4SBrooks Davis<skipped/> 128b0d29bc4SBrooks Davis<system-out>This is the stdout of skip 129b0d29bc4SBrooks Davis</system-out> 130b0d29bc4SBrooks Davis<system-err>Skipped result details 131b0d29bc4SBrooks Davis---------------------- 132b0d29bc4SBrooks Davis 133b0d29bc4SBrooks DavisThe reason for skipping is this 134b0d29bc4SBrooks Davis 135b0d29bc4SBrooks DavisTest case metadata 136b0d29bc4SBrooks Davis------------------ 137b0d29bc4SBrooks Davis 138b0d29bc4SBrooks Davisallowed_architectures is empty 139b0d29bc4SBrooks Davisallowed_platforms is empty 140b0d29bc4SBrooks Davisdescription is empty 141257e70f1SIgor Ostapenkoexecenv is empty 142257e70f1SIgor Ostapenkoexecenv_jail_params is empty 143b0d29bc4SBrooks Davishas_cleanup = false 144b0d29bc4SBrooks Davisis_exclusive = false 145b0d29bc4SBrooks Davisrequired_configs is empty 146b0d29bc4SBrooks Davisrequired_disk_space = 0 147b0d29bc4SBrooks Davisrequired_files is empty 148*939fec44SIgor Ostapenkorequired_kmods is empty 149b0d29bc4SBrooks Davisrequired_memory = 0 150b0d29bc4SBrooks Davisrequired_programs is empty 151b0d29bc4SBrooks Davisrequired_user is empty 152b0d29bc4SBrooks Davistimeout = 300 153b0d29bc4SBrooks Davis 154b0d29bc4SBrooks DavisTiming information 155b0d29bc4SBrooks Davis------------------ 156b0d29bc4SBrooks Davis 157b0d29bc4SBrooks DavisStart time: YYYY-MM-DDTHH:MM:SS.ssssssZ 158b0d29bc4SBrooks DavisEnd time: YYYY-MM-DDTHH:MM:SS.ssssssZ 159b0d29bc4SBrooks DavisDuration: S.UUUs 160b0d29bc4SBrooks Davis 161b0d29bc4SBrooks DavisOriginal stderr 162b0d29bc4SBrooks Davis--------------- 163b0d29bc4SBrooks Davis 164b0d29bc4SBrooks DavisThis is the stderr of skip 165b0d29bc4SBrooks Davis</system-err> 166b0d29bc4SBrooks Davis</testcase> 167b0d29bc4SBrooks Davis</testsuite> 168b0d29bc4SBrooks DavisEOF 169b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:expout -e empty -x "kyua report-junit" \ 170b0d29bc4SBrooks Davis "| ${strip_properties}" 171b0d29bc4SBrooks Davis} 172b0d29bc4SBrooks Davis 173b0d29bc4SBrooks Davis 174b0d29bc4SBrooks Davisutils_test_case default_behavior__no_store 175b0d29bc4SBrooks Davisdefault_behavior__no_store_body() { 176b0d29bc4SBrooks Davis echo 'kyua: E: No previous results file found for test suite' \ 177b0d29bc4SBrooks Davis "$(utils_test_suite_id)." >experr 178b0d29bc4SBrooks Davis atf_check -s exit:2 -o empty -e file:experr kyua report-junit 179b0d29bc4SBrooks Davis} 180b0d29bc4SBrooks Davis 181b0d29bc4SBrooks Davis 182b0d29bc4SBrooks Davisutils_test_case results_file__explicit 183b0d29bc4SBrooks Davisresults_file__explicit_body() { 184b0d29bc4SBrooks Davis run_tests "mock1" dbfile_name1 185b0d29bc4SBrooks Davis run_tests "mock2" dbfile_name2 186b0d29bc4SBrooks Davis 187b0d29bc4SBrooks Davis atf_check -s exit:0 -o match:"MOCK.*mock1" -o not-match:"MOCK.*mock2" \ 188b0d29bc4SBrooks Davis -e empty kyua report-junit --results-file="$(cat dbfile_name1)" 189b0d29bc4SBrooks Davis atf_check -s exit:0 -o not-match:"MOCK.*mock1" -o match:"MOCK.*mock2" \ 190b0d29bc4SBrooks Davis -e empty kyua report-junit --results-file="$(cat dbfile_name2)" 191b0d29bc4SBrooks Davis} 192b0d29bc4SBrooks Davis 193b0d29bc4SBrooks Davis 194b0d29bc4SBrooks Davisutils_test_case results_file__not_found 195b0d29bc4SBrooks Davisresults_file__not_found_body() { 196b0d29bc4SBrooks Davis atf_check -s exit:2 -o empty -e match:"kyua: E: No previous results.*foo" \ 197b0d29bc4SBrooks Davis kyua report-junit --results-file=foo 198b0d29bc4SBrooks Davis} 199b0d29bc4SBrooks Davis 200b0d29bc4SBrooks Davis 201b0d29bc4SBrooks Davisutils_test_case output__explicit 202b0d29bc4SBrooks Davisoutput__explicit_body() { 203b0d29bc4SBrooks Davis run_tests unused_mock unused_dbfile_name 204b0d29bc4SBrooks Davis 205b0d29bc4SBrooks Davis cat >report <<EOF 206b0d29bc4SBrooks Davis<?xml version="1.0" encoding="iso-8859-1"?> 207b0d29bc4SBrooks Davis<testsuite> 208b0d29bc4SBrooks Davis<properties> 209b0d29bc4SBrooks DavisCONTENTS STRIPPED BY TEST 210b0d29bc4SBrooks Davis</properties> 211b0d29bc4SBrooks Davis<testcase classname="simple_all_pass" name="pass" time="S.UUU"> 212b0d29bc4SBrooks Davis<system-out>This is the stdout of pass 213b0d29bc4SBrooks Davis</system-out> 214b0d29bc4SBrooks Davis<system-err>Test case metadata 215b0d29bc4SBrooks Davis------------------ 216b0d29bc4SBrooks Davis 217b0d29bc4SBrooks Davisallowed_architectures is empty 218b0d29bc4SBrooks Davisallowed_platforms is empty 219b0d29bc4SBrooks Davisdescription is empty 220257e70f1SIgor Ostapenkoexecenv is empty 221257e70f1SIgor Ostapenkoexecenv_jail_params is empty 222b0d29bc4SBrooks Davishas_cleanup = false 223b0d29bc4SBrooks Davisis_exclusive = false 224b0d29bc4SBrooks Davisrequired_configs is empty 225b0d29bc4SBrooks Davisrequired_disk_space = 0 226b0d29bc4SBrooks Davisrequired_files is empty 227*939fec44SIgor Ostapenkorequired_kmods is empty 228b0d29bc4SBrooks Davisrequired_memory = 0 229b0d29bc4SBrooks Davisrequired_programs is empty 230b0d29bc4SBrooks Davisrequired_user is empty 231b0d29bc4SBrooks Davistimeout = 300 232b0d29bc4SBrooks Davis 233b0d29bc4SBrooks DavisTiming information 234b0d29bc4SBrooks Davis------------------ 235b0d29bc4SBrooks Davis 236b0d29bc4SBrooks DavisStart time: YYYY-MM-DDTHH:MM:SS.ssssssZ 237b0d29bc4SBrooks DavisEnd time: YYYY-MM-DDTHH:MM:SS.ssssssZ 238b0d29bc4SBrooks DavisDuration: S.UUUs 239b0d29bc4SBrooks Davis 240b0d29bc4SBrooks DavisOriginal stderr 241b0d29bc4SBrooks Davis--------------- 242b0d29bc4SBrooks Davis 243b0d29bc4SBrooks DavisThis is the stderr of pass 244b0d29bc4SBrooks Davis</system-err> 245b0d29bc4SBrooks Davis</testcase> 246b0d29bc4SBrooks Davis<testcase classname="simple_all_pass" name="skip" time="S.UUU"> 247b0d29bc4SBrooks Davis<skipped/> 248b0d29bc4SBrooks Davis<system-out>This is the stdout of skip 249b0d29bc4SBrooks Davis</system-out> 250b0d29bc4SBrooks Davis<system-err>Skipped result details 251b0d29bc4SBrooks Davis---------------------- 252b0d29bc4SBrooks Davis 253b0d29bc4SBrooks DavisThe reason for skipping is this 254b0d29bc4SBrooks Davis 255b0d29bc4SBrooks DavisTest case metadata 256b0d29bc4SBrooks Davis------------------ 257b0d29bc4SBrooks Davis 258b0d29bc4SBrooks Davisallowed_architectures is empty 259b0d29bc4SBrooks Davisallowed_platforms is empty 260b0d29bc4SBrooks Davisdescription is empty 261257e70f1SIgor Ostapenkoexecenv is empty 262257e70f1SIgor Ostapenkoexecenv_jail_params is empty 263b0d29bc4SBrooks Davishas_cleanup = false 264b0d29bc4SBrooks Davisis_exclusive = false 265b0d29bc4SBrooks Davisrequired_configs is empty 266b0d29bc4SBrooks Davisrequired_disk_space = 0 267b0d29bc4SBrooks Davisrequired_files is empty 268*939fec44SIgor Ostapenkorequired_kmods is empty 269b0d29bc4SBrooks Davisrequired_memory = 0 270b0d29bc4SBrooks Davisrequired_programs is empty 271b0d29bc4SBrooks Davisrequired_user is empty 272b0d29bc4SBrooks Davistimeout = 300 273b0d29bc4SBrooks Davis 274b0d29bc4SBrooks DavisTiming information 275b0d29bc4SBrooks Davis------------------ 276b0d29bc4SBrooks Davis 277b0d29bc4SBrooks DavisStart time: YYYY-MM-DDTHH:MM:SS.ssssssZ 278b0d29bc4SBrooks DavisEnd time: YYYY-MM-DDTHH:MM:SS.ssssssZ 279b0d29bc4SBrooks DavisDuration: S.UUUs 280b0d29bc4SBrooks Davis 281b0d29bc4SBrooks DavisOriginal stderr 282b0d29bc4SBrooks Davis--------------- 283b0d29bc4SBrooks Davis 284b0d29bc4SBrooks DavisThis is the stderr of skip 285b0d29bc4SBrooks Davis</system-err> 286b0d29bc4SBrooks Davis</testcase> 287b0d29bc4SBrooks Davis</testsuite> 288b0d29bc4SBrooks DavisEOF 289b0d29bc4SBrooks Davis 290b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:report -e empty -x kyua report-junit \ 291b0d29bc4SBrooks Davis --output=/dev/stdout "| ${strip_properties} | ${utils_strip_times}" 292b0d29bc4SBrooks Davis atf_check -s exit:0 -o empty -e save:stderr kyua report-junit \ 293b0d29bc4SBrooks Davis --output=/dev/stderr 294b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:report -x cat stderr \ 295b0d29bc4SBrooks Davis "| ${strip_properties} | ${utils_strip_times}" 296b0d29bc4SBrooks Davis 297b0d29bc4SBrooks Davis atf_check -s exit:0 -o empty -e empty kyua report-junit \ 298b0d29bc4SBrooks Davis --output=my-file 299b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:report -x cat my-file \ 300b0d29bc4SBrooks Davis "| ${strip_properties} | ${utils_strip_times}" 301b0d29bc4SBrooks Davis} 302b0d29bc4SBrooks Davis 303b0d29bc4SBrooks Davis 304b0d29bc4SBrooks Davisatf_init_test_cases() { 305b0d29bc4SBrooks Davis atf_add_test_case default_behavior__ok 306b0d29bc4SBrooks Davis atf_add_test_case default_behavior__no_store 307b0d29bc4SBrooks Davis 308b0d29bc4SBrooks Davis atf_add_test_case results_file__explicit 309b0d29bc4SBrooks Davis atf_add_test_case results_file__not_found 310b0d29bc4SBrooks Davis 311b0d29bc4SBrooks Davis atf_add_test_case output__explicit 312b0d29bc4SBrooks Davis} 313