1717#include < gtest/gtest.h>
1818
1919#include < chrono>
20+ #include < condition_variable>
2021#include < memory>
22+ #include < mutex>
2123#include < string>
2224#include < thread>
25+ #include < unordered_set>
2326
2427#include " ../common/audio_utils.h"
2528#include " ../common/room_test_access.h"
@@ -31,6 +34,30 @@ namespace {
3134
3235using namespace std ::chrono_literals;
3336
37+ class LocalPublicationDelegate final : public RoomDelegate {
38+ public:
39+ void onLocalTrackPublished (Room&, const LocalTrackPublishedEvent& event) override {
40+ if (!event.publication ) {
41+ return ;
42+ }
43+ {
44+ const std::scoped_lock<std::mutex> guard (mutex_);
45+ published_sids_.insert (event.publication ->sid ());
46+ }
47+ cv_.notify_all ();
48+ }
49+
50+ bool waitForPublished (const std::string& sid, std::chrono::milliseconds timeout) {
51+ std::unique_lock<std::mutex> lock (mutex_);
52+ return cv_.wait_for (lock, timeout, [&] { return published_sids_.count (sid) != 0 ; });
53+ }
54+
55+ private:
56+ std::mutex mutex_;
57+ std::condition_variable cv_;
58+ std::unordered_set<std::string> published_sids_;
59+ };
60+
3461void expectTrackSidAssigned (const Track& track, const LocalTrackPublication& publication) {
3562 const std::string& track_sid = track.sid ();
3663 const std::string& publication_sid = publication.sid ();
@@ -58,6 +85,8 @@ TEST_F(LocalTrackPublishSidTest, PublishVideoTrackAssignsSid) {
5885 failIfNotConfigured ();
5986
6087 Room room;
88+ LocalPublicationDelegate delegate;
89+ room.setDelegate (&delegate);
6190 const RoomOptions room_options;
6291 ASSERT_TRUE (room.connect (config_.url , config_.token_a , room_options));
6392
@@ -69,13 +98,16 @@ TEST_F(LocalTrackPublishSidTest, PublishVideoTrackAssignsSid) {
6998 ASSERT_NE (track->publication (), nullptr );
7099
71100 expectTrackSidAssigned (*track, *track->publication ());
101+ EXPECT_TRUE (delegate.waitForPublished (track->sid (), 5s));
72102 lockLocalParticipant (room)->unpublishTrack (track->publication ()->sid ());
73103}
74104
75105TEST_F (LocalTrackPublishSidTest, PublishAudioTrackAssignsSid) {
76106 failIfNotConfigured ();
77107
78108 Room room;
109+ LocalPublicationDelegate delegate;
110+ room.setDelegate (&delegate);
79111 const RoomOptions room_options;
80112 ASSERT_TRUE (room.connect (config_.url , config_.token_a , room_options));
81113
@@ -87,6 +119,7 @@ TEST_F(LocalTrackPublishSidTest, PublishAudioTrackAssignsSid) {
87119 ASSERT_NE (track->publication (), nullptr );
88120
89121 expectTrackSidAssigned (*track, *track->publication ());
122+ EXPECT_TRUE (delegate.waitForPublished (track->sid (), 5s));
90123 lockLocalParticipant (room)->unpublishTrack (track->publication ()->sid ());
91124}
92125
0 commit comments