blob: 52461fafa396dab4c69d810f13682c75551a3edc [file] [log] [blame]
Darin Petkovca432fc2011-07-08 15:56:57 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <sys/socket.h>
6#include <linux/netlink.h>
7
8#include <base/callback_old.h>
9#include <base/memory/scoped_ptr.h>
10#include <gmock/gmock.h>
11#include <gtest/gtest.h>
12
13#include "shill/rtnl_handler.h"
14#include "shill/rtnl_listener.h"
Chris Masone2aa97072011-08-09 17:35:08 -070015#include "shill/rtnl_message.h"
Darin Petkovca432fc2011-07-08 15:56:57 -070016
17using testing::_;
Chris Masone2aa97072011-08-09 17:35:08 -070018using testing::A;
Darin Petkovca432fc2011-07-08 15:56:57 -070019using testing::Test;
20
21namespace shill {
22
23class RTNLListenerTest : public Test {
24 public:
25 RTNLListenerTest()
26 : callback_(NewCallback(this, &RTNLListenerTest::Callback)) {}
27
Chris Masone2aa97072011-08-09 17:35:08 -070028 MOCK_METHOD1(Callback, void(const RTNLMessage &));
Darin Petkovca432fc2011-07-08 15:56:57 -070029
30 protected:
Chris Masone2aa97072011-08-09 17:35:08 -070031 scoped_ptr<Callback1<const RTNLMessage &>::Type> callback_;
Darin Petkovca432fc2011-07-08 15:56:57 -070032};
33
34TEST_F(RTNLListenerTest, NoRun) {
35 {
36 RTNLListener listener(RTNLHandler::kRequestAddr, callback_.get());
37 EXPECT_EQ(1, RTNLHandler::GetInstance()->listeners_.size());
Chris Masone2aa97072011-08-09 17:35:08 -070038 RTNLMessage message;
Darin Petkovca432fc2011-07-08 15:56:57 -070039 EXPECT_CALL(*this, Callback(_)).Times(0);
Chris Masone2aa97072011-08-09 17:35:08 -070040 listener.NotifyEvent(RTNLHandler::kRequestLink, message);
Darin Petkovca432fc2011-07-08 15:56:57 -070041 }
42 EXPECT_EQ(0, RTNLHandler::GetInstance()->listeners_.size());
43}
44
45TEST_F(RTNLListenerTest, Run) {
46 {
47 RTNLListener listener(
48 RTNLHandler::kRequestLink | RTNLHandler::kRequestAddr,
49 callback_.get());
50 EXPECT_EQ(1, RTNLHandler::GetInstance()->listeners_.size());
Chris Masone2aa97072011-08-09 17:35:08 -070051 RTNLMessage message;
52 EXPECT_CALL(*this, Callback(A<const RTNLMessage &>())).Times(1);
53 listener.NotifyEvent(RTNLHandler::kRequestLink, message);
Darin Petkovca432fc2011-07-08 15:56:57 -070054 }
55 EXPECT_EQ(0, RTNLHandler::GetInstance()->listeners_.size());
56}
57
58} // namespace shill