@@ -119,12 +119,42 @@ void test_sync_by_parts() {
119
119
cmp_data (db_primary , db_backup );
120
120
}
121
121
122
+ // This test case writes to a local database, syncs it to remote, and then verifies the remote.
123
+ // The test then writes some more to local database, syncs it again, and verifies the remote again.
124
+ void test_sync_while_reading () {
125
+ sqlite3 * db_primary , * db_backup ;
126
+ unsigned int max_frame ;
127
+ open_db ("primary_test_sync_while_reading.db" , & db_primary );
128
+ ensure (sqlite3_exec (db_primary , "CREATE TABLE t (x)" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
129
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(4 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
130
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(1 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
131
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(1 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
132
+
133
+ open_db ("backup_test_sync_while_reading.db" , & db_backup );
134
+ ensure (libsql_wal_frame_count (db_backup , & max_frame ) == SQLITE_OK , "failed to get frames count: %s\n" , sqlite3_errmsg (db_backup ));
135
+ assert (max_frame == 0 );
136
+
137
+ eprintf ("start full sync\n" );
138
+ sync_db (db_primary , db_backup );
139
+ cmp_data (db_primary , db_backup );
140
+
141
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(4 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
142
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(1 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
143
+ ensure (sqlite3_exec (db_primary , "INSERT INTO t VALUES (randomblob(1 * 1024))" , 0 , 0 , 0 ) == SQLITE_OK , "failed to insert data\n" );
144
+ sync_db (db_primary , db_backup );
145
+ cmp_data (db_primary , db_backup );
146
+ }
147
+
122
148
int main (int argc , char * argv [])
123
149
{
124
150
test_huge_payload ();
125
151
printf ("============= OK test_huge_payload\n" );
126
152
127
153
test_sync_by_parts ();
128
154
printf ("============= OK test_sync_by_parts\n" );
155
+
156
+ test_sync_while_reading ();
157
+ printf ("============= OK test_sync_while_reading\n" );
158
+
129
159
return 0 ;
130
160
}
0 commit comments