aboutsummaryrefslogtreecommitdiff
path: root/internal/ingest/service_order_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ingest/service_order_test.go')
-rw-r--r--internal/ingest/service_order_test.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/ingest/service_order_test.go b/internal/ingest/service_order_test.go
new file mode 100644
index 0000000..0e2299c
--- /dev/null
+++ b/internal/ingest/service_order_test.go
@@ -0,0 +1,39 @@
+package ingest
+
+import (
+ "testing"
+
+ "github.com/Fuwn/plutia/internal/types"
+)
+
+func TestCollectVerifiedInOrder_OutOfOrderInput(t *testing.T) {
+ results := make(chan verifyResult, 3)
+ results <- verifyResult{index: 2, op: types.ParsedOperation{Sequence: 3}}
+ results <- verifyResult{index: 0, op: types.ParsedOperation{Sequence: 1}}
+ results <- verifyResult{index: 1, op: types.ParsedOperation{Sequence: 2}}
+ close(results)
+
+ ordered, err := collectVerifiedInOrder(3, results)
+ if err != nil {
+ t.Fatalf("collect verified: %v", err)
+ }
+ if len(ordered) != 3 {
+ t.Fatalf("ordered length mismatch: got %d want 3", len(ordered))
+ }
+ for i := 0; i < 3; i++ {
+ if ordered[i].op.Sequence != uint64(i+1) {
+ t.Fatalf("unexpected sequence at index %d: got %d want %d", i, ordered[i].op.Sequence, i+1)
+ }
+ }
+}
+
+func TestCollectVerifiedInOrder_MissingResult(t *testing.T) {
+ results := make(chan verifyResult, 2)
+ results <- verifyResult{index: 0, op: types.ParsedOperation{Sequence: 1}}
+ results <- verifyResult{index: 2, op: types.ParsedOperation{Sequence: 3}}
+ close(results)
+
+ if _, err := collectVerifiedInOrder(3, results); err == nil {
+ t.Fatalf("expected missing result error")
+ }
+}