From 92690f46138aab5060b29d2aac71ccc4ff0bb48e Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Tue, 5 Sep 2023 15:23:19 +0200 Subject: [PATCH] Update entry if room session id changes. --- roomsessions_builtin.go | 8 ++++++++ roomsessions_test.go | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/roomsessions_builtin.go b/roomsessions_builtin.go index f82a6b4..926fe9f 100644 --- a/roomsessions_builtin.go +++ b/roomsessions_builtin.go @@ -56,6 +56,14 @@ func (r *BuiltinRoomSessions) SetRoomSession(session Session, roomSessionId stri r.mu.Lock() defer r.mu.Unlock() + if prev, found := r.sessionIdToRoomSession[sid]; found { + if prev == roomSessionId { + return nil + } + + delete(r.roomSessionToSessionid, prev) + } + r.sessionIdToRoomSession[sid] = roomSessionId r.roomSessionToSessionid[roomSessionId] = sid } diff --git a/roomsessions_test.go b/roomsessions_test.go index bbc4382..3511ba7 100644 --- a/roomsessions_test.go +++ b/roomsessions_test.go @@ -23,6 +23,7 @@ package signaling import ( "encoding/json" + "errors" "net/url" "testing" "time" @@ -145,4 +146,19 @@ func testRoomSessions(t *testing.T, sessions RoomSessions) { } else if sid != s2.PublicId() { t.Errorf("Expected session id %s, got %s", s2.PublicId(), sid) } + + if err := sessions.SetRoomSession(s2, "room-session2"); err != nil { + t.Error(err) + } + if sid, err := sessions.GetSessionId("room-session"); err == nil { + t.Errorf("expected error %s, got sid %s", ErrNoSuchRoomSession, sid) + } else if !errors.Is(err, ErrNoSuchRoomSession) { + t.Errorf("expected %s, got %s", ErrNoSuchRoomSession, err) + } + + if sid, err := sessions.GetSessionId("room-session2"); err != nil { + t.Errorf("Expected session id %s, got error %s", s2.PublicId(), err) + } else if sid != s2.PublicId() { + t.Errorf("Expected session id %s, got %s", s2.PublicId(), sid) + } }