Files
go-sip/internal/store/sip_snapshot_test.go
T

53 lines
1.7 KiB
Go

package store
import (
"git.ipao.vip/rogee/go-sip/internal/configread"
"strings"
"testing"
)
func TestSIPMissingOrLowerSourceRevisionUsesDurableLocalGeneration(t *testing.T) {
s := preparedCurrentCallStore(t)
snap, err := s.ReadSnapshot(currentDispatcherID, 1001, "task-asr")
if err != nil {
t.Fatal(err)
}
sip := snap.SIP
sip.Revision = 0
first, err := s.PrepareSIP(sip)
if err != nil {
t.Fatal(err)
}
if first.Revision != 8 {
t.Fatalf("unchanged known SIP should retain local generation: %d", first.Revision)
}
sip.Trunks = []byte(strings.Replace(string(sip.Trunks), `"dial_prefix":""`, `"dial_prefix":"99"`, 1))
sip.Revision = 1
next, err := s.PrepareSIP(sip)
if err != nil {
t.Fatal(err)
}
if next.Revision != 9 || !strings.Contains(string(next.Trunks), `"dial_prefix":"99"`) {
t.Fatalf("lower source revision blocked latest content: %+v", next)
}
retry, err := s.PrepareSIP(sip)
if err != nil || retry.Revision != 9 {
t.Fatalf("retry changed pending generation: %+v %v", retry, err)
}
sip.Trunks = []byte(strings.Replace(string(sip.Trunks), `"dial_prefix":"99"`, `"dial_prefix":"88"`, 1))
sip.Revision = 0
newest, err := s.PrepareSIP(sip)
if err != nil || newest.Revision != 10 {
t.Fatalf("new pending content must supersede prior content: %+v %v", newest, err)
}
if _, pending, err := s.SIPState(currentDispatcherID); err != nil || pending != 10 {
t.Fatalf("pending generation not durable: %d %v", pending, err)
}
if admitted, err := s.CanAdmit(currentDispatcherID, 1001, "task-asr"); err != nil || admitted {
t.Fatalf("unverified SIP reopened admission: %v %v", admitted, err)
}
if _, err = s.PrepareSIP(configread.SIP{}); err == nil {
t.Fatal("missing owner accepted")
}
}