summaryrefslogtreecommitdiffstats
path: root/ext/session/sessiondiff.test
diff options
context:
space:
mode:
Diffstat (limited to 'ext/session/sessiondiff.test')
-rw-r--r--ext/session/sessiondiff.test114
1 files changed, 114 insertions, 0 deletions
diff --git a/ext/session/sessiondiff.test b/ext/session/sessiondiff.test
new file mode 100644
index 0000000..b00af0e
--- /dev/null
+++ b/ext/session/sessiondiff.test
@@ -0,0 +1,114 @@
+# 2015-07-31
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Tests for the [sqldiff --changeset] command.
+#
+#
+if {![info exists testdir]} {
+ set testdir [file join [file dirname [info script]] .. .. test]
+}
+source $testdir/tester.tcl
+ifcapable !session {finish_test; return}
+set testprefix sessiondiff
+
+set PROG [test_find_sqldiff]
+db close
+
+proc sqlesc {id} {
+ set ret "'[string map {' ''} $id]'"
+ set ret
+}
+
+proc database_cksum {db1} {
+ set txt ""
+
+ sqlite3 dbtmp $db1
+ foreach tbl [dbtmp eval {SELECT name FROM sqlite_master WHERE type='table'}] {
+ set cols [list]
+ dbtmp eval "PRAGMA table_info = [sqlesc $tbl]" {
+ lappend cols "quote( $name )"
+ }
+ append txt [dbtmp eval \
+ "SELECT [join $cols {||'.'||}] FROM [sqlesc $tbl] ORDER BY 1"
+ ]
+ }
+ dbtmp close
+
+ md5 $txt
+}
+
+proc readfile {filename} {
+ set fd [open $filename]
+ fconfigure $fd -translation binary -encoding binary
+ set data [read $fd]
+ close $fd
+ set data
+}
+
+proc get_changeset {db1 db2} {
+ exec $::PROG --changeset changeset.bin $db1 $db2
+ set bin [readfile changeset.bin]
+ return $bin
+}
+
+proc xConflict {args} {
+ return ""
+}
+
+proc do_changeset_test {tn sql1 sql2} {
+ forcedelete test.db123 test.db124
+
+ sqlite3 db test.db123
+ db eval $sql1
+ db close
+
+ sqlite3 db test.db124
+ db eval $sql2
+
+ set cs [get_changeset test.db124 test.db123]
+ sqlite3changeset_apply db $cs xConflict
+ db close
+
+ set database_cksum1 [database_cksum test.db123]
+ set database_cksum2 [database_cksum test.db124]
+
+ uplevel [list \
+ do_test $tn [list string compare $database_cksum1 $database_cksum2] 0
+ ]
+}
+
+do_changeset_test 1.0 {
+ CREATE TABLE t1(x PRIMARY KEY);
+} {
+ CREATE TABLE t1(x PRIMARY KEY);
+}
+
+do_changeset_test 1.1 {
+ CREATE TABLE t1(x PRIMARY KEY);
+ CREATE TABLE t2(x PRIMARY KEY, y);
+ INSERT INTO t2 VALUES(1, 2);
+} {
+ CREATE TABLE t1(x PRIMARY KEY);
+ CREATE TABLE t2(x PRIMARY KEY, y);
+ INSERT INTO t2 VALUES(3, 4);
+}
+
+do_changeset_test 1.2 {
+ CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c));
+ INSERT INTO t2 VALUES(1, 2, 3);
+ INSERT INTO t2 VALUES(4, 5, 6);
+} {
+ CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c));
+ INSERT INTO t2 VALUES(1, 2, 11);
+ INSERT INTO t2 VALUES(7, 8, 9);
+}
+
+finish_test