@@ -519,17 +519,64 @@ func TestDB_Sync(t *testing.T) {
519
519
520
520
// Ensure DB checkpoints after minimum number of pages.
521
521
t .Run ("MinCheckpointPageN" , func (t * testing.T ) {
522
- t .Skip ()
523
- })
522
+ db , sqldb := MustOpenDBs (t )
523
+ defer MustCloseDBs (t , db , sqldb )
524
+
525
+ // Execute a query to force a write to the WAL and then sync.
526
+ if _ , err := sqldb .Exec (`CREATE TABLE foo (bar TEXT);` ); err != nil {
527
+ t .Fatal (err )
528
+ } else if err := db .Sync (); err != nil {
529
+ t .Fatal (err )
530
+ }
531
+
532
+ // Write at least minimum number of pages to trigger rollover.
533
+ for i := 0 ; i < db .MinCheckpointPageN ; i ++ {
534
+ if _ , err := sqldb .Exec (`INSERT INTO foo (bar) VALUES ('baz');` ); err != nil {
535
+ t .Fatal (err )
536
+ }
537
+ }
524
538
525
- // Ensure DB forces checkpoint after maximum number of pages.
526
- t .Run ("MaxCheckpointPageN" , func (t * testing.T ) {
527
- t .Skip ()
539
+ // Sync to shadow WAL.
540
+ if err := db .Sync (); err != nil {
541
+ t .Fatal (err )
542
+ }
543
+
544
+ // Ensure position is now on the second index.
545
+ if pos , err := db .Pos (); err != nil {
546
+ t .Fatal (err )
547
+ } else if got , want := pos .Index , 1 ; got != want {
548
+ t .Fatalf ("Index=%v, want %v" , got , want )
549
+ }
528
550
})
529
551
530
552
// Ensure DB checkpoints after interval.
531
553
t .Run ("CheckpointInterval" , func (t * testing.T ) {
532
- t .Skip ()
554
+ db , sqldb := MustOpenDBs (t )
555
+ defer MustCloseDBs (t , db , sqldb )
556
+
557
+ // Execute a query to force a write to the WAL and then sync.
558
+ if _ , err := sqldb .Exec (`CREATE TABLE foo (bar TEXT);` ); err != nil {
559
+ t .Fatal (err )
560
+ } else if err := db .Sync (); err != nil {
561
+ t .Fatal (err )
562
+ }
563
+
564
+ // Reduce checkpoint interval to ensure a rollover is triggered.
565
+ db .CheckpointInterval = 1 * time .Nanosecond
566
+
567
+ // Write to WAL & sync.
568
+ if _ , err := sqldb .Exec (`INSERT INTO foo (bar) VALUES ('baz');` ); err != nil {
569
+ t .Fatal (err )
570
+ } else if err := db .Sync (); err != nil {
571
+ t .Fatal (err )
572
+ }
573
+
574
+ // Ensure position is now on the second index.
575
+ if pos , err := db .Pos (); err != nil {
576
+ t .Fatal (err )
577
+ } else if got , want := pos .Index , 1 ; got != want {
578
+ t .Fatalf ("Index=%v, want %v" , got , want )
579
+ }
533
580
})
534
581
}
535
582
0 commit comments