// 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_