63 lines
2.2 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|