system_network_apitest.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/path_service.h"
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/stringprintf.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/api/system_network/system_network_api.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_test_message_listener.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::Extension;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::api::SystemNetworkGetNetworkInterfacesFunction;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::api::system_network::NetworkInterface;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace utils = extension_function_test_utils;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SystemNetworkApiTest : public ExtensionApiTest {
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, SystemNetworkExtension) {
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(RunExtensionTest("system/network")) << message_;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, GetNetworkInterfaces) {
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<SystemNetworkGetNetworkInterfacesFunction> socket_function(
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new SystemNetworkGetNetworkInterfacesFunction());
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<Extension> empty_extension(utils::CreateEmptyExtension());
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  socket_function->set_extension(empty_extension.get());
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  socket_function->set_has_callback(true);
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult(
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      socket_function.get(), "[]", browser(), utils::NONE));
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_EQ(base::Value::TYPE_LIST, result->GetType());
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // All we can confirm is that we have at least one address, but not what it
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // is.
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::ListValue *value = static_cast<base::ListValue*>(result.get());
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(value->GetSize() > 0);
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  for (base::ListValue::const_iterator it = value->begin();
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      it != value->end(); ++it) {
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::Value* network_interface_value = *it;
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    NetworkInterface network_interface;
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_TRUE(NetworkInterface::Populate(*network_interface_value,
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                           &network_interface));
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    LOG(INFO) << "Network interface: address=" << network_interface.address
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              << ", name=" << network_interface.name
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              << ", prefix length=" << network_interface.prefix_length;
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_NE(std::string(), network_interface.address);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_NE(std::string(), network_interface.name);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_LE(0, network_interface.prefix_length);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
68