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/extension_apitest.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/system_network/system_network_api.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/test_util.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::Extension;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::core_api::SystemNetworkGetNetworkInterfacesFunction;
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::core_api::system_network::NetworkInterface;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace utils = extension_function_test_utils;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SystemNetworkApiTest : public ExtensionApiTest {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, SystemNetworkExtension) {
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(RunExtensionTest("system/network")) << message_;
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, GetNetworkInterfaces) {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<SystemNetworkGetNetworkInterfacesFunction> socket_function(
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new SystemNetworkGetNetworkInterfacesFunction());
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<Extension> empty_extension(
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      extensions::test_util::CreateEmptyExtension());
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  socket_function->set_extension(empty_extension.get());
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  socket_function->set_has_callback(true);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult(
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      socket_function.get(), "[]", browser(), utils::NONE));
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_EQ(base::Value::TYPE_LIST, result->GetType());
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // All we can confirm is that we have at least one address, but not what it
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // is.
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::ListValue *value = static_cast<base::ListValue*>(result.get());
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(value->GetSize() > 0);
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  for (base::ListValue::const_iterator it = value->begin();
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      it != value->end(); ++it) {
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::Value* network_interface_value = *it;
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    NetworkInterface network_interface;
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_TRUE(NetworkInterface::Populate(*network_interface_value,
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                           &network_interface));
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    LOG(INFO) << "Network interface: address=" << network_interface.address
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              << ", name=" << network_interface.name
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              << ", prefix length=" << network_interface.prefix_length;
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_NE(std::string(), network_interface.address);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_NE(std::string(), network_interface.name);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ASSERT_LE(0, network_interface.prefix_length);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
70