1*6b3a42afSjmmv# Copyright 2011 Google Inc. 2*6b3a42afSjmmv# All rights reserved. 3*6b3a42afSjmmv# 4*6b3a42afSjmmv# Redistribution and use in source and binary forms, with or without 5*6b3a42afSjmmv# modification, are permitted provided that the following conditions are 6*6b3a42afSjmmv# met: 7*6b3a42afSjmmv# 8*6b3a42afSjmmv# * Redistributions of source code must retain the above copyright 9*6b3a42afSjmmv# notice, this list of conditions and the following disclaimer. 10*6b3a42afSjmmv# * Redistributions in binary form must reproduce the above copyright 11*6b3a42afSjmmv# notice, this list of conditions and the following disclaimer in the 12*6b3a42afSjmmv# documentation and/or other materials provided with the distribution. 13*6b3a42afSjmmv# * Neither the name of Google Inc. nor the names of its contributors 14*6b3a42afSjmmv# may be used to endorse or promote products derived from this software 15*6b3a42afSjmmv# without specific prior written permission. 16*6b3a42afSjmmv# 17*6b3a42afSjmmv# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*6b3a42afSjmmv# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*6b3a42afSjmmv# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20*6b3a42afSjmmv# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21*6b3a42afSjmmv# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22*6b3a42afSjmmv# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23*6b3a42afSjmmv# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*6b3a42afSjmmv# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*6b3a42afSjmmv# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*6b3a42afSjmmv# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27*6b3a42afSjmmv# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*6b3a42afSjmmv 29*6b3a42afSjmmv 30*6b3a42afSjmmvutils_test_case one_arg 31*6b3a42afSjmmvone_arg_body() { 32*6b3a42afSjmmv atf_check -s exit:0 -o save:metadata.csv -e empty \ 33*6b3a42afSjmmv kyua db-exec "SELECT * FROM metadata" 34*6b3a42afSjmmv atf_check -s exit:0 -o ignore -e empty \ 35*6b3a42afSjmmv grep 'schema_version,.*timestamp' metadata.csv 36*6b3a42afSjmmv} 37*6b3a42afSjmmv 38*6b3a42afSjmmv 39*6b3a42afSjmmvutils_test_case many_args 40*6b3a42afSjmmvmany_args_body() { 41*6b3a42afSjmmv atf_check -s exit:0 -o save:metadata.csv -e empty \ 42*6b3a42afSjmmv kyua db-exec SELECT "*" FROM metadata 43*6b3a42afSjmmv atf_check -s exit:0 -o ignore -e empty \ 44*6b3a42afSjmmv grep 'schema_version,.*timestamp' metadata.csv 45*6b3a42afSjmmv} 46*6b3a42afSjmmv 47*6b3a42afSjmmv 48*6b3a42afSjmmvutils_test_case no_args 49*6b3a42afSjmmvno_args_body() { 50*6b3a42afSjmmv atf_check -s exit:3 -o empty -e match:"Not enough arguments" kyua db-exec 51*6b3a42afSjmmv test ! -f .kyua/store.db || atf_fail "Database created but it should" \ 52*6b3a42afSjmmv "not have been" 53*6b3a42afSjmmv} 54*6b3a42afSjmmv 55*6b3a42afSjmmv 56*6b3a42afSjmmvutils_test_case invalid_statement 57*6b3a42afSjmmvinvalid_statement_body() { 58*6b3a42afSjmmv atf_check -s exit:1 -o empty -e match:"SQLite error.*foo" \ 59*6b3a42afSjmmv kyua db-exec foo 60*6b3a42afSjmmv test -f .kyua/store.db || atf_fail "Database not created as part of" \ 61*6b3a42afSjmmv "initialization" 62*6b3a42afSjmmv} 63*6b3a42afSjmmv 64*6b3a42afSjmmv 65*6b3a42afSjmmvutils_test_case store_flag__default_home 66*6b3a42afSjmmvstore_flag__default_home_body() { 67*6b3a42afSjmmv HOME=home-dir 68*6b3a42afSjmmv atf_check -s exit:0 -o save:metadata.csv -e empty \ 69*6b3a42afSjmmv kyua db-exec "SELECT * FROM metadata" 70*6b3a42afSjmmv test -f home-dir/.kyua/store.db || atf_fail "Database not created in" \ 71*6b3a42afSjmmv "the home directory" 72*6b3a42afSjmmv atf_check -s exit:0 -o ignore -e empty \ 73*6b3a42afSjmmv grep 'schema_version,.*timestamp' metadata.csv 74*6b3a42afSjmmv} 75*6b3a42afSjmmv 76*6b3a42afSjmmv 77*6b3a42afSjmmvutils_test_case store_flag__explicit__ok 78*6b3a42afSjmmvstore_flag__explicit__ok_body() { 79*6b3a42afSjmmv HOME=home-dir 80*6b3a42afSjmmv atf_check -s exit:0 -o save:metadata.csv -e empty \ 81*6b3a42afSjmmv kyua --logfile=/dev/null db-exec -s store.db "SELECT * FROM metadata" 82*6b3a42afSjmmv test ! -d home-dir/.kyua || atf_fail "Home directory created but this" \ 83*6b3a42afSjmmv "should not have happened" 84*6b3a42afSjmmv test -f store.db || atf_fail "Database not created in expected directory" 85*6b3a42afSjmmv atf_check -s exit:0 -o ignore -e empty \ 86*6b3a42afSjmmv grep 'schema_version,.*timestamp' metadata.csv 87*6b3a42afSjmmv} 88*6b3a42afSjmmv 89*6b3a42afSjmmv 90*6b3a42afSjmmvutils_test_case store_flag__explicit__fail 91*6b3a42afSjmmvstore_flag__explicit__fail_head() { 92*6b3a42afSjmmv atf_set "require.user" "unprivileged" 93*6b3a42afSjmmv} 94*6b3a42afSjmmvstore_flag__explicit__fail_body() { 95*6b3a42afSjmmv mkdir dir 96*6b3a42afSjmmv chmod 555 dir 97*6b3a42afSjmmv atf_check -s exit:2 -o empty -e match:"Cannot open.*dir/foo.db" \ 98*6b3a42afSjmmv kyua db-exec --store=dir/foo.db "SELECT * FROM metadata" 99*6b3a42afSjmmv} 100*6b3a42afSjmmv 101*6b3a42afSjmmv 102*6b3a42afSjmmvutils_test_case no_headers_flag 103*6b3a42afSjmmvno_headers_flag_body() { 104*6b3a42afSjmmv atf_check kyua db-exec "CREATE TABLE data" \ 105*6b3a42afSjmmv "(a INTEGER PRIMARY KEY, b INTEGER, c TEXT)" 106*6b3a42afSjmmv atf_check kyua db-exec "INSERT INTO data VALUES (65, 43, NULL)" 107*6b3a42afSjmmv atf_check kyua db-exec "INSERT INTO data VALUES (23, 42, 'foo')" 108*6b3a42afSjmmv 109*6b3a42afSjmmv cat >expout <<EOF 110*6b3a42afSjmmva,b,c 111*6b3a42afSjmmv23,42,foo 112*6b3a42afSjmmv65,43,NULL 113*6b3a42afSjmmvEOF 114*6b3a42afSjmmv atf_check -s exit:0 -o file:expout -e empty \ 115*6b3a42afSjmmv kyua db-exec "SELECT * FROM data ORDER BY a" 116*6b3a42afSjmmv 117*6b3a42afSjmmv tail -n 2 <expout >expout2 118*6b3a42afSjmmv atf_check -s exit:0 -o file:expout2 -e empty \ 119*6b3a42afSjmmv kyua db-exec --no-headers "SELECT * FROM data ORDER BY a" 120*6b3a42afSjmmv} 121*6b3a42afSjmmv 122*6b3a42afSjmmv 123*6b3a42afSjmmvatf_init_test_cases() { 124*6b3a42afSjmmv atf_add_test_case one_arg 125*6b3a42afSjmmv atf_add_test_case many_args 126*6b3a42afSjmmv atf_add_test_case no_args 127*6b3a42afSjmmv atf_add_test_case invalid_statement 128*6b3a42afSjmmv 129*6b3a42afSjmmv atf_add_test_case store_flag__default_home 130*6b3a42afSjmmv atf_add_test_case store_flag__explicit__ok 131*6b3a42afSjmmv atf_add_test_case store_flag__explicit__fail 132*6b3a42afSjmmv 133*6b3a42afSjmmv atf_add_test_case no_headers_flag 134*6b3a42afSjmmv} 135