Index: chrome/common/extensions/api/sockets/sockets_manifest_permission_unittest.cc |
diff --git a/chrome/common/extensions/api/sockets/sockets_manifest_permission_unittest.cc b/chrome/common/extensions/api/sockets/sockets_manifest_permission_unittest.cc |
deleted file mode 100644 |
index 9be7daa2c25e33d8923783108e4ff5dbabc73a7e..0000000000000000000000000000000000000000 |
--- a/chrome/common/extensions/api/sockets/sockets_manifest_permission_unittest.cc |
+++ /dev/null |
@@ -1,403 +0,0 @@ |
-// Copyright 2013 The Chromium 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 <set> |
- |
-#include "base/json/json_reader.h" |
-#include "base/pickle.h" |
-#include "base/values.h" |
-#include "chrome/common/extensions/api/sockets/sockets_manifest_permission.h" |
-#include "extensions/common/extension_messages.h" |
-#include "extensions/common/manifest_constants.h" |
-#include "ipc/ipc_message.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::SocketPermissionRequest; |
- |
-namespace extensions { |
- |
-namespace { |
- |
-const char kUdpBindPermission[]= |
- "{ \"udp\": { \"bind\": [\"127.0.0.1:3007\", \"a.com:80\"] } }"; |
- |
-const char kUdpSendPermission[]= |
- "{ \"udp\": { \"send\": [\"\", \"a.com:80\"] } }"; |
- |
-const char kTcpConnectPermission[]= |
- "{ \"tcp\": { \"connect\": [\"127.0.0.1:80\", \"a.com:80\"] } }"; |
- |
-const char kTcpServerListenPermission[]= |
- "{ \"tcpServer\": { \"listen\": [\"127.0.0.1:80\", \"a.com:80\"] } }"; |
- |
-static void AssertEmptyPermission(const SocketsManifestPermission* permission) { |
- EXPECT_TRUE(permission); |
- EXPECT_EQ(std::string(extensions::manifest_keys::kSockets), permission->id()); |
- EXPECT_EQ(permission->id(), permission->name()); |
- EXPECT_FALSE(permission->HasMessages()); |
- EXPECT_EQ(0u, permission->entries().size()); |
-} |
- |
-static scoped_ptr<base::Value> ParsePermissionJSON(const std::string& json) { |
- scoped_ptr<base::Value> result(base::JSONReader::Read(json)); |
- EXPECT_TRUE(result) << "Invalid JSON string: " << json; |
- return result.Pass(); |
-} |
- |
-static scoped_ptr<SocketsManifestPermission> PermissionFromValue( |
- const base::Value& value) { |
- base::string16 error16; |
- scoped_ptr<SocketsManifestPermission> permission( |
- SocketsManifestPermission::FromValue(value, &error16)); |
- EXPECT_TRUE(permission) |
- << "Error parsing Value into permission: " << error16; |
- return permission.Pass(); |
-} |
- |
-static scoped_ptr<SocketsManifestPermission> PermissionFromJSON( |
- const std::string& json) { |
- scoped_ptr<base::Value> value(ParsePermissionJSON(json)); |
- return PermissionFromValue(*value); |
-} |
- |
-struct CheckFormatEntry { |
- CheckFormatEntry(SocketPermissionRequest::OperationType operation_type, |
- std::string host_pattern) |
- : operation_type(operation_type), |
- host_pattern(host_pattern) { |
- } |
- |
- // operators <, == are needed by container std::set and algorithms |
- // std::set_includes and std::set_differences. |
- bool operator<(const CheckFormatEntry& rhs) const { |
- if (operation_type == rhs.operation_type) |
- return host_pattern < rhs.host_pattern; |
- |
- return operation_type < rhs.operation_type; |
- } |
- |
- bool operator==(const CheckFormatEntry& rhs) const { |
- return operation_type == rhs.operation_type && |
- host_pattern == rhs.host_pattern; |
- } |
- |
- SocketPermissionRequest::OperationType operation_type; |
- std::string host_pattern; |
-}; |
- |
-static testing::AssertionResult CheckFormat( |
- std::multiset<CheckFormatEntry> permissions, |
- const std::string& json) { |
- scoped_ptr<SocketsManifestPermission> permission(PermissionFromJSON(json)); |
- if (!permission) |
- return testing::AssertionFailure() << "Invalid permission " << json; |
- |
- if (permissions.size() != permission->entries().size()) { |
- return testing::AssertionFailure() |
- << "Incorrect # of entries in json: " << json; |
- } |
- |
- // Note: We use multiset because SocketsManifestPermission does not have to |
- // store entries in the order found in the json message. |
- std::multiset<CheckFormatEntry> parsed_permissions; |
- for (SocketsManifestPermission::SocketPermissionEntrySet::const_iterator |
- it = permission->entries().begin(); it != permission->entries().end(); |
- ++it) { |
- parsed_permissions.insert( |
- CheckFormatEntry(it->pattern().type, it->GetHostPatternAsString())); |
- } |
- |
- if (!std::equal(permissions.begin(), permissions.end(), |
- parsed_permissions.begin())) { |
- return testing::AssertionFailure() << "Incorrect socket operations."; |
- } |
- return testing::AssertionSuccess(); |
-} |
- |
-static testing::AssertionResult CheckFormat(const std::string& json) { |
- return CheckFormat(std::multiset<CheckFormatEntry>(), json); |
-} |
- |
-static testing::AssertionResult CheckFormat( |
- const std::string& json, |
- const CheckFormatEntry& op1) { |
- CheckFormatEntry entries[] = { |
- op1 |
- }; |
- return CheckFormat(std::multiset<CheckFormatEntry>( |
- entries, entries + arraysize(entries)), json); |
-} |
- |
-static testing::AssertionResult CheckFormat( |
- const std::string& json, |
- const CheckFormatEntry& op1, |
- const CheckFormatEntry& op2) { |
- CheckFormatEntry entries[] = { |
- op1, op2 |
- }; |
- return CheckFormat(std::multiset<CheckFormatEntry>( |
- entries, entries + arraysize(entries)), json); |
-} |
- |
-static testing::AssertionResult CheckFormat( |
- const std::string& json, |
- const CheckFormatEntry& op1, |
- const CheckFormatEntry& op2, |
- const CheckFormatEntry& op3, |
- const CheckFormatEntry& op4, |
- const CheckFormatEntry& op5, |
- const CheckFormatEntry& op6, |
- const CheckFormatEntry& op7, |
- const CheckFormatEntry& op8, |
- const CheckFormatEntry& op9) { |
- CheckFormatEntry entries[] = { |
- op1, op2, op3, op4, op5, op6, op7, op8, op9 |
- }; |
- return CheckFormat(std::multiset<CheckFormatEntry>( |
- entries, entries + arraysize(entries)), json); |
-} |
- |
-} // namespace |
- |
-TEST(SocketsManifestPermissionTest, Empty) { |
- // Construction |
- scoped_ptr<SocketsManifestPermission> permission( |
- new SocketsManifestPermission()); |
- AssertEmptyPermission(permission.get()); |
- |
- // Clone()/Equal() |
- scoped_ptr<SocketsManifestPermission> clone( |
- static_cast<SocketsManifestPermission*>(permission->Clone())); |
- AssertEmptyPermission(clone.get()); |
- |
- EXPECT_TRUE(permission->Equal(clone.get())); |
- |
- // ToValue()/FromValue() |
- scoped_ptr<const base::Value> value(permission->ToValue()); |
- EXPECT_TRUE(value.get()); |
- |
- scoped_ptr<SocketsManifestPermission> permission2( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission2->FromValue(value.get())); |
- AssertEmptyPermission(permission2.get()); |
- |
- // Union/Diff/Intersection |
- scoped_ptr<SocketsManifestPermission> diff_perm( |
- static_cast<SocketsManifestPermission*>(permission->Diff(clone.get()))); |
- AssertEmptyPermission(diff_perm.get()); |
- |
- scoped_ptr<SocketsManifestPermission> union_perm( |
- static_cast<SocketsManifestPermission*>(permission->Union(clone.get()))); |
- AssertEmptyPermission(union_perm.get()); |
- |
- scoped_ptr<SocketsManifestPermission> intersect_perm( |
- static_cast<SocketsManifestPermission*>( |
- permission->Intersect(clone.get()))); |
- AssertEmptyPermission(intersect_perm.get()); |
- |
- // IPC |
- scoped_ptr<SocketsManifestPermission> ipc_perm( |
- new SocketsManifestPermission()); |
- scoped_ptr<SocketsManifestPermission> ipc_perm2( |
- new SocketsManifestPermission()); |
- |
- IPC::Message m; |
- ipc_perm->Write(&m); |
- PickleIterator iter(m); |
- EXPECT_TRUE(ipc_perm2->Read(&m, &iter)); |
- AssertEmptyPermission(ipc_perm2.get()); |
-} |
- |
-TEST(SocketsManifestPermissionTest, JSONFormats) { |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"send\":\"\"}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"send\":[]}}")); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"send\":[\"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"send\":[\"a:80\", \"b:10\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "b:10"))); |
- |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"bind\":\"\"}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"bind\":[]}}")); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"bind\":[\"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"bind\":[\"a:80\", \"b:10\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "b:10"))); |
- |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"multicastMembership\":\"\"}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, ""))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"multicastMembership\":[]}}")); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"multicastMembership\":[\"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, ""))); |
- EXPECT_TRUE(CheckFormat("{\"udp\":{\"multicastMembership\":[\"\", \"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, ""))); |
- |
- EXPECT_TRUE(CheckFormat("{\"tcp\":{\"connect\":\"\"}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"tcp\":{\"connect\":[]}}")); |
- EXPECT_TRUE(CheckFormat("{\"tcp\":{\"connect\":[\"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"tcp\":{\"connect\":[\"a:80\", \"b:10\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "b:10"))); |
- |
- EXPECT_TRUE(CheckFormat("{\"tcpServer\":{\"listen\":\"\"}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"tcpServer\":{\"listen\":[]}}")); |
- EXPECT_TRUE(CheckFormat("{\"tcpServer\":{\"listen\":[\"\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "*:*"))); |
- EXPECT_TRUE(CheckFormat("{\"tcpServer\":{\"listen\":[\"a:80\", \"b:10\"]}}", |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "b:10"))); |
- |
- EXPECT_TRUE(CheckFormat( |
- "{" |
- "\"udp\":{" |
- "\"send\":[\"a:80\", \"b:10\"]," |
- "\"bind\":[\"a:80\", \"b:10\"]," |
- "\"multicastMembership\":\"\"" |
- "}," |
- "\"tcp\":{\"connect\":[\"a:80\", \"b:10\"]}," |
- "\"tcpServer\":{\"listen\":[\"a:80\", \"b:10\"]}" |
- "}", |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_SEND_TO, "b:10"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_BIND, "b:10"), |
- CheckFormatEntry(SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, ""), |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::TCP_CONNECT, "b:10"), |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "a:80"), |
- CheckFormatEntry(SocketPermissionRequest::TCP_LISTEN, "b:10"))); |
- |
-} |
- |
-TEST(SocketsManifestPermissionTest, FromToValue) { |
- scoped_ptr<base::Value> udp_send(ParsePermissionJSON(kUdpBindPermission)); |
- scoped_ptr<base::Value> udp_bind(ParsePermissionJSON(kUdpSendPermission)); |
- scoped_ptr<base::Value> tcp_connect( |
- ParsePermissionJSON(kTcpConnectPermission)); |
- scoped_ptr<base::Value> tcp_server_listen( |
- ParsePermissionJSON(kTcpServerListenPermission)); |
- |
- // FromValue() |
- scoped_ptr<SocketsManifestPermission> permission1( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission1->FromValue(udp_send.get())); |
- EXPECT_EQ(2u, permission1->entries().size()); |
- |
- scoped_ptr<SocketsManifestPermission> permission2( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission2->FromValue(udp_bind.get())); |
- EXPECT_EQ(2u, permission2->entries().size()); |
- |
- scoped_ptr<SocketsManifestPermission> permission3( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission3->FromValue(tcp_connect.get())); |
- EXPECT_EQ(2u, permission3->entries().size()); |
- |
- scoped_ptr<SocketsManifestPermission> permission4( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission4->FromValue(tcp_server_listen.get())); |
- EXPECT_EQ(2u, permission4->entries().size()); |
- |
- // ToValue() |
- scoped_ptr<base::Value> value1 = permission1->ToValue(); |
- EXPECT_TRUE(value1); |
- scoped_ptr<SocketsManifestPermission> permission1_1( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission1_1->FromValue(value1.get())); |
- EXPECT_TRUE(permission1->Equal(permission1_1.get())); |
- |
- scoped_ptr<base::Value> value2 = permission2->ToValue(); |
- EXPECT_TRUE(value2); |
- scoped_ptr<SocketsManifestPermission> permission2_1( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission2_1->FromValue(value2.get())); |
- EXPECT_TRUE(permission2->Equal(permission2_1.get())); |
- |
- scoped_ptr<base::Value> value3 = permission3->ToValue(); |
- EXPECT_TRUE(value3); |
- scoped_ptr<SocketsManifestPermission> permission3_1( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission3_1->FromValue(value3.get())); |
- EXPECT_TRUE(permission3->Equal(permission3_1.get())); |
- |
- scoped_ptr<base::Value> value4 = permission4->ToValue(); |
- EXPECT_TRUE(value4); |
- scoped_ptr<SocketsManifestPermission> permission4_1( |
- new SocketsManifestPermission()); |
- EXPECT_TRUE(permission4_1->FromValue(value4.get())); |
- EXPECT_TRUE(permission4->Equal(permission4_1.get())); |
-} |
- |
-TEST(SocketsManifestPermissionTest, SetOperations) { |
- scoped_ptr<SocketsManifestPermission> permission1( |
- PermissionFromJSON(kUdpBindPermission)); |
- scoped_ptr<SocketsManifestPermission> permission2( |
- PermissionFromJSON(kUdpSendPermission)); |
- scoped_ptr<SocketsManifestPermission> permission3( |
- PermissionFromJSON(kTcpConnectPermission)); |
- scoped_ptr<SocketsManifestPermission> permission4( |
- PermissionFromJSON(kTcpServerListenPermission)); |
- |
- // Union |
- scoped_ptr<SocketsManifestPermission> union_perm( |
- static_cast<SocketsManifestPermission*>( |
- permission1->Union(permission2.get()))); |
- EXPECT_TRUE(union_perm); |
- EXPECT_EQ(4u, union_perm->entries().size()); |
- |
- EXPECT_TRUE(union_perm->Contains(permission1.get())); |
- EXPECT_TRUE(union_perm->Contains(permission2.get())); |
- EXPECT_FALSE(union_perm->Contains(permission3.get())); |
- EXPECT_FALSE(union_perm->Contains(permission4.get())); |
- |
- // Diff |
- scoped_ptr<SocketsManifestPermission> diff_perm1( |
- static_cast<SocketsManifestPermission*>( |
- permission1->Diff(permission2.get()))); |
- EXPECT_TRUE(diff_perm1); |
- EXPECT_EQ(2u, diff_perm1->entries().size()); |
- |
- EXPECT_TRUE(permission1->Equal(diff_perm1.get())); |
- EXPECT_TRUE(diff_perm1->Equal(permission1.get())); |
- |
- scoped_ptr<SocketsManifestPermission> diff_perm2( |
- static_cast<SocketsManifestPermission*>( |
- permission1->Diff(union_perm.get()))); |
- EXPECT_TRUE(diff_perm2); |
- AssertEmptyPermission(diff_perm2.get()); |
- |
- // Intersection |
- scoped_ptr<SocketsManifestPermission> intersect_perm1( |
- static_cast<SocketsManifestPermission*>( |
- union_perm->Intersect(permission1.get()))); |
- EXPECT_TRUE(intersect_perm1); |
- EXPECT_EQ(2u, intersect_perm1->entries().size()); |
- |
- EXPECT_TRUE(permission1->Equal(intersect_perm1.get())); |
- EXPECT_TRUE(intersect_perm1->Equal(permission1.get())); |
-} |
- |
-TEST(SocketsManifestPermissionTest, IPC) { |
- scoped_ptr<SocketsManifestPermission> permission( |
- PermissionFromJSON(kUdpBindPermission)); |
- |
- scoped_ptr<SocketsManifestPermission> ipc_perm( |
- static_cast<SocketsManifestPermission*>(permission->Clone())); |
- scoped_ptr<SocketsManifestPermission> ipc_perm2( |
- new SocketsManifestPermission()); |
- |
- IPC::Message m; |
- ipc_perm->Write(&m); |
- PickleIterator iter(m); |
- EXPECT_TRUE(ipc_perm2->Read(&m, &iter)); |
- EXPECT_TRUE(permission->Equal(ipc_perm2.get())); |
-} |
- |
-} // namespace extensions |