blob: f54d065d29ed0cb06d6b875176a21259134d1b47 [file] [log] [blame]
hta@webrtc.orge1919f42012-05-22 15:57:34 +00001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
hta@webrtc.org40300132012-05-23 15:49:48 +000010
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000011#include "webrtc/system_wrappers/interface/thread_wrapper.h"
hta@webrtc.orge1919f42012-05-22 15:57:34 +000012
pbos@webrtc.orgacaf3a12013-05-27 15:07:45 +000013#include "testing/gtest/include/gtest/gtest.h"
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000014#include "webrtc/system_wrappers/interface/scoped_ptr.h"
pbos@webrtc.orge9e42532014-07-18 10:12:50 +000015#include "webrtc/system_wrappers/interface/sleep.h"
hta@webrtc.orge1919f42012-05-22 15:57:34 +000016
17namespace webrtc {
18
hta@webrtc.orge1919f42012-05-22 15:57:34 +000019// Function that does nothing, and reports success.
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000020bool NullRunFunction(void* obj) {
pbos@webrtc.orge9e42532014-07-18 10:12:50 +000021 SleepMs(0); // Hand over timeslice, prevents busy looping.
hta@webrtc.orge1919f42012-05-22 15:57:34 +000022 return true;
23}
24
andrew@webrtc.org23ec30b2012-11-15 05:33:25 +000025TEST(ThreadTest, StartStop) {
henrike@webrtc.orga3e6bec2013-01-18 16:39:21 +000026 ThreadWrapper* thread = ThreadWrapper::CreateThread(&NullRunFunction, NULL);
hta@webrtc.orge1919f42012-05-22 15:57:34 +000027 unsigned int id = 42;
28 ASSERT_TRUE(thread->Start(id));
29 EXPECT_TRUE(thread->Stop());
hta@webrtc.org6ed617b2012-05-22 16:55:16 +000030 delete thread;
hta@webrtc.orge1919f42012-05-22 15:57:34 +000031}
32
33// Function that sets a boolean.
34bool SetFlagRunFunction(void* obj) {
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000035 bool* obj_as_bool = static_cast<bool*>(obj);
hta@webrtc.orge1919f42012-05-22 15:57:34 +000036 *obj_as_bool = true;
pbos@webrtc.orge9e42532014-07-18 10:12:50 +000037 SleepMs(0); // Hand over timeslice, prevents busy looping.
hta@webrtc.orge1919f42012-05-22 15:57:34 +000038 return true;
39}
40
andrew@webrtc.org23ec30b2012-11-15 05:33:25 +000041TEST(ThreadTest, RunFunctionIsCalled) {
hta@webrtc.orge1919f42012-05-22 15:57:34 +000042 bool flag = false;
43 ThreadWrapper* thread = ThreadWrapper::CreateThread(&SetFlagRunFunction,
44 &flag);
45 unsigned int id = 42;
46 ASSERT_TRUE(thread->Start(id));
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000047
hta@webrtc.orge1919f42012-05-22 15:57:34 +000048 // At this point, the flag may be either true or false.
49 EXPECT_TRUE(thread->Stop());
phoglund@webrtc.orgec9c9422013-01-02 08:45:03 +000050
hta@webrtc.orge1919f42012-05-22 15:57:34 +000051 // We expect the thread to have run at least once.
52 EXPECT_TRUE(flag);
hta@webrtc.org6ed617b2012-05-22 16:55:16 +000053 delete thread;
hta@webrtc.orge1919f42012-05-22 15:57:34 +000054}
55
hta@webrtc.orge1919f42012-05-22 15:57:34 +000056} // namespace webrtc