blob: 5c0ce3f1d2db4a83177868229c9f2ddfe51e8fd6 [file] [log] [blame]
// Copyright 2014 The Goma Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "worker_thread.h"
#include "compiler_specific.h"
#include "socket_descriptor.h"
#include "glog/logging.h"
#include <gtest/gtest.h>
namespace devtools_goma {
class WorkerThreadTest : public ::testing::Test {
protected:
void TestDelayedClosureQueue() {
WorkerThreadManager::WorkerThread::DelayedClosureQueue delayed_pendings;
WorkerThreadManager::WorkerThread::DelayedClosureImpl *first
= new WorkerThreadManager::WorkerThread::DelayedClosureImpl(
"first", 1, nullptr);
WorkerThreadManager::WorkerThread::DelayedClosureImpl *second
= new WorkerThreadManager::WorkerThread::DelayedClosureImpl(
"second", 2, nullptr);
WorkerThreadManager::WorkerThread::DelayedClosureImpl *third
= new WorkerThreadManager::WorkerThread::DelayedClosureImpl(
"third", 3, nullptr);
ASSERT_TRUE(delayed_pendings.empty());
delayed_pendings.push(first);
delayed_pendings.push(third);
delayed_pendings.push(second);
EXPECT_EQ(3U, delayed_pendings.size());
WorkerThreadManager::WorkerThread::DelayedClosureImpl* dci = nullptr;
ASSERT_TRUE(!delayed_pendings.empty());
dci = delayed_pendings.top();
EXPECT_EQ(first, dci);
delayed_pendings.pop();
dci->Run();
ASSERT_TRUE(!delayed_pendings.empty());
dci = delayed_pendings.top();
EXPECT_EQ(second, dci);
delayed_pendings.pop();
dci->Run();
ASSERT_TRUE(!delayed_pendings.empty());
dci = delayed_pendings.top();
EXPECT_EQ(third, dci);
delayed_pendings.pop();
dci->Run();
ASSERT_TRUE(delayed_pendings.empty());
}
};
TEST_F(WorkerThreadTest, DelayedClosureQueue) {
TestDelayedClosureQueue();
}
} // namespace devtools_goma