Browse Source

MT#56447 use full handle destroy method

and add tests

Change-Id: I0cff6b1248d53dc74379f25cee7069b50ef8a3fc
pull/1642/head
Richard Fuchs 3 years ago
parent
commit
892c736a9e
2 changed files with 62 additions and 0 deletions
  1. +17
    -0
      daemon/janus.c
  2. +45
    -0
      t/auto-daemon-tests-websocket.py

+ 17
- 0
daemon/janus.c View File

@ -1418,6 +1418,22 @@ static const char *janus_detach(struct websocket_message *wm, JsonReader *reader
}
// janus_lock must be held
static void janus_session_cleanup(struct janus_session *session) {
GHashTableIter iter;
g_hash_table_iter_init(&iter, session->handles);
gpointer key;
while (g_hash_table_iter_next(&iter, &key, NULL)) {
uint64_t *handle_id = key;
struct janus_handle *handle = NULL;
g_hash_table_steal_extended(janus_handles, handle_id, NULL, (void **) &handle);
if (!handle) // bug?
continue;
janus_destroy_handle(handle);
}
}
static const char *janus_destroy(struct websocket_message *wm, JsonReader *reader, JsonBuilder *builder,
struct janus_session *session,
int *retcode)
@ -1433,6 +1449,7 @@ static const char *janus_destroy(struct websocket_message *wm, JsonReader *reade
if (ht_session != session)
return "Sesssion ID not found"; // already removed/destroyed
janus_session_cleanup(session);
obj_put(session);
return NULL;


+ 45
- 0
t/auto-daemon-tests-websocket.py View File

@ -2860,10 +2860,55 @@ class TestVideoroom(unittest.TestCase):
},
)
# destroy session #2
self.destroySession(token, session_2)
# success is received first
self.assertEqual(self._res, {"janus": "success", "session_id": session_2})
# followed by events in the other session
eventloop.run_until_complete(testIJson(self, 2))
self.assertEqual(
self._res,
{
"janus": "event",
"session_id": session_3,
"sender": pub_handle_2,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "event",
"room": room,
"unpublished": feed_1,
},
},
},
)
eventloop.run_until_complete(testIJson(self, 2))
self.assertEqual(
self._res,
{
"janus": "event",
"session_id": session_3,
"sender": pub_handle_2,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "event",
"room": room,
"leaving": feed_1,
},
},
},
)
pub_sock_1.close()
pub_sock_2.close()
self.destroyVideoroom(token, session_1, control_handle, room)
self.destroySession(token, session_1)
self.destroySession(token, session_3)
def testVideoroomMute(self):
(token, session, control_handle, room) = self.startVideoroom()


Loading…
Cancel
Save