xref: /aosp_15_r20/tools/treble/hacksaw/mount/fake.go (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
1*105f6285SAndroid Build Coastguard Worker// Copyright 2020 Google LLC
2*105f6285SAndroid Build Coastguard Worker//
3*105f6285SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*105f6285SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*105f6285SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*105f6285SAndroid Build Coastguard Worker//
7*105f6285SAndroid Build Coastguard Worker//     https://www.apache.org/licenses/LICENSE-2.0
8*105f6285SAndroid Build Coastguard Worker//
9*105f6285SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*105f6285SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*105f6285SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*105f6285SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*105f6285SAndroid Build Coastguard Worker// limitations under the License.
14*105f6285SAndroid Build Coastguard Worker
15*105f6285SAndroid Build Coastguard Workerpackage mount
16*105f6285SAndroid Build Coastguard Worker
17*105f6285SAndroid Build Coastguard Workerimport (
18*105f6285SAndroid Build Coastguard Worker	"fmt"
19*105f6285SAndroid Build Coastguard Worker)
20*105f6285SAndroid Build Coastguard Worker
21*105f6285SAndroid Build Coastguard Workertype MountEntry struct {
22*105f6285SAndroid Build Coastguard Worker	Source string
23*105f6285SAndroid Build Coastguard Worker	FSType string
24*105f6285SAndroid Build Coastguard Worker	Flags  uintptr
25*105f6285SAndroid Build Coastguard Worker	Data   string
26*105f6285SAndroid Build Coastguard Worker}
27*105f6285SAndroid Build Coastguard Worker
28*105f6285SAndroid Build Coastguard Workertype fakeMounter struct {
29*105f6285SAndroid Build Coastguard Worker	mountMap map[string]MountEntry //keyed by target
30*105f6285SAndroid Build Coastguard Worker}
31*105f6285SAndroid Build Coastguard Worker
32*105f6285SAndroid Build Coastguard Workerfunc NewFakeMounter() *fakeMounter {
33*105f6285SAndroid Build Coastguard Worker	var f fakeMounter
34*105f6285SAndroid Build Coastguard Worker	f.mountMap = make(map[string]MountEntry)
35*105f6285SAndroid Build Coastguard Worker	return &f
36*105f6285SAndroid Build Coastguard Worker}
37*105f6285SAndroid Build Coastguard Worker
38*105f6285SAndroid Build Coastguard Workerfunc (f *fakeMounter) Mount(source string, target string, fstype string, flags uintptr, data string) error {
39*105f6285SAndroid Build Coastguard Worker	//Using the target as the key prevents more
40*105f6285SAndroid Build Coastguard Worker	//than one source mapping to the same target
41*105f6285SAndroid Build Coastguard Worker	f.mountMap[target] = MountEntry{
42*105f6285SAndroid Build Coastguard Worker		Source: source,
43*105f6285SAndroid Build Coastguard Worker		FSType: fstype,
44*105f6285SAndroid Build Coastguard Worker		Flags:  flags,
45*105f6285SAndroid Build Coastguard Worker		Data:   data,
46*105f6285SAndroid Build Coastguard Worker	}
47*105f6285SAndroid Build Coastguard Worker	return nil
48*105f6285SAndroid Build Coastguard Worker}
49*105f6285SAndroid Build Coastguard Worker
50*105f6285SAndroid Build Coastguard Workerfunc (f *fakeMounter) Unmount(target string, flags int) error {
51*105f6285SAndroid Build Coastguard Worker	_, ok := f.mountMap[target]
52*105f6285SAndroid Build Coastguard Worker	if !ok {
53*105f6285SAndroid Build Coastguard Worker		return fmt.Errorf("Mount %s not found", target)
54*105f6285SAndroid Build Coastguard Worker	}
55*105f6285SAndroid Build Coastguard Worker	delete(f.mountMap, target)
56*105f6285SAndroid Build Coastguard Worker	return nil
57*105f6285SAndroid Build Coastguard Worker}
58*105f6285SAndroid Build Coastguard Worker
59*105f6285SAndroid Build Coastguard Workerfunc (f *fakeMounter) List() ([]string, error) {
60*105f6285SAndroid Build Coastguard Worker	var list []string
61*105f6285SAndroid Build Coastguard Worker	for target, _ := range f.mountMap {
62*105f6285SAndroid Build Coastguard Worker		list = append(list, target)
63*105f6285SAndroid Build Coastguard Worker	}
64*105f6285SAndroid Build Coastguard Worker
65*105f6285SAndroid Build Coastguard Worker	return list, nil
66*105f6285SAndroid Build Coastguard Worker}
67