mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 03:07:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2019 The LevelDB-Go and Pebble Authors. All rights reserved. Use
 | 
						|
// of this source code is governed by a BSD-style license that can be found in
 | 
						|
// the LICENSE file.
 | 
						|
 | 
						|
package keyspan
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/cockroachdb/datadriven"
 | 
						|
	"github.com/cockroachdb/pebble/internal/base"
 | 
						|
)
 | 
						|
 | 
						|
func TestTruncate(t *testing.T) {
 | 
						|
	cmp := base.DefaultComparer.Compare
 | 
						|
	fmtKey := base.DefaultComparer.FormatKey
 | 
						|
	var iter FragmentIterator
 | 
						|
	var savedIter FragmentIterator
 | 
						|
	defer func() {
 | 
						|
		if savedIter != nil {
 | 
						|
			savedIter.Close()
 | 
						|
			savedIter = nil
 | 
						|
		}
 | 
						|
	}()
 | 
						|
 | 
						|
	datadriven.RunTest(t, "testdata/truncate", func(t *testing.T, d *datadriven.TestData) string {
 | 
						|
		doTruncate := func() FragmentIterator {
 | 
						|
			if len(d.Input) > 0 {
 | 
						|
				t.Fatalf("unexpected input: %s", d.Input)
 | 
						|
			}
 | 
						|
			if len(d.CmdArgs) < 1 || len(d.CmdArgs) > 3 {
 | 
						|
				t.Fatalf("expected 1-3 arguments: %s", d.CmdArgs)
 | 
						|
			}
 | 
						|
			parts := strings.Split(d.CmdArgs[0].String(), "-")
 | 
						|
			var startKey, endKey *base.InternalKey
 | 
						|
			if len(d.CmdArgs) > 1 {
 | 
						|
				for _, arg := range d.CmdArgs[1:] {
 | 
						|
					switch arg.Key {
 | 
						|
					case "startKey":
 | 
						|
						startKey = &base.InternalKey{}
 | 
						|
						*startKey = base.ParseInternalKey(arg.Vals[0])
 | 
						|
					case "endKey":
 | 
						|
						endKey = &base.InternalKey{}
 | 
						|
						*endKey = base.ParseInternalKey(arg.Vals[0])
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if len(parts) != 2 {
 | 
						|
				t.Fatalf("malformed arg: %s", d.CmdArgs[0])
 | 
						|
			}
 | 
						|
			lower := []byte(parts[0])
 | 
						|
			upper := []byte(parts[1])
 | 
						|
 | 
						|
			tIter := Truncate(
 | 
						|
				cmp, iter, lower, upper, startKey, endKey, false,
 | 
						|
			)
 | 
						|
			return tIter
 | 
						|
		}
 | 
						|
 | 
						|
		switch d.Cmd {
 | 
						|
		case "build":
 | 
						|
			tombstones := buildSpans(t, cmp, fmtKey, d.Input, base.InternalKeyKindRangeDelete)
 | 
						|
			iter = NewIter(cmp, tombstones)
 | 
						|
			return formatAlphabeticSpans(tombstones)
 | 
						|
 | 
						|
		case "truncate":
 | 
						|
			tIter := doTruncate()
 | 
						|
			defer tIter.Close()
 | 
						|
			var truncated []Span
 | 
						|
			for s := tIter.First(); s != nil; s = tIter.Next() {
 | 
						|
				truncated = append(truncated, s.ShallowClone())
 | 
						|
			}
 | 
						|
			return formatAlphabeticSpans(truncated)
 | 
						|
 | 
						|
		case "truncate-and-save-iter":
 | 
						|
			if savedIter != nil {
 | 
						|
				savedIter.Close()
 | 
						|
			}
 | 
						|
			savedIter = doTruncate()
 | 
						|
			return "ok"
 | 
						|
 | 
						|
		case "saved-iter":
 | 
						|
			var buf bytes.Buffer
 | 
						|
			runIterCmd(t, d, savedIter, &buf)
 | 
						|
			return buf.String()
 | 
						|
 | 
						|
		default:
 | 
						|
			return fmt.Sprintf("unknown command: %s", d.Cmd)
 | 
						|
		}
 | 
						|
	})
 | 
						|
}
 |