Files

63 lines
2.2 KiB
Go

package domain
import (
"errors"
"testing"
rvboxv1 "github.com/rvbox/rvbox/gen/go/rvbox/v1"
)
func TestEventSequenceAndDuplicateEquivalence_HP_CLIENT_07(t *testing.T) {
t.Parallel()
first := FingerprintBytes([]byte("first"))
other := FingerprintBytes([]byte("other"))
if decision, err := ClassifyEventSequence(0, 1, nil, first); err != nil || decision != EventSequenceAppend {
t.Fatalf("first event = (%v, %v)", decision, err)
}
if decision, err := ClassifyEventSequence(1, 1, &first, first); err != nil || decision != EventSequenceDuplicate {
t.Fatalf("exact duplicate = (%v, %v)", decision, err)
}
if _, err := ClassifyEventSequence(1, 1, &first, other); !errors.Is(err, ErrConflictingDuplicate) {
t.Fatalf("conflicting duplicate error = %v", err)
}
if _, err := ClassifyEventSequence(1, 1, nil, first); !errors.Is(err, ErrMissingDuplicate) {
t.Fatalf("missing duplicate error = %v", err)
}
if _, err := ClassifyEventSequence(1, 3, nil, first); !errors.Is(err, ErrEventSequenceGap) {
t.Fatalf("gap error = %v", err)
}
if _, err := ClassifyEventSequence(0, 0, nil, first); !errors.Is(err, ErrInvalidEventSequence) {
t.Fatalf("zero sequence error = %v", err)
}
}
func TestOutputTruncationRanges_HP_PROTO_01(t *testing.T) {
t.Parallel()
one, two := uint64(1), uint64(2)
zero := uint64(0)
tests := []struct {
name string
value *rvboxv1.OutputTruncation
valid bool
}{
{"client pre-sequence loss", &rvboxv1.OutputTruncation{}, true},
{"server range", &rvboxv1.OutputTruncation{FirstRemovedEventSeq: &one, LastRemovedEventSeq: &two}, true},
{"nil", nil, false},
{"first only", &rvboxv1.OutputTruncation{FirstRemovedEventSeq: &one}, false},
{"last only", &rvboxv1.OutputTruncation{LastRemovedEventSeq: &two}, false},
{"zero", &rvboxv1.OutputTruncation{FirstRemovedEventSeq: &zero, LastRemovedEventSeq: &two}, false},
{"reversed", &rvboxv1.OutputTruncation{FirstRemovedEventSeq: &two, LastRemovedEventSeq: &one}, false},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
err := ValidateOutputTruncation(test.value)
if (err == nil) != test.valid {
t.Fatalf("ValidateOutputTruncation() error = %v, valid = %t", err, test.valid)
}
})
}
}