File: smb_handler_unittest.cc

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (96 lines) | stat: -rw-r--r-- 3,052 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/webui/ash/smb_shares/smb_handler.h"

#include "base/test/simple_test_tick_clock.h"
#include "chrome/browser/ash/smb_client/smb_service_test_base.h"
#include "content/public/test/test_web_ui.h"

namespace ash::smb_dialog {

class TestSmbHandler : public SmbHandler {
 public:
  explicit TestSmbHandler(Profile* profile)
      : SmbHandler(profile, base::DoNothing()) {}
  ~TestSmbHandler() override = default;

  // Make public for testing.
  using SmbHandler::HandleHasAnySmbMountedBefore;
  using SmbHandler::set_web_ui;
};

class SmbHandlerTest : public ash::smb_client::SmbServiceBaseTest {
 public:
  SmbHandlerTest() = default;
  ~SmbHandlerTest() override = default;

 protected:
  void VerifyHasSmbMountedBeforeResult(bool expected_result) {
    base::Value::List args;
    args.Append("callback-id");
    handler()->HandleHasAnySmbMountedBefore(args);

    const content::TestWebUI::CallData& call_data =
        *web_ui()->call_data().back();

    EXPECT_EQ("cr.webUIResponse", call_data.function_name());
    EXPECT_EQ("callback-id", call_data.arg1()->GetString());
    EXPECT_TRUE(call_data.arg2()->GetBool());
    EXPECT_EQ(expected_result, call_data.arg3()->GetBool());
  }

  TestSmbHandler* handler() { return handler_.get(); }
  content::TestWebUI* web_ui() { return &web_ui_; }

  std::unique_ptr<TestSmbHandler> handler_;
  content::TestWebUI web_ui_;
};

TEST_F(SmbHandlerTest, NoSmbMountedBeforeWithSmbServiceNotAvailable) {
  handler_ = std::make_unique<TestSmbHandler>(profile());
  handler_->set_web_ui(&web_ui_);
  handler_->RegisterMessages();
  handler_->AllowJavascriptForTesting();

  VerifyHasSmbMountedBeforeResult(false);
}

TEST_F(SmbHandlerTest, NoSmbMountedBeforeWithSmbServiceAvailable) {
  handler_ = std::make_unique<TestSmbHandler>(profile());
  if (!smb_service) {
    // Create smb service.
    smb_service = std::make_unique<smb_client::SmbService>(
        profile(), std::make_unique<base::SimpleTestTickClock>());
  }

  handler_->SetSmbServiceForTesting(smb_service.get());
  handler_->set_web_ui(&web_ui_);
  handler_->RegisterMessages();
  handler_->AllowJavascriptForTesting();

  VerifyHasSmbMountedBeforeResult(false);
}

TEST_F(SmbHandlerTest, SmbMountedBeforeWithSmbServiceAvailable) {
  handler_ = std::make_unique<TestSmbHandler>(profile());
  CreateService(profile());
  WaitForSetupComplete();

  // Add a share
  std::ignore =
      MountBasicShare(smb_client::kSharePath, smb_client::kMountPath,
                      base::BindOnce([](smb_client::SmbMountResult result) {
                        EXPECT_EQ(smb_client::SmbMountResult::kSuccess, result);
                      }));

  handler_->SetSmbServiceForTesting(smb_service.get());
  handler_->set_web_ui(&web_ui_);
  handler_->RegisterMessages();
  handler_->AllowJavascriptForTesting();

  VerifyHasSmbMountedBeforeResult(true);
}

}  // namespace ash::smb_dialog