File: source_destination_test_util.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 (98 lines) | stat: -rw-r--r-- 3,682 bytes parent folder | download | duplicates (4)
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
// Copyright 2022 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/enterprise/connectors/analysis/source_destination_test_util.h"

#include "base/files/file_util.h"
#include "base/test/bind.h"
#include "chrome/browser/ash/file_manager/volume_manager_factory.h"
#include "chromeos/ash/components/disks/disk_mount_manager.h"
#include "chromeos/ash/components/disks/fake_disk_mount_manager.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace enterprise_connectors {

namespace {
base::FilePath GetBasePathForVolume(
    base::FilePath path,
    const SourceDestinationTestingHelper::VolumeInfo& volume_info) {
  base::FilePath volume_path =
      path.Append(base::NumberToString(volume_info.type));
  if (volume_info.vm_type.has_value())
    volume_path = volume_path.Append(
        "_" + base::NumberToString(volume_info.vm_type.value()));
  else
    volume_path = volume_path.Append("NoVmType");

  return volume_path;
}

}  // namespace

SourceDestinationTestingHelper::SourceDestinationTestingHelper(
    content::BrowserContext* profile,
    std::vector<VolumeInfo> volumes) {
  file_manager::VolumeManagerFactory::GetInstance()->SetTestingFactory(
      profile, base::BindLambdaForTesting([](content::BrowserContext* context) {
        return std::unique_ptr<KeyedService>(
            std::make_unique<file_manager::VolumeManager>(
                Profile::FromBrowserContext(context), nullptr, nullptr,
                ash::disks::DiskMountManager::GetInstance(), nullptr,
                file_manager::VolumeManager::GetMtpStorageInfoCallback()));
      }));

  // Takes ownership of `disk_mount_manager_`, but Shutdown() must be called.
  ash::disks::DiskMountManager::InitializeForTesting(
      new ash::disks::FakeDiskMountManager);

  // Register volumes.
  EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
  AddVolumes(profile, std::move(volumes));
}

SourceDestinationTestingHelper::~SourceDestinationTestingHelper() {
  ash::disks::DiskMountManager::Shutdown();
}

storage::FileSystemURL
SourceDestinationTestingHelper::GetTestFileSystemURLForVolume(
    VolumeInfo volume_info,
    const std::string& component) {
  return storage::FileSystemURL::CreateForTest(
      kTestStorageKey, storage::kFileSystemTypeLocal,
      GetBasePathForVolume(temp_dir_.GetPath(), volume_info).Append(component));
}

base::FilePath SourceDestinationTestingHelper::GetTempDirPath() {
  return temp_dir_.GetPath();
}

void SourceDestinationTestingHelper::AddVolumes(
    content::BrowserContext* profile,
    std::vector<VolumeInfo> volumes) {
  file_manager::VolumeManager* const volume_manager =
      file_manager::VolumeManager::Get(profile);

  for (const VolumeInfo& volume_info : volumes) {
    base::FilePath volume_path =
        GetBasePathForVolume(temp_dir_.GetPath(), volume_info);
    EXPECT_TRUE(base::CreateDirectory(volume_path));

    if (volume_info.type == file_manager::VOLUME_TYPE_MOUNTED_ARCHIVE_FILE) {
      // A mounted archive needs a proper source path to be mounted correctly.
      base::FilePath source_path =
          GetBasePathForVolume(temp_dir_.GetPath(), volumes[0])
              .Append("source.zip");
      volume_manager->AddVolumeForTesting(
          file_manager::Volume::CreateForTesting(
              volume_path, volume_info.type, volume_info.vm_type, source_path));
    } else {
      volume_manager->AddVolumeForTesting(
          file_manager::Volume::CreateForTesting(volume_path, volume_info.type,
                                                 volume_info.vm_type));
    }
  }
}

}  // namespace enterprise_connectors