Files
seqlog/query_test.go

76 lines
1.9 KiB
Go
Raw Normal View History

package seqlog
import (
"fmt"
"testing"
"time"
)
// TestQueryFromProcessing 测试从处理窗口开始位置查询记录
func TestQueryFromProcessing(t *testing.T) {
// 创建临时目录
tmpDir := t.TempDir()
// 创建配置(带 handler不处理任何记录以保持窗口稳定
config := &TopicConfig{
Handler: func(record *Record) error {
// 不处理,只是为了让 tailer 启动
time.Sleep(1 * time.Second) // 延迟处理
return nil
},
}
// 创建 TopicProcessor
processor, err := NewTopicProcessor(tmpDir, "test", nil, config)
if err != nil {
t.Fatal(err)
}
defer processor.Close()
// 写入 10 条记录
for i := 0; i < 10; i++ {
msg := fmt.Sprintf("message %d", i)
_, err := processor.Write([]byte(msg))
if err != nil {
t.Fatal(err)
}
}
// 不启动 tailer直接测试查询功能
// startIdx 应该是 0没有处理任何记录
// 从处理窗口开始位置查询 5 条记录
records, err := processor.QueryFromProcessing(5)
if err != nil {
t.Fatal(err)
}
t.Logf("查询到 %d 条记录", len(records))
if len(records) != 5 {
t.Fatalf("expected 5 records, got %d", len(records))
}
// 验证查询结果从索引 0 开始
for i, rec := range records {
expectedIndex := i
if rec.Index != expectedIndex {
t.Errorf("record[%d]: expected index %d, got %d", i, expectedIndex, rec.Index)
}
expectedMsg := fmt.Sprintf("message %d", expectedIndex)
if string(rec.Record.Data) != expectedMsg {
t.Errorf("record[%d]: expected data '%s', got '%s'", i, expectedMsg, string(rec.Record.Data))
}
// 未启动 tailer所有记录都应该是 Pending 状态
if rec.Status != StatusPending {
t.Errorf("record[%d]: expected StatusPending, got %s", i, rec.Status)
}
t.Logf(" [索引 %d] %s - 状态: %s", rec.Index, string(rec.Record.Data), rec.Status)
}
t.Log("QueryFromProcessing 测试通过")
}