14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/values.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_browser_context.h"
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/api_resource_manager.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/socket/socket.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/socket/tcp_socket.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/sockets_tcp/sockets_tcp_api.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api_unittest.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace extensions {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace core_api {
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static KeyedService* ApiResourceManagerTestFactory(
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    content::BrowserContext* context) {
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  content::BrowserThread::ID id;
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CHECK(content::BrowserThread::GetCurrentThreadIdentifier(&id));
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return ApiResourceManager<
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      ResumableTCPSocket>::CreateApiResourceManagerForTest(context, id);
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SocketsTcpUnitTest : public ApiUnitTest {
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void SetUp() {
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ApiUnitTest::SetUp();
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ApiResourceManager<ResumableTCPSocket>::GetFactoryInstance()
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        ->SetTestingFactoryAndUse(browser_context(),
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                  ApiResourceManagerTestFactory);
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(SocketsTcpUnitTest, Create) {
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Get BrowserThread
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  content::BrowserThread::ID id;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CHECK(content::BrowserThread::GetCurrentThreadIdentifier(&id));
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Create SocketCreateFunction and put it on BrowserThread
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SocketsTcpCreateFunction* function = new SocketsTcpCreateFunction();
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  function->set_work_thread_id(id);
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Run tests
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDictionary(
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      function, "[{\"persistent\": true, \"name\": \"foo\"}]"));
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(result.get());
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace core_api
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace extensions
54