package store import ( "bytes" "path/filepath" "testing" ) func TestAppliedSIPCleanupPreservesNewerUnloadedNotification(t *testing.T) { s, err := Open(filepath.Join(t.TempDir(), "state.db")) if err != nil { t.Fatal(err) } defer s.Close() first := []byte(`{"event_id":"first","event_type":"sip.config","dispatcher_id":"` + currentDispatcherID + `","payload":{"trunk_id":"1","change_type":"enabled","revision":1}}`) if err := s.NoteSIPChange(currentDispatcherID, 1); err != nil { t.Fatal(err) } if err := s.RememberSIPSource(currentDispatcherID, first); err != nil { t.Fatal(err) } if _, err := s.db.Exec(`UPDATE dispatcher_state SET applied_sip_revision=1,pending_sip_revision=0 WHERE dispatcher_id=?`, currentDispatcherID); err != nil { t.Fatal(err) } second := []byte(`{"event_id":"second","event_type":"sip.config","dispatcher_id":"` + currentDispatcherID + `","payload":{"trunk_id":"1","change_type":"enabled","revision":2}}`) if err := s.NoteSIPChange(currentDispatcherID, 2); err != nil { t.Fatal(err) } if err := s.RememberSIPSource(currentDispatcherID, second); err != nil { t.Fatal(err) } if err := s.CompleteAppliedSIPSources(currentDispatcherID); err != nil { t.Fatal(err) } pending, err := s.PendingSIPSources() if err != nil || len(pending) != 1 || !bytes.Equal(pending[0].Original, second) { t.Fatalf("new pending context lost or applied context retained: %+v %v", pending, err) } }