chore: include complete dc refactor implementation and audits
Release / Build & Release (push) Canceled after 0s
Release / Build & Release (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package cluster
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNodeOperationGateAllowsReadsAndSerializesWrites(t *testing.T) {
|
||||
n := &Node{}
|
||||
release1 := n.acquireOperation("file_read")
|
||||
done := make(chan struct{})
|
||||
go func() { release2 := n.acquireOperation("edit_block"); close(done); release2() }()
|
||||
select {
|
||||
case <-done:
|
||||
t.Fatal("write entered while read active")
|
||||
case <-time.After(50 * time.Millisecond):
|
||||
}
|
||||
release1()
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("write did not proceed")
|
||||
}
|
||||
}
|
||||
func TestNodeOperationGateAllowsConcurrentReads(t *testing.T) {
|
||||
n := &Node{}
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(2)
|
||||
for i := 0; i < 2; i++ {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
release := n.acquireOperation("file_read")
|
||||
time.Sleep(30 * time.Millisecond)
|
||||
release()
|
||||
}()
|
||||
}
|
||||
done := make(chan struct{})
|
||||
go func() { wg.Wait(); close(done) }()
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("reads did not complete")
|
||||
}
|
||||
}
|
||||
func TestOperationRiskUnknownFailsClosed(t *testing.T) {
|
||||
if operationRisk("unknown-danger") != 3 {
|
||||
t.Fatal("unknown action must be high risk")
|
||||
}
|
||||
_ = context.Background()
|
||||
}
|
||||
Reference in New Issue
Block a user