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

94 lines
2.8 KiB
Go

package store
import (
"bytes"
"encoding/json"
"path/filepath"
"strings"
"testing"
"git.ipao.vip/rogee/go-sip/internal/configread"
)
func TestCurrentGlobalSIPAndQuotaRevisionCannotChangeContent(t *testing.T) {
s, err := OpenCurrent(filepath.Join(t.TempDir(), "state.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
base := currentStoreSnapshot(t)
if err := s.SaveSnapshot(base); err != nil {
t.Fatal(err)
}
changedSIP := base
changedSIP.SIP.Trunks = []byte(strings.Replace(string(base.SIP.Trunks), `"dial_prefix":""`, `"dial_prefix":"9"`, 1))
if string(changedSIP.SIP.Trunks) == string(base.SIP.Trunks) {
t.Fatal("test SIP change fixture failed")
}
if err := s.SaveSnapshot(changedSIP); err == nil {
t.Fatal("same SIP revision accepted different content")
}
changedQuota := base
changedQuota.Quota.MaxConcurrentCalls++
if err := s.SaveSnapshot(changedQuota); err == nil {
t.Fatal("same quota revision accepted different content")
}
regressed := base
regressed.SIP.Revision--
if err := s.SaveSnapshot(regressed); err == nil {
t.Fatal("older SIP revision was installed")
}
regressed = base
regressed.Quota.QuotaRevision--
if err := s.SaveSnapshot(regressed); err == nil {
t.Fatal("older tenant quota revision was installed")
}
loaded, err := s.ReadSnapshot(base.Task.DispatcherID, base.Task.TenantID, base.Task.TaskID)
if err != nil {
t.Fatal(err)
}
originalSIP, err := json.Marshal(base.SIP)
if err != nil {
t.Fatal(err)
}
storedSIP, err := json.Marshal(loaded.SIP)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(storedSIP, originalSIP) || loaded.Quota.MaxConcurrentCalls != base.Quota.MaxConcurrentCalls {
t.Fatalf("rejected update changed durable snapshot: %+v", loaded.SIP)
}
}
func TestCurrentSharedGlobalRevisionConflictAcrossTasks(t *testing.T) {
s, err := OpenCurrent(filepath.Join(t.TempDir(), "state.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
first := currentStoreSnapshot(t)
if err := s.SaveSnapshot(first); err != nil {
t.Fatal(err)
}
second := first
var task configread.CurrentTask
raw := []byte(strings.Replace(string(first.Task.Raw), `"task_id":"task-asr"`, `"task_id":"task-second"`, 1))
if string(raw) == string(first.Task.Raw) {
t.Fatal("test task clone fixture failed")
}
if err := json.Unmarshal(raw, &task); err != nil {
t.Fatal(err)
}
second.Task = task
second.SIP.Trunks = []byte(strings.Replace(string(first.SIP.Trunks), `"dial_prefix":""`, `"dial_prefix":"9"`, 1))
if err := s.SaveSnapshot(second); err == nil {
t.Fatal("two tasks accepted different SIP contents under same global revision")
}
second = first
second.Task = task
second.Quota.MaxConcurrentCalls++
if err := s.SaveSnapshot(second); err == nil {
t.Fatal("two tasks accepted different tenant quotas under same revision")
}
}