shill: Add unit tests for RTNLListener.
BUG=chromium-os:17394
TEST=unit tests
Change-Id: I2b68d24d14ff11c9c071c4321790a9214e7d7997
Reviewed-on: http://gerrit.chromium.org/gerrit/3819
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/rtnl_listener_unittest.cc b/rtnl_listener_unittest.cc
new file mode 100644
index 0000000..540d4cc
--- /dev/null
+++ b/rtnl_listener_unittest.cc
@@ -0,0 +1,56 @@
+// Copyright (c) 2011 The Chromium OS 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 <sys/socket.h>
+#include <linux/netlink.h>
+
+#include <base/callback_old.h>
+#include <base/memory/scoped_ptr.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+#include "shill/rtnl_handler.h"
+#include "shill/rtnl_listener.h"
+
+using testing::_;
+using testing::Test;
+
+namespace shill {
+
+class RTNLListenerTest : public Test {
+ public:
+ RTNLListenerTest()
+ : callback_(NewCallback(this, &RTNLListenerTest::Callback)) {}
+
+ MOCK_METHOD1(Callback, void(struct nlmsghdr *));
+
+ protected:
+ scoped_ptr<Callback1<struct nlmsghdr *>::Type> callback_;
+};
+
+TEST_F(RTNLListenerTest, NoRun) {
+ {
+ RTNLListener listener(RTNLHandler::kRequestAddr, callback_.get());
+ EXPECT_EQ(1, RTNLHandler::GetInstance()->listeners_.size());
+ struct nlmsghdr message;
+ EXPECT_CALL(*this, Callback(_)).Times(0);
+ listener.NotifyEvent(RTNLHandler::kRequestLink, &message);
+ }
+ EXPECT_EQ(0, RTNLHandler::GetInstance()->listeners_.size());
+}
+
+TEST_F(RTNLListenerTest, Run) {
+ {
+ RTNLListener listener(
+ RTNLHandler::kRequestLink | RTNLHandler::kRequestAddr,
+ callback_.get());
+ EXPECT_EQ(1, RTNLHandler::GetInstance()->listeners_.size());
+ struct nlmsghdr message;
+ EXPECT_CALL(*this, Callback(&message)).Times(1);
+ listener.NotifyEvent(RTNLHandler::kRequestLink, &message);
+ }
+ EXPECT_EQ(0, RTNLHandler::GetInstance()->listeners_.size());
+}
+
+} // namespace shill