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
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/ash/components/dbus/smbprovider/fake_smb_provider_client.h"
#include <utility>
#include "ash/constants/ash_features.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/task/single_thread_task_runner.h"
namespace ash {
namespace {
// Helper method to create a DirectoryEntryProto with |entry_name| and add it to
// |entry_list| as a directory.
void AddDirectoryEntryToList(smbprovider::DirectoryEntryListProto* entry_list,
const std::string& entry_name) {
DCHECK(entry_list);
smbprovider::DirectoryEntryProto* entry = entry_list->add_entries();
entry->set_is_directory(true);
entry->set_name(entry_name);
entry->set_size(0);
entry->set_last_modified_time(0);
}
} // namespace
FakeSmbProviderClient::ShareResult::ShareResult() = default;
FakeSmbProviderClient::ShareResult::~ShareResult() = default;
FakeSmbProviderClient::FakeSmbProviderClient() {}
FakeSmbProviderClient::FakeSmbProviderClient(bool should_run_synchronously)
: should_run_synchronously_(should_run_synchronously) {}
FakeSmbProviderClient::~FakeSmbProviderClient() {}
void FakeSmbProviderClient::AddNetBiosPacketParsingForTesting(
uint8_t packet_id,
std::vector<std::string> hostnames) {
netbios_parse_results_[packet_id] = std::move(hostnames);
}
void FakeSmbProviderClient::Init(dbus::Bus* bus) {}
void FakeSmbProviderClient::GetShares(const base::FilePath& server_url,
ReadDirectoryCallback callback) {
CheckDbusMethodsNotCalledAfterStopJob();
smbprovider::DirectoryEntryListProto entry_list;
smbprovider::ErrorType error = smbprovider::ErrorType::ERROR_OK;
auto it = shares_.find(server_url.value());
if (it != shares_.end()) {
error = it->second.error;
for (const std::string& share : it->second.shares) {
AddDirectoryEntryToList(&entry_list, share);
}
}
if (should_run_synchronously_) {
std::move(callback).Run(error, entry_list);
} else {
stored_readdir_callback_ =
base::BindOnce(std::move(callback), error, entry_list);
}
}
void FakeSmbProviderClient::SetupKerberos(const std::string& account_id,
SetupKerberosCallback callback) {
CheckDbusMethodsNotCalledAfterStopJob();
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), true /* success */));
}
void FakeSmbProviderClient::AddToShares(const std::string& server_url,
const std::string& share) {
shares_[server_url].shares.push_back(share);
}
void FakeSmbProviderClient::AddGetSharesFailure(const std::string& server_url,
smbprovider::ErrorType error) {
shares_[server_url].error = error;
}
void FakeSmbProviderClient::ParseNetBiosPacket(
const std::vector<uint8_t>& packet,
uint16_t transaction_id,
ParseNetBiosPacketCallback callback) {
CheckDbusMethodsNotCalledAfterStopJob();
std::vector<std::string> result;
// For testing, we map a 1 byte packet to a vector<std::string> to simulate
// parsing a list of hostnames from a packet.
if (packet.size() == 1 && netbios_parse_results_.count(packet[0])) {
result = netbios_parse_results_[packet[0]];
}
std::move(callback).Run(result);
}
base::WeakPtr<SmbProviderClient> FakeSmbProviderClient::AsWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
void FakeSmbProviderClient::ClearShares() {
shares_.clear();
}
void FakeSmbProviderClient::RunStoredReadDirCallback() {
std::move(stored_readdir_callback_).Run();
}
void FakeSmbProviderClient::OnStopJobCalled() {
stop_job_called_ = true;
}
void FakeSmbProviderClient::CheckDbusMethodsNotCalledAfterStopJob() {
// D-Bus methods are not expected to be called after smbproviderd has stopped.
if (base::FeatureList::IsEnabled(features::kSmbproviderdOnDemand)) {
CHECK(!stop_job_called_);
}
}
} // namespace ash
|