xref: /aosp_15_r20/build/soong/finder/fs/test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage fs
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"io/ioutil"
19*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
20*333d2b36SAndroid Build Coastguard Worker	"reflect"
21*333d2b36SAndroid Build Coastguard Worker	"sort"
22*333d2b36SAndroid Build Coastguard Worker	"testing"
23*333d2b36SAndroid Build Coastguard Worker	"time"
24*333d2b36SAndroid Build Coastguard Worker)
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Workerfunc Write(t *testing.T, path string, content string, filesystem *MockFs) {
27*333d2b36SAndroid Build Coastguard Worker	parent := filepath.Dir(path)
28*333d2b36SAndroid Build Coastguard Worker	filesystem.MkDirs(parent)
29*333d2b36SAndroid Build Coastguard Worker	err := filesystem.WriteFile(path, []byte(content), 0777)
30*333d2b36SAndroid Build Coastguard Worker	if err != nil {
31*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
32*333d2b36SAndroid Build Coastguard Worker	}
33*333d2b36SAndroid Build Coastguard Worker}
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Workerfunc Create(t *testing.T, path string, filesystem *MockFs) {
36*333d2b36SAndroid Build Coastguard Worker	Write(t, path, "hi", filesystem)
37*333d2b36SAndroid Build Coastguard Worker}
38*333d2b36SAndroid Build Coastguard Worker
39*333d2b36SAndroid Build Coastguard Workerfunc Delete(t *testing.T, path string, filesystem *MockFs) {
40*333d2b36SAndroid Build Coastguard Worker	err := filesystem.Remove(path)
41*333d2b36SAndroid Build Coastguard Worker	if err != nil {
42*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
43*333d2b36SAndroid Build Coastguard Worker	}
44*333d2b36SAndroid Build Coastguard Worker}
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Workerfunc RemoveAll(t *testing.T, path string, filesystem *MockFs) {
47*333d2b36SAndroid Build Coastguard Worker	err := filesystem.RemoveAll(path)
48*333d2b36SAndroid Build Coastguard Worker	if err != nil {
49*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
50*333d2b36SAndroid Build Coastguard Worker	}
51*333d2b36SAndroid Build Coastguard Worker}
52*333d2b36SAndroid Build Coastguard Worker
53*333d2b36SAndroid Build Coastguard Workerfunc Move(t *testing.T, oldPath string, newPath string, filesystem *MockFs) {
54*333d2b36SAndroid Build Coastguard Worker	err := filesystem.Rename(oldPath, newPath)
55*333d2b36SAndroid Build Coastguard Worker	if err != nil {
56*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
57*333d2b36SAndroid Build Coastguard Worker	}
58*333d2b36SAndroid Build Coastguard Worker}
59*333d2b36SAndroid Build Coastguard Worker
60*333d2b36SAndroid Build Coastguard Workerfunc Link(t *testing.T, newPath string, oldPath string, filesystem *MockFs) {
61*333d2b36SAndroid Build Coastguard Worker	parentPath := filepath.Dir(newPath)
62*333d2b36SAndroid Build Coastguard Worker	err := filesystem.MkDirs(parentPath)
63*333d2b36SAndroid Build Coastguard Worker	if err != nil {
64*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
65*333d2b36SAndroid Build Coastguard Worker	}
66*333d2b36SAndroid Build Coastguard Worker	err = filesystem.Symlink(oldPath, newPath)
67*333d2b36SAndroid Build Coastguard Worker	if err != nil {
68*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
69*333d2b36SAndroid Build Coastguard Worker	}
70*333d2b36SAndroid Build Coastguard Worker}
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Workerfunc Read(t *testing.T, path string, filesystem *MockFs) string {
73*333d2b36SAndroid Build Coastguard Worker	reader, err := filesystem.Open(path)
74*333d2b36SAndroid Build Coastguard Worker	if err != nil {
75*333d2b36SAndroid Build Coastguard Worker		t.Fatalf(err.Error())
76*333d2b36SAndroid Build Coastguard Worker	}
77*333d2b36SAndroid Build Coastguard Worker	defer reader.Close()
78*333d2b36SAndroid Build Coastguard Worker	bytes, err := ioutil.ReadAll(reader)
79*333d2b36SAndroid Build Coastguard Worker	if err != nil {
80*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
81*333d2b36SAndroid Build Coastguard Worker	}
82*333d2b36SAndroid Build Coastguard Worker	return string(bytes)
83*333d2b36SAndroid Build Coastguard Worker}
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Workerfunc ModTime(t *testing.T, path string, filesystem *MockFs) time.Time {
86*333d2b36SAndroid Build Coastguard Worker	stats, err := filesystem.Lstat(path)
87*333d2b36SAndroid Build Coastguard Worker	if err != nil {
88*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
89*333d2b36SAndroid Build Coastguard Worker	}
90*333d2b36SAndroid Build Coastguard Worker	return stats.ModTime()
91*333d2b36SAndroid Build Coastguard Worker}
92*333d2b36SAndroid Build Coastguard Worker
93*333d2b36SAndroid Build Coastguard Workerfunc SetReadable(t *testing.T, path string, readable bool, filesystem *MockFs) {
94*333d2b36SAndroid Build Coastguard Worker	err := filesystem.SetReadable(path, readable)
95*333d2b36SAndroid Build Coastguard Worker	if err != nil {
96*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
97*333d2b36SAndroid Build Coastguard Worker	}
98*333d2b36SAndroid Build Coastguard Worker}
99*333d2b36SAndroid Build Coastguard Worker
100*333d2b36SAndroid Build Coastguard Workerfunc SetReadErr(t *testing.T, path string, readErr error, filesystem *MockFs) {
101*333d2b36SAndroid Build Coastguard Worker	err := filesystem.SetReadErr(path, readErr)
102*333d2b36SAndroid Build Coastguard Worker	if err != nil {
103*333d2b36SAndroid Build Coastguard Worker		t.Fatal(err.Error())
104*333d2b36SAndroid Build Coastguard Worker	}
105*333d2b36SAndroid Build Coastguard Worker}
106*333d2b36SAndroid Build Coastguard Worker
107*333d2b36SAndroid Build Coastguard Workerfunc AssertSameResponse(t *testing.T, actual []string, expected []string) {
108*333d2b36SAndroid Build Coastguard Worker	t.Helper()
109*333d2b36SAndroid Build Coastguard Worker	sort.Strings(actual)
110*333d2b36SAndroid Build Coastguard Worker	sort.Strings(expected)
111*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(actual, expected) {
112*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("Expected Finder to return these %v paths:\n  %v,\ninstead returned these %v paths:  %v\n",
113*333d2b36SAndroid Build Coastguard Worker			len(expected), expected, len(actual), actual)
114*333d2b36SAndroid Build Coastguard Worker	}
115*333d2b36SAndroid Build Coastguard Worker}
116*333d2b36SAndroid Build Coastguard Worker
117*333d2b36SAndroid Build Coastguard Workerfunc AssertSameStatCalls(t *testing.T, actual []string, expected []string) {
118*333d2b36SAndroid Build Coastguard Worker	t.Helper()
119*333d2b36SAndroid Build Coastguard Worker	sort.Strings(actual)
120*333d2b36SAndroid Build Coastguard Worker	sort.Strings(expected)
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(actual, expected) {
123*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("Finder made incorrect Stat calls.\n"+
124*333d2b36SAndroid Build Coastguard Worker			"Actual:\n"+
125*333d2b36SAndroid Build Coastguard Worker			"%v\n"+
126*333d2b36SAndroid Build Coastguard Worker			"Expected:\n"+
127*333d2b36SAndroid Build Coastguard Worker			"%v\n"+
128*333d2b36SAndroid Build Coastguard Worker			"\n",
129*333d2b36SAndroid Build Coastguard Worker			actual, expected)
130*333d2b36SAndroid Build Coastguard Worker	}
131*333d2b36SAndroid Build Coastguard Worker}
132*333d2b36SAndroid Build Coastguard Worker
133*333d2b36SAndroid Build Coastguard Workerfunc AssertSameReadDirCalls(t *testing.T, actual []string, expected []string) {
134*333d2b36SAndroid Build Coastguard Worker	t.Helper()
135*333d2b36SAndroid Build Coastguard Worker	sort.Strings(actual)
136*333d2b36SAndroid Build Coastguard Worker	sort.Strings(expected)
137*333d2b36SAndroid Build Coastguard Worker
138*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(actual, expected) {
139*333d2b36SAndroid Build Coastguard Worker		t.Fatalf("Finder made incorrect ReadDir calls.\n"+
140*333d2b36SAndroid Build Coastguard Worker			"Actual:\n"+
141*333d2b36SAndroid Build Coastguard Worker			"%v\n"+
142*333d2b36SAndroid Build Coastguard Worker			"Expected:\n"+
143*333d2b36SAndroid Build Coastguard Worker			"%v\n"+
144*333d2b36SAndroid Build Coastguard Worker			"\n",
145*333d2b36SAndroid Build Coastguard Worker			actual, expected)
146*333d2b36SAndroid Build Coastguard Worker	}
147*333d2b36SAndroid Build Coastguard Worker}
148