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

70 lines
1.9 KiB
Go

package store
import (
"encoding/json"
"os"
"path/filepath"
"testing"
"git.ipao.vip/rogee/go-sip/internal/configread"
)
func TestLocalSIPPendingContentSurvivesRestartAndForeignOwnerIsRejected(t *testing.T) {
path := filepath.Join(t.TempDir(), "dispatcher.db")
s, err := Open(path)
if err != nil {
t.Fatal(err)
}
raw, err := os.ReadFile("../../contracts/schema/examples/config-read-sip-no-revision.json")
if err != nil {
t.Fatal(err)
}
var source configread.SIP
if err = json.Unmarshal(raw, &source); err != nil {
t.Fatal(err)
}
first, err := s.PrepareSIP(source)
if err != nil || first.Revision != 1 {
t.Fatalf("first generation: %+v %v", first, err)
}
if err = s.Close(); err != nil {
t.Fatal(err)
}
s, err = Open(path)
if err != nil {
t.Fatal(err)
}
defer s.Close()
same, err := s.PrepareSIP(source)
if err != nil || same.Revision != 1 {
t.Fatalf("restart changed pending generation: %+v %v", same, err)
}
source.Trunks = json.RawMessage(`[] `)
// Encoding whitespace is normalized and is not different content.
same, err = s.PrepareSIP(source)
if err != nil || same.Revision != 1 {
t.Fatalf("equivalent snapshot changed generation: %+v %v", same, err)
}
raw, err = os.ReadFile("../../contracts/schema/examples/config-read-sip.json")
if err != nil {
t.Fatal(err)
}
var full configread.SIP
if err = json.Unmarshal(raw, &full); err != nil {
t.Fatal(err)
}
source.Trunks = full.Trunks
changed, err := s.PrepareSIP(source)
if err != nil || changed.Revision != 2 {
t.Fatalf("pending changed content not assigned new generation: %+v %v", changed, err)
}
foreign := source
foreign.DispatcherID = "4f3aac93-1b25-46b7-a9d7-83d29f5b86e1"
if _, err = s.PrepareSIP(foreign); err == nil {
t.Fatal("foreign owner reused store")
}
if _, pending, err := s.SIPState(source.DispatcherID); err != nil || pending != 2 {
t.Fatalf("foreign request modified pending state: %d %v", pending, err)
}
}