53 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|