fake_dlp_client.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2021 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. #include "chromeos/dbus/dlp/fake_dlp_client.h"
  5. #include <string>
  6. #include "base/bind.h"
  7. #include "base/files/file_path.h"
  8. #include "base/files/file_util.h"
  9. #include "base/threading/sequenced_task_runner_handle.h"
  10. #include "chromeos/dbus/dlp/dlp_service.pb.h"
  11. namespace chromeos {
  12. namespace {
  13. ino_t GetInodeValue(const base::FilePath& path) {
  14. struct stat file_stats;
  15. if (stat(path.value().c_str(), &file_stats) != 0)
  16. return 0;
  17. return file_stats.st_ino;
  18. }
  19. } // namespace
  20. FakeDlpClient::FakeDlpClient() = default;
  21. FakeDlpClient::~FakeDlpClient() = default;
  22. void FakeDlpClient::SetDlpFilesPolicy(
  23. const dlp::SetDlpFilesPolicyRequest request,
  24. SetDlpFilesPolicyCallback callback) {
  25. ++set_dlp_files_policy_count_;
  26. dlp::SetDlpFilesPolicyResponse response;
  27. base::SequencedTaskRunnerHandle::Get()->PostTask(
  28. FROM_HERE, base::BindOnce(std::move(callback), response));
  29. }
  30. void FakeDlpClient::AddFile(const dlp::AddFileRequest request,
  31. AddFileCallback callback) {
  32. if (request.has_file_path() && request.has_source_url()) {
  33. files_database_[GetInodeValue(base::FilePath(request.file_path()))] =
  34. request.source_url();
  35. }
  36. dlp::AddFileResponse response;
  37. std::move(callback).Run(response);
  38. }
  39. void FakeDlpClient::GetFilesSources(const dlp::GetFilesSourcesRequest request,
  40. GetFilesSourcesCallback callback) const {
  41. dlp::GetFilesSourcesResponse response;
  42. for (const auto& file_inode : request.files_inodes()) {
  43. auto file_itr = files_database_.find(file_inode);
  44. if (file_itr == files_database_.end() && !fake_source_.has_value())
  45. continue;
  46. dlp::FileMetadata* file_metadata = response.add_files_metadata();
  47. file_metadata->set_inode(file_inode);
  48. file_metadata->set_source_url(fake_source_.value_or(file_itr->second));
  49. }
  50. std::move(callback).Run(response);
  51. }
  52. void FakeDlpClient::CheckFilesTransfer(
  53. const dlp::CheckFilesTransferRequest request,
  54. CheckFilesTransferCallback callback) const {
  55. dlp::CheckFilesTransferResponse response;
  56. if (check_files_transfer_response_.has_value())
  57. response = check_files_transfer_response_.value();
  58. std::move(callback).Run(response);
  59. }
  60. void FakeDlpClient::RequestFileAccess(
  61. const dlp::RequestFileAccessRequest request,
  62. RequestFileAccessCallback callback) {
  63. dlp::RequestFileAccessResponse response;
  64. response.set_allowed(file_access_allowed_);
  65. std::move(callback).Run(response, base::ScopedFD());
  66. }
  67. bool FakeDlpClient::IsAlive() const {
  68. return is_alive_;
  69. }
  70. DlpClient::TestInterface* FakeDlpClient::GetTestInterface() {
  71. return this;
  72. }
  73. int FakeDlpClient::GetSetDlpFilesPolicyCount() const {
  74. return set_dlp_files_policy_count_;
  75. }
  76. void FakeDlpClient::SetFakeSource(const std::string& fake_source) {
  77. fake_source_ = fake_source;
  78. }
  79. void FakeDlpClient::SetCheckFilesTransferResponse(
  80. dlp::CheckFilesTransferResponse response) {
  81. check_files_transfer_response_ = response;
  82. }
  83. void FakeDlpClient::SetFileAccessAllowed(bool allowed) {
  84. file_access_allowed_ = allowed;
  85. }
  86. void FakeDlpClient::SetIsAlive(bool is_alive) {
  87. is_alive_ = is_alive;
  88. }
  89. } // namespace chromeos