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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
// 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.
#ifndef CHROME_BROWSER_ASH_SMB_CLIENT_SMB_SERVICE_TEST_BASE_H_
#define CHROME_BROWSER_ASH_SMB_CLIENT_SMB_SERVICE_TEST_BASE_H_
#include <stddef.h>
#include "base/test/bind.h"
#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
#include "chrome/browser/ash/smb_client/smb_service.h"
#include "chrome/test/base/testing_profile.h"
#include "chrome/test/base/testing_profile_manager.h"
#include "chromeos/ash/components/dbus/concierge/concierge_client.h"
#include "chromeos/ash/components/disks/disk_mount_manager.h"
#include "chromeos/ash/components/disks/fake_disk_mount_manager.h"
#include "chromeos/ash/components/smbfs/smbfs_mounter.h"
#include "components/user_manager/scoped_user_manager.h"
#include "content/public/test/browser_task_environment.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
using ::testing::NiceMock;
namespace ash::smb_client {
namespace {
inline constexpr char kSharePath[] = "\\\\server\\foobar";
inline constexpr char kMountPath[] = "/share/mount/path";
inline constexpr char kDisplayName[] = "My Share";
} // namespace
class MockSmbFsMounter : public smbfs::SmbFsMounter {
public:
MockSmbFsMounter();
~MockSmbFsMounter() override;
MOCK_METHOD(void,
Mount,
(smbfs::SmbFsMounter::DoneCallback callback),
(override));
};
class MockSmbFsImpl : public smbfs::mojom::SmbFs {
public:
explicit MockSmbFsImpl(mojo::PendingReceiver<smbfs::mojom::SmbFs> pending);
~MockSmbFsImpl() override;
MockSmbFsImpl(const MockSmbFsImpl&) = delete;
MockSmbFsImpl& operator=(const MockSmbFsImpl&) = delete;
// Mojo disconnection handler.
MOCK_METHOD(void, OnDisconnect, (), ());
// smbfs::mojom::SmbFs overrides.
MOCK_METHOD(void,
RemoveSavedCredentials,
(RemoveSavedCredentialsCallback),
(override));
MOCK_METHOD(void,
DeleteRecursively,
(const base::FilePath&, DeleteRecursivelyCallback),
(override));
private:
mojo::Receiver<smbfs::mojom::SmbFs> receiver_;
};
class SmbServiceBaseTest : public testing::Test {
public:
SmbServiceBaseTest();
SmbServiceBaseTest(const SmbServiceBaseTest&) = delete;
SmbServiceBaseTest& operator=(const SmbServiceBaseTest&) = delete;
~SmbServiceBaseTest() override;
protected:
// Mojo endpoints owned by the smbfs instance.
struct TestSmbFsInstance {
explicit TestSmbFsInstance(
mojo::PendingReceiver<smbfs::mojom::SmbFs> pending);
~TestSmbFsInstance();
MockSmbFsImpl mock_smbfs;
mojo::Remote<smbfs::mojom::SmbFsDelegate> delegate;
};
// Create smb service.
void CreateService(TestingProfile* profile);
// Checks that the correct result status is returned when an SMB attempts
// mount with an invalid URL.
void ExpectInvalidUrl(const std::string& url);
// Checks that the correct result status is returned when an SMB attempts
// mount with an invalid SSO URL.
void ExpectInvalidSsoUrl(const std::string& url);
void WaitForSetupComplete();
std::unique_ptr<disks::MountPoint> MakeMountPoint(const base::FilePath& path);
// Helper function for creating a basic smbfs mount with an empty
// username/password.
std::unique_ptr<TestSmbFsInstance> MountBasicShare(
const std::string& share_path,
const std::string& mount_path,
SmbService::MountResponse callback);
std::unique_ptr<SmbService> smb_service;
TestingProfile* profile() { return profile_; }
private:
content::BrowserTaskEnvironment task_environment_{
content::BrowserTaskEnvironment::REAL_IO_THREAD};
base::test::ScopedFeatureList scoped_feature_list_;
raw_ptr<TestingProfile, DanglingUntriaged> profile_ = nullptr;
raw_ptr<disks::FakeDiskMountManager, DanglingUntriaged> disk_mount_manager_ =
nullptr;
std::unique_ptr<TestingProfileManager> profile_manager_;
std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
};
} // namespace ash::smb_client
#endif // CHROME_BROWSER_ASH_SMB_CLIENT_SMB_SERVICE_TEST_BASE_H_
|