95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package wal
 | |
| 
 | |
| import (
 | |
| 	"math/rand"
 | |
| 	"sync"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| func TestDeleteBefore(t *testing.T) {
 | |
| 	t.Parallel()
 | |
| 	firstSeqNum := rand.Int63n(9288389)
 | |
| 	tmpDir := t.TempDir()
 | |
| 
 | |
| 	wal, err := Create(tmpDir, firstSeqNum, Config{
 | |
| 		SegMinCount:  10,
 | |
| 		SegMaxAgeSec: 1,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer wal.Close()
 | |
| 
 | |
| 	wg := sync.WaitGroup{}
 | |
| 	wg.Add(1)
 | |
| 	go func() {
 | |
| 		defer wg.Done()
 | |
| 		err := writeRandomWithEOF(wal, 8*time.Second)
 | |
| 		if err != nil {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 	}()
 | |
| 
 | |
| 	wg.Wait()
 | |
| 
 | |
| 	info := wal.Info()
 | |
| 	if info.FirstSeqNum != firstSeqNum {
 | |
| 		t.Fatal(info)
 | |
| 	}
 | |
| 
 | |
| 	lastSeqNum := info.LastSeqNum
 | |
| 	lastTimestampMS := info.LastTimestampMS
 | |
| 
 | |
| 	err = wal.DeleteBefore((info.LastTimestampMS/1000)-4, lastSeqNum+100)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	info = wal.Info()
 | |
| 	if info.FirstSeqNum == firstSeqNum || info.LastSeqNum != lastSeqNum || info.LastTimestampMS != lastTimestampMS {
 | |
| 		t.Fatal(info)
 | |
| 	}
 | |
| 
 | |
| 	header := wal.header
 | |
| 	if header.FirstSegmentID >= header.LastSegmentID {
 | |
| 		t.Fatal(header)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestDeleteBeforeOnlyOneSegment(t *testing.T) {
 | |
| 	t.Parallel()
 | |
| 	firstSeqNum := rand.Int63n(9288389)
 | |
| 	tmpDir := t.TempDir()
 | |
| 
 | |
| 	wal, err := Create(tmpDir, firstSeqNum, Config{
 | |
| 		SegMinCount:  10,
 | |
| 		SegMaxAgeSec: 10,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer wal.Close()
 | |
| 
 | |
| 	if err := writeRandomWithEOF(wal, time.Second); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	header := wal.header
 | |
| 	if header.FirstSegmentID != header.LastSegmentID {
 | |
| 		t.Fatal(header)
 | |
| 	}
 | |
| 
 | |
| 	lastSeqNum := wal.Info().LastSeqNum
 | |
| 
 | |
| 	err = wal.DeleteBefore(time.Now().Unix()+1, lastSeqNum+100)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	header = wal.header
 | |
| 	if header.FirstSegmentID != header.LastSegmentID {
 | |
| 		t.Fatal(header)
 | |
| 	}
 | |
| }
 |