Index: flimflam_proxy_unittest.cc |
diff --git a/flimflam_proxy_unittest.cc b/flimflam_proxy_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0041a0e8eb7d6436c9c20f32dbeecfff3e7874ad |
--- /dev/null |
+++ b/flimflam_proxy_unittest.cc |
@@ -0,0 +1,170 @@ |
+// Copyright (c) 2010 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 <base/logging.h> |
+#include <gtest/gtest.h> |
+ |
+#include "update_engine/flimflam_proxy.h" |
+#include "update_engine/mock_dbus_interface.h" |
+ |
+using ::testing::_; |
+using ::testing::Return; |
+using ::testing::SetArgumentPointee; |
+using ::testing::StrEq; |
+ |
+namespace chromeos_update_engine { |
+ |
+template<typename T, void F(T)> |
+class ScopedRelease { |
+ public: |
+ ScopedRelease(T obj) : obj_(obj) {} |
+ ~ScopedRelease() { |
+ F(obj_); |
+ } |
+ |
+ private: |
+ T obj_; |
+}; |
+ |
+class FlimFlamProxyTest : public ::testing::Test { |
+ protected: |
+ void TestWithServiceType( |
+ const char* service_type, NetworkConnectionType expected_type); |
+}; |
+ |
+void FlimFlamProxyTest::TestWithServiceType( |
+ const char* service_type, |
+ NetworkConnectionType expected_type) { |
+ int number = 1; |
+ DBusGConnection* kMockSystemBus = |
+ reinterpret_cast<DBusGConnection*>(number++); |
+ DBusGProxy* kMockFlimFlamManagerProxy = |
+ reinterpret_cast<DBusGProxy*>(number++); |
+ DBusGProxy* kMockFlimFlamServiceProxy = |
+ reinterpret_cast<DBusGProxy*>(number++); |
+ ASSERT_NE(kMockSystemBus, reinterpret_cast<DBusGConnection*>(NULL)); |
+ const char* kServicePath = "/foo/service"; |
+ const char kGetPropertiesMethod[] = "GetProperties"; |
+ |
+ MockDbusGlib dbus_iface; |
+ |
+ EXPECT_CALL(dbus_iface, |
+ ProxyNewForNameOwner(kMockSystemBus, |
+ StrEq(kFlimFlamDbusService), |
+ StrEq(kFlimFlamDbusManagerPath), |
+ StrEq(kFlimFlamDbusManagerInterface), |
+ _)) |
+ .WillOnce(Return(kMockFlimFlamManagerProxy)); |
+ EXPECT_CALL(dbus_iface, |
+ ProxyNewForNameOwner(kMockSystemBus, |
+ StrEq(kFlimFlamDbusService), |
+ StrEq(kServicePath), |
+ StrEq(kFlimFlamDbusServiceInterface), |
+ _)) |
+ .WillOnce(Return(kMockFlimFlamServiceProxy)); |
+ |
+ EXPECT_CALL(dbus_iface, ProxyUnref(kMockFlimFlamManagerProxy)); |
+ EXPECT_CALL(dbus_iface, ProxyUnref(kMockFlimFlamServiceProxy)); |
+ |
+ EXPECT_CALL(dbus_iface, BusGet(DBUS_BUS_SYSTEM, _)) |
+ .Times(2) |
+ .WillRepeatedly(Return(kMockSystemBus)); |
+ |
+ // Set up return value for first dbus call (to Manager object). |
+ GHashTable* manager_hash_table = g_hash_table_new(g_str_hash, g_str_equal); |
+ ScopedRelease<GHashTable*, g_hash_table_unref> manager_hash_table_unref( |
+ manager_hash_table); |
+ |
+ GArray* array = g_array_new(FALSE, FALSE, sizeof(const char*)); |
+ ASSERT_TRUE(array != NULL); |
+ |
+ EXPECT_EQ(array, g_array_append_val(array, kServicePath)); |
+ GValue array_value = {0, {{0}}}; |
+ EXPECT_EQ(&array_value, g_value_init(&array_value, G_TYPE_ARRAY)); |
+ g_value_take_boxed(&array_value, array); |
+ g_hash_table_insert(manager_hash_table, |
+ const_cast<char*>("Services"), |
+ &array_value); |
+ |
+ // Set up return value for second dbus call (to Service object). |
+ |
+ GHashTable* service_hash_table = g_hash_table_new(g_str_hash, g_str_equal); |
+ ScopedRelease<GHashTable*, g_hash_table_unref> service_hash_table_unref( |
+ service_hash_table); |
+ |
+ GValue service_type_value = {0, {{0}}}; |
+ EXPECT_EQ(&service_type_value, |
+ g_value_init(&service_type_value, G_TYPE_STRING)); |
+ g_value_set_static_string(&service_type_value, service_type); |
+ |
+ g_hash_table_insert(service_hash_table, |
+ const_cast<char*>("Type"), |
+ &service_type_value); |
+ |
+ EXPECT_CALL(dbus_iface, ProxyCall(kMockFlimFlamManagerProxy, |
+ StrEq(kGetPropertiesMethod), |
+ _, |
+ G_TYPE_INVALID, |
+ dbus_g_type_get_map("GHashTable", |
+ G_TYPE_STRING, |
+ G_TYPE_VALUE), |
+ _, |
+ G_TYPE_INVALID)) |
+ .WillOnce(DoAll(SetArgumentPointee<5>(manager_hash_table), Return(TRUE))); |
+ |
+ EXPECT_CALL(dbus_iface, ProxyCall(kMockFlimFlamServiceProxy, |
+ StrEq(kGetPropertiesMethod), |
+ _, |
+ G_TYPE_INVALID, |
+ dbus_g_type_get_map("GHashTable", |
+ G_TYPE_STRING, |
+ G_TYPE_VALUE), |
+ _, |
+ G_TYPE_INVALID)) |
+ .WillOnce(DoAll(SetArgumentPointee<5>(service_hash_table), Return(TRUE))); |
+ |
+ NetworkConnectionType type; |
+ |
+ EXPECT_TRUE(FlimFlamProxy::GetConnectionType(&dbus_iface, &type)); |
+ EXPECT_EQ(expected_type, type); |
+} |
+ |
+TEST_F(FlimFlamProxyTest, SimpleTest) { |
+ TestWithServiceType(kFlimFlamNetTypeEthernet, kNetEthernet); |
+ TestWithServiceType(kFlimFlamNetTypeWifi, kNetWifi); |
+ TestWithServiceType(kFlimFlamNetTypeWimax, kNetWimax); |
+ TestWithServiceType(kFlimFlamNetTypeBluetooth, kNetBluetooth); |
+ TestWithServiceType(kFlimFlamNetTypeCellular, kNetCellular); |
+} |
+ |
+TEST_F(FlimFlamProxyTest, UnknownTest) { |
+ TestWithServiceType("foo", kNetUnknown); |
+} |
+ |
+TEST_F(FlimFlamProxyTest, ExpensiveConnectionsTest) { |
+ EXPECT_FALSE(FlimFlamProxy::IsExpensiveConnectionType(kNetEthernet)); |
+ EXPECT_FALSE(FlimFlamProxy::IsExpensiveConnectionType(kNetWifi)); |
+ EXPECT_TRUE(FlimFlamProxy::IsExpensiveConnectionType(kNetWimax)); |
+ EXPECT_TRUE(FlimFlamProxy::IsExpensiveConnectionType(kNetBluetooth)); |
+ EXPECT_TRUE(FlimFlamProxy::IsExpensiveConnectionType(kNetCellular)); |
+} |
+ |
+TEST_F(FlimFlamProxyTest, StringForConnectionTypeTest) { |
+ //static const char* StringForConnectionType(NetworkConnectionType type); |
petkov
2010/10/21 05:15:19
remove?
adlr
2010/10/21 19:41:14
Done.
|
+ EXPECT_EQ(kFlimFlamNetTypeEthernet, |
+ FlimFlamProxy::StringForConnectionType(kNetEthernet)); |
+ EXPECT_EQ(kFlimFlamNetTypeWifi, |
+ FlimFlamProxy::StringForConnectionType(kNetWifi)); |
+ EXPECT_EQ(kFlimFlamNetTypeWimax, |
+ FlimFlamProxy::StringForConnectionType(kNetWimax)); |
+ EXPECT_EQ(kFlimFlamNetTypeBluetooth, |
+ FlimFlamProxy::StringForConnectionType(kNetBluetooth)); |
+ EXPECT_EQ(kFlimFlamNetTypeCellular, |
+ FlimFlamProxy::StringForConnectionType(kNetCellular)); |
+ EXPECT_EQ("Unknown", FlimFlamProxy::StringForConnectionType(kNetUnknown)); |
+ EXPECT_EQ("Unknown", FlimFlamProxy::StringForConnectionType( |
+ static_cast<NetworkConnectionType>(999999))); |
+} |
+ |
+} // namespace chromeos_update_engine |