# Copyright (c) 1999, 2000 D. Richard Hipp # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # # Author contact information: # drh@hwaci.com # http://www.hwaci.com/drh/ # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is exercising the code in dbbe.c. # # $Id: dbbe.test,v 1.4 2000/10/16 22:06:43 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Try to open a database that does not exist. # do_test dbbe-1.1 { catch {db close} file delete -force testdb set v [catch {sqlite db testdb 0444} msg] lappend v $msg } {1 {can't find directory "testdb"}} do_test dbbe-1.2 { catch {db close} file delete -force testdb set v [catch {sqlite db testdb/dummy 0666} msg] lappend v $msg } {1 {can't find or create directory "testdb/dummy"}} # Try to open a database for writing in a directory that # doesn't exist but for which the parent directory does # exist. This should work! # do_test dbbe-1.3 { catch {db close} file delete -force testdb set v [catch {sqlite db testdb 0666} msg] lappend v $msg } {0 {}} # Try to open a file instead of a directory. # do_test dbbe-1.4 { catch {db close} file delete -force testdb set fd [open testdb w] puts $fd hi! close $fd set v [catch {sqlite db testdb 0666} msg] lappend v $msg } {1 {not a directory: "testdb"}} # Access permission denied on the directory. # do_test dbbe-1.5 { catch {db close} file delete -force testdb file mkdir testdb file attributes testdb -permissions 0 set v [catch {sqlite db testdb 0666} msg] lappend v $msg } {1 {access permission denied}} # Access permission denied on the master file # do_test dbbe-1.6 { catch {db close} file delete -force testdb sqlite db testdb 0666 execsql {CREATE TABLE t1(x int)} db close file attributes testdb/sqlite_master.tbl -permission 0444 set v [catch {sqlite db testdb 0666} msg] lappend v $msg } {1 {access permission denied for testdb/sqlite_master.tbl}} do_test dbbe-1.6b { catch {db close} file delete -force testdb sqlite db testdb 0666 execsql {CREATE TABLE t1(x int)} db close file attributes testdb/sqlite_master.tbl -permission 0444 set v [catch {sqlite db testdb 0444} msg] lappend v $msg } {0 {}} # Make sure a table can be accessed by either uppercase or lowercase # names # do_test dbbe-2.1 { catch {db close} file delete -force testdb sqlite db testdb 0666 execsql { CREATE TABLE t1(x int); INSERT INTO t1 VALUES(1); } db close sqlite db testdb 0444 set r [execsql {SELECT * FROM T1}] db close sqlite db testdb 0666 lappend r [execsql {SELECT * FROM t1}] } {1 1} # Try to change a table after opening the database readonly # do_test dbbe-3.1 { catch {db close} file delete -force testdb sqlite db testdb 0666 execsql {CREATE TABLE t1(x int)} db close sqlite db testdb 0444 set v [catch {execsql {INSERT INTO t1 VALUES(1)}} msg] lappend v $msg } {7 {table t1 is readonly}} finish_test