1*b0d29bc4SBrooks Davis# Copyright 2011 The Kyua Authors. 2*b0d29bc4SBrooks Davis# All rights reserved. 3*b0d29bc4SBrooks Davis# 4*b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without 5*b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are 6*b0d29bc4SBrooks Davis# met: 7*b0d29bc4SBrooks Davis# 8*b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright 9*b0d29bc4SBrooks Davis# notice, this list of conditions and the following disclaimer. 10*b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright 11*b0d29bc4SBrooks Davis# notice, this list of conditions and the following disclaimer in the 12*b0d29bc4SBrooks Davis# documentation and/or other materials provided with the distribution. 13*b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors 14*b0d29bc4SBrooks Davis# may be used to endorse or promote products derived from this software 15*b0d29bc4SBrooks Davis# without specific prior written permission. 16*b0d29bc4SBrooks Davis# 17*b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20*b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21*b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22*b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23*b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27*b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*b0d29bc4SBrooks Davis 29*b0d29bc4SBrooks Davis 30*b0d29bc4SBrooks Davis# Creates a new database file in the store directory. 31*b0d29bc4SBrooks Davis# 32*b0d29bc4SBrooks Davis# Subsequent invocations of db-exec should just pick this new file up. 33*b0d29bc4SBrooks Daviscreate_empty_store() { 34*b0d29bc4SBrooks Davis cat >Kyuafile <<EOF 35*b0d29bc4SBrooks Davissyntax(2) 36*b0d29bc4SBrooks DavisEOF 37*b0d29bc4SBrooks Davis atf_check -s exit:0 -o ignore -e empty kyua test 38*b0d29bc4SBrooks Davis} 39*b0d29bc4SBrooks Davis 40*b0d29bc4SBrooks Davis 41*b0d29bc4SBrooks Davisutils_test_case one_arg 42*b0d29bc4SBrooks Davisone_arg_body() { 43*b0d29bc4SBrooks Davis create_empty_store 44*b0d29bc4SBrooks Davis 45*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:metadata.csv -e empty \ 46*b0d29bc4SBrooks Davis kyua db-exec "SELECT * FROM metadata" 47*b0d29bc4SBrooks Davis atf_check -s exit:0 -o ignore -e empty \ 48*b0d29bc4SBrooks Davis grep 'schema_version,.*timestamp' metadata.csv 49*b0d29bc4SBrooks Davis} 50*b0d29bc4SBrooks Davis 51*b0d29bc4SBrooks Davis 52*b0d29bc4SBrooks Davisutils_test_case many_args 53*b0d29bc4SBrooks Davismany_args_body() { 54*b0d29bc4SBrooks Davis create_empty_store 55*b0d29bc4SBrooks Davis 56*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:metadata.csv -e empty \ 57*b0d29bc4SBrooks Davis kyua db-exec SELECT "*" FROM metadata 58*b0d29bc4SBrooks Davis atf_check -s exit:0 -o ignore -e empty \ 59*b0d29bc4SBrooks Davis grep 'schema_version,.*timestamp' metadata.csv 60*b0d29bc4SBrooks Davis} 61*b0d29bc4SBrooks Davis 62*b0d29bc4SBrooks Davis 63*b0d29bc4SBrooks Davisutils_test_case no_args 64*b0d29bc4SBrooks Davisno_args_body() { 65*b0d29bc4SBrooks Davis atf_check -s exit:3 -o empty -e match:"Not enough arguments" kyua db-exec 66*b0d29bc4SBrooks Davis test ! -d .kyua/store/ || atf_fail "Database created but it should" \ 67*b0d29bc4SBrooks Davis "not have been" 68*b0d29bc4SBrooks Davis} 69*b0d29bc4SBrooks Davis 70*b0d29bc4SBrooks Davis 71*b0d29bc4SBrooks Davisutils_test_case invalid_statement 72*b0d29bc4SBrooks Davisinvalid_statement_body() { 73*b0d29bc4SBrooks Davis create_empty_store 74*b0d29bc4SBrooks Davis 75*b0d29bc4SBrooks Davis atf_check -s exit:1 -o empty -e match:"SQLite error.*foo" \ 76*b0d29bc4SBrooks Davis kyua db-exec foo 77*b0d29bc4SBrooks Davis} 78*b0d29bc4SBrooks Davis 79*b0d29bc4SBrooks Davis 80*b0d29bc4SBrooks Davisutils_test_case no_create_store 81*b0d29bc4SBrooks Davisno_create_store_body() { 82*b0d29bc4SBrooks Davis atf_check -s exit:1 -o empty -e match:"No previous results.*not-here" \ 83*b0d29bc4SBrooks Davis kyua db-exec --results-file=not-here "SELECT * FROM metadata" 84*b0d29bc4SBrooks Davis if [ -f not-here ]; then 85*b0d29bc4SBrooks Davis atf_fail "Database created but it should not have been" 86*b0d29bc4SBrooks Davis fi 87*b0d29bc4SBrooks Davis} 88*b0d29bc4SBrooks Davis 89*b0d29bc4SBrooks Davis 90*b0d29bc4SBrooks Davisutils_test_case results_file__default_home 91*b0d29bc4SBrooks Davisresults_file__default_home_body() { 92*b0d29bc4SBrooks Davis HOME=home-dir 93*b0d29bc4SBrooks Davis create_empty_store 94*b0d29bc4SBrooks Davis 95*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:metadata.csv -e empty \ 96*b0d29bc4SBrooks Davis kyua db-exec "SELECT * FROM metadata" 97*b0d29bc4SBrooks Davis test -f home-dir/.kyua/store/*.db || atf_fail "Database not created in" \ 98*b0d29bc4SBrooks Davis "the home directory" 99*b0d29bc4SBrooks Davis atf_check -s exit:0 -o ignore -e empty \ 100*b0d29bc4SBrooks Davis grep 'schema_version,.*timestamp' metadata.csv 101*b0d29bc4SBrooks Davis} 102*b0d29bc4SBrooks Davis 103*b0d29bc4SBrooks Davis 104*b0d29bc4SBrooks Davisutils_test_case results_file__explicit__ok 105*b0d29bc4SBrooks Davisresults_file__explicit__ok_body() { 106*b0d29bc4SBrooks Davis create_empty_store 107*b0d29bc4SBrooks Davis mv .kyua/store/*.db custom.db 108*b0d29bc4SBrooks Davis rmdir .kyua/store 109*b0d29bc4SBrooks Davis 110*b0d29bc4SBrooks Davis HOME=home-dir 111*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:metadata.csv -e empty \ 112*b0d29bc4SBrooks Davis kyua --logfile=/dev/null db-exec -r custom.db "SELECT * FROM metadata" 113*b0d29bc4SBrooks Davis test ! -d home-dir/.kyua || atf_fail "Home directory created but this" \ 114*b0d29bc4SBrooks Davis "should not have happened" 115*b0d29bc4SBrooks Davis atf_check -s exit:0 -o ignore -e empty \ 116*b0d29bc4SBrooks Davis grep 'schema_version,.*timestamp' metadata.csv 117*b0d29bc4SBrooks Davis} 118*b0d29bc4SBrooks Davis 119*b0d29bc4SBrooks Davis 120*b0d29bc4SBrooks Davisutils_test_case results_file__explicit__fail 121*b0d29bc4SBrooks Davisresults_file__explicit__fail_head() { 122*b0d29bc4SBrooks Davis atf_set "require.user" "unprivileged" 123*b0d29bc4SBrooks Davis} 124*b0d29bc4SBrooks Davisresults_file__explicit__fail_body() { 125*b0d29bc4SBrooks Davis atf_check -s exit:1 -o empty -e match:"No previous results.*foo.db" \ 126*b0d29bc4SBrooks Davis kyua db-exec --results-file=foo.db "SELECT * FROM metadata" 127*b0d29bc4SBrooks Davis} 128*b0d29bc4SBrooks Davis 129*b0d29bc4SBrooks Davis 130*b0d29bc4SBrooks Davisutils_test_case no_headers_flag 131*b0d29bc4SBrooks Davisno_headers_flag_body() { 132*b0d29bc4SBrooks Davis create_empty_store 133*b0d29bc4SBrooks Davis 134*b0d29bc4SBrooks Davis atf_check kyua db-exec "CREATE TABLE data" \ 135*b0d29bc4SBrooks Davis "(a INTEGER PRIMARY KEY, b INTEGER, c TEXT)" 136*b0d29bc4SBrooks Davis atf_check kyua db-exec "INSERT INTO data VALUES (65, 43, NULL)" 137*b0d29bc4SBrooks Davis atf_check kyua db-exec "INSERT INTO data VALUES (23, 42, 'foo')" 138*b0d29bc4SBrooks Davis 139*b0d29bc4SBrooks Davis cat >expout <<EOF 140*b0d29bc4SBrooks Davisa,b,c 141*b0d29bc4SBrooks Davis23,42,foo 142*b0d29bc4SBrooks Davis65,43,NULL 143*b0d29bc4SBrooks DavisEOF 144*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:expout -e empty \ 145*b0d29bc4SBrooks Davis kyua db-exec "SELECT * FROM data ORDER BY a" 146*b0d29bc4SBrooks Davis 147*b0d29bc4SBrooks Davis tail -n 2 <expout >expout2 148*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:expout2 -e empty \ 149*b0d29bc4SBrooks Davis kyua db-exec --no-headers "SELECT * FROM data ORDER BY a" 150*b0d29bc4SBrooks Davis} 151*b0d29bc4SBrooks Davis 152*b0d29bc4SBrooks Davis 153*b0d29bc4SBrooks Davisatf_init_test_cases() { 154*b0d29bc4SBrooks Davis atf_add_test_case one_arg 155*b0d29bc4SBrooks Davis atf_add_test_case many_args 156*b0d29bc4SBrooks Davis atf_add_test_case no_args 157*b0d29bc4SBrooks Davis atf_add_test_case invalid_statement 158*b0d29bc4SBrooks Davis atf_add_test_case no_create_store 159*b0d29bc4SBrooks Davis 160*b0d29bc4SBrooks Davis atf_add_test_case results_file__default_home 161*b0d29bc4SBrooks Davis atf_add_test_case results_file__explicit__ok 162*b0d29bc4SBrooks Davis atf_add_test_case results_file__explicit__fail 163*b0d29bc4SBrooks Davis 164*b0d29bc4SBrooks Davis atf_add_test_case no_headers_flag 165*b0d29bc4SBrooks Davis} 166