1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "content/browser/service_worker/service_worker_process_manager.h"
7#include "content/public/test/test_browser_thread_bundle.h"
8#include "testing/gmock/include/gmock/gmock.h"
9#include "testing/gtest/include/gtest/gtest.h"
10#include "url/gurl.h"
11
12namespace content {
13
14class ServiceWorkerProcessManagerTest : public testing::Test {
15 public:
16  ServiceWorkerProcessManagerTest() {}
17
18  virtual void SetUp() OVERRIDE {
19    process_manager_.reset(new ServiceWorkerProcessManager(NULL));
20    pattern_ = GURL("http://www.example.com/");
21  }
22
23  virtual void TearDown() OVERRIDE {
24    process_manager_.reset();
25  }
26
27 protected:
28  scoped_ptr<ServiceWorkerProcessManager> process_manager_;
29  GURL pattern_;
30
31 private:
32  content::TestBrowserThreadBundle thread_bundle_;
33  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProcessManagerTest);
34};
35
36TEST_F(ServiceWorkerProcessManagerTest, SortProcess) {
37  // Process 1 has 2 ref, 2 has 3 refs and 3 has 1 refs.
38  process_manager_->AddProcessReferenceToPattern(pattern_, 1);
39  process_manager_->AddProcessReferenceToPattern(pattern_, 1);
40  process_manager_->AddProcessReferenceToPattern(pattern_, 2);
41  process_manager_->AddProcessReferenceToPattern(pattern_, 2);
42  process_manager_->AddProcessReferenceToPattern(pattern_, 2);
43  process_manager_->AddProcessReferenceToPattern(pattern_, 3);
44
45  // Process 2 has the biggest # of references and it should be chosen.
46  EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_),
47              testing::ElementsAre(2, 1, 3));
48
49  process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1);
50  process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1);
51  // Scores for each process: 2 : 3, 3 : 1, process 1 is removed.
52  EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_),
53              testing::ElementsAre(2, 3));
54}
55
56}  // namespace content
57