a0df6f08f9aa6591bf70bf1704e3aafcb0105488
[Fuse-DBI] / t / 02database.t
1 #!/usr/bin/perl -w
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use blib;
8
9 eval "use DBD::SQLite";
10 plan skip_all => "DBD::SQLite required for testing" if $@;
11 plan tests => 14;
12
13 use_ok('DBI');
14 use_ok('Fuse::DBI');
15
16 my $test_db = 'fusedbi.db';
17 my $dsn = "DBI:SQLite:dbname=$test_db";
18 my $mount = '/tmp/fuse_dbi_mnt';
19
20 ok((! -e $test_db || unlink $test_db), "test db: $test_db");
21
22 ok((! -e $mount || rmdir $mount), "mount point $mount");
23
24 mkdir $mount || die "mkdir $mount: $!";
25 ok(-d $mount, "mkdir $mount");
26
27 ok(my $dbh = DBI->connect($dsn, , '', '', { RaiseError => 1 }),
28         "connect fusedbi test database");
29
30 ok($dbh->do(qq{
31         create table files (
32                 name text primary key,
33                 data text
34         )
35 }), "create table files");
36
37 ok(my $sth = $dbh->prepare(qq{
38         insert into files (name,data) values (?,?)
39 }), "prepare");
40
41 foreach my $file (qw(file dir/file dir/subdir/file)) {
42         my $data = "this is test data\n" x length($file);
43         ok($sth->execute($file,$data), "insert $file");
44 }
45
46 my $sql_filenames = qq{
47         select
48                 name as id,
49                 name as filename,
50                 length(data) as size,
51                 1 as writable
52         from files
53 };
54
55 my $sql_read = qq{
56         select data
57                 from files
58                 where name = ?;
59 };
60
61 my $sql_update = qq{
62         update files
63                 set data = ?    
64                 where name = ?;
65 };
66
67 system "fusermount -q -u $mount" || diag "nothing mounted at $mount, ok";
68
69 my $mnt = Fuse::DBI->mount({
70         filenames => $sql_filenames,
71         read => $sql_read,
72         update => $sql_update,
73         dsn => $dsn,
74         mount => $mount,
75 });
76
77 ok($mnt, "mount");
78
79 diag "press enter to continue";
80 my $foo = <STDIN>;
81
82 ok($mnt->umount,"umount");
83
84 ok(unlink $test_db,"rm $test_db");
85