Skip to content

Commit acee5b2

Browse files
author
Daniel Ruthardt
authored
✅ Add tests for most functions (#30)
* ✅ Add tests for most functions * ♻️ Simplify preparation steps
1 parent d1ab877 commit acee5b2

File tree

12 files changed

+810
-19
lines changed

12 files changed

+810
-19
lines changed

libs/file/tests/copy/test

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# shellcheck shell=bash
2+
#
3+
# Copyright 2025 The Linux Foundation
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
#
17+
18+
#include file/copy
19+
#include core/test/assert_equals
20+
#include core/test/assert_success
21+
#include core/test/assert_contains
22+
#include core/test/prep_step
23+
24+
function file::tests::copy::test() {
25+
if ! command -v sudo &>/dev/null; then
26+
apt-get update -qq && apt-get install -y -qq sudo
27+
fi
28+
29+
local sudoCommand=""
30+
if [[ $EUID -ne 0 ]] && command -v sudo &>/dev/null; then
31+
sudoCommand="sudo"
32+
fi
33+
34+
local sourceFile="/tmp/source_copy_$$"
35+
local destDir="/tmp/dest_copy_dir_$$"
36+
37+
core::test::prep_step mkdir -p "$destDir"
38+
core::test::prep_step echo "test content" > "$sourceFile"
39+
core::test::prep_step $sudoCommand chown root:root "$destDir"
40+
41+
core::test::assert_success file::copy "$sourceFile" "$destDir/"
42+
43+
local copiedFile="$destDir/$(basename "$sourceFile")"
44+
core::test::assert_success test -f "$copiedFile"
45+
46+
local copiedUser
47+
copiedUser=$(stat -c '%U' "$copiedFile")
48+
core::test::assert_equals "root" "$copiedUser"
49+
50+
local copiedGroup
51+
copiedGroup=$(stat -c '%G' "$copiedFile")
52+
core::test::assert_equals "root" "$copiedGroup"
53+
54+
local copiedContent
55+
copiedContent=$(cat "$copiedFile")
56+
core::test::assert_contains "$copiedContent" "test content"
57+
58+
# Test recursive directory copy
59+
local sourceDir="/tmp/source_copy_dir_$$"
60+
local destDir2="/tmp/dest_copy_dir2_$$"
61+
62+
core::test::prep_step mkdir -p "$sourceDir"/{sub1,sub2}
63+
core::test::prep_step mkdir -p "$destDir2"
64+
core::test::prep_step touch "$sourceDir"/sub1/file1
65+
core::test::prep_step echo "nested content" > "$sourceDir"/sub2/file2
66+
core::test::prep_step $sudoCommand chown root:root "$destDir2"
67+
68+
core::test::assert_success file::copy "$sourceDir" "$destDir2/" -r
69+
70+
local copiedDir="$destDir2/$(basename "$sourceDir")"
71+
core::test::assert_success test -d "$copiedDir"
72+
core::test::assert_success test -d "$copiedDir/sub1"
73+
core::test::assert_success test -f "$copiedDir/sub1/file1"
74+
core::test::assert_success test -f "$copiedDir/sub2/file2"
75+
76+
local copiedDirUser
77+
copiedDirUser=$(stat -c '%U' "$copiedDir")
78+
core::test::assert_equals "root" "$copiedDirUser"
79+
80+
local copiedSubdirUser
81+
copiedSubdirUser=$(stat -c '%U' "$copiedDir/sub1")
82+
core::test::assert_equals "root" "$copiedSubdirUser"
83+
84+
local copiedFile2User
85+
copiedFile2User=$(stat -c '%U' "$copiedDir/sub2/file2")
86+
core::test::assert_equals "root" "$copiedFile2User"
87+
88+
# Test copy with preserve flag
89+
local sourceFile2="/tmp/source_copy2_$$"
90+
local destDir3="/tmp/dest_copy_dir3_$$"
91+
92+
core::test::prep_step mkdir -p "$destDir3"
93+
core::test::prep_step echo "preserve test" > "$sourceFile2"
94+
core::test::prep_step chmod 644 "$sourceFile2"
95+
core::test::prep_step $sudoCommand chown root:root "$destDir3"
96+
97+
core::test::assert_success file::copy "$sourceFile2" "$destDir3/" -p
98+
99+
local copiedFile3="$destDir3/$(basename "$sourceFile2")"
100+
core::test::assert_success test -f "$copiedFile3"
101+
102+
# Test multiple file copies
103+
local sourceFile3="/tmp/source_copy3_$$"
104+
local sourceFile4="/tmp/source_copy4_$$"
105+
local destDir4="/tmp/dest_copy_dir4_$$"
106+
107+
core::test::prep_step mkdir -p "$destDir4"
108+
core::test::prep_step echo "file3" > "$sourceFile3"
109+
core::test::prep_step echo "file4" > "$sourceFile4"
110+
core::test::prep_step $sudoCommand chown root:root "$destDir4"
111+
112+
core::test::assert_success file::copy "$sourceFile3" "$destDir4/"
113+
core::test::assert_success file::copy "$sourceFile4" "$destDir4/"
114+
115+
core::test::assert_success test -f "$destDir4/$(basename "$sourceFile3")"
116+
core::test::assert_success test -f "$destDir4/$(basename "$sourceFile4")"
117+
118+
# Test deeply nested directory copy
119+
local deepSource="/tmp/deep_source_$$"
120+
local deepDest="/tmp/deep_dest_$$"
121+
122+
core::test::prep_step mkdir -p "$deepSource"/a/b/c/d
123+
core::test::prep_step mkdir -p "$deepDest"
124+
core::test::prep_step touch "$deepSource"/a/b/c/d/deep_file
125+
core::test::prep_step $sudoCommand chown root:root "$deepDest"
126+
127+
core::test::assert_success file::copy "$deepSource" "$deepDest/" -r
128+
129+
local copiedDeep="$deepDest/$(basename "$deepSource")"
130+
core::test::assert_success test -f "$copiedDeep/a/b/c/d/deep_file"
131+
132+
local copiedDeepFileUser
133+
copiedDeepFileUser=$(stat -c '%U' "$copiedDeep/a/b/c/d/deep_file")
134+
core::test::assert_equals "root" "$copiedDeepFileUser"
135+
}

libs/file/tests/copy_owners/test

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# shellcheck shell=bash
2+
#
3+
# Copyright 2025 The Linux Foundation
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
#
17+
18+
#include file/copy_owners
19+
#include core/test/assert_equals
20+
#include core/test/assert_success
21+
#include core/test/prep_step
22+
23+
function file::tests::copy_owners::test() {
24+
if ! command -v sudo &>/dev/null; then
25+
apt-get update -qq && apt-get install -y -qq sudo
26+
fi
27+
28+
local sudoCommand=""
29+
if [[ $EUID -ne 0 ]] && command -v sudo &>/dev/null; then
30+
sudoCommand="sudo"
31+
fi
32+
33+
local sourceFile="/tmp/source_$$"
34+
local destFile="/tmp/dest_$$"
35+
36+
core::test::prep_step touch "$sourceFile" "$destFile"
37+
core::test::prep_step $sudoCommand chown root:root "$sourceFile"
38+
39+
core::test::assert_success file::copy_owners "$sourceFile" "$destFile"
40+
41+
local destUser
42+
destUser=$(stat -c '%U' "$destFile")
43+
core::test::assert_equals "root" "$destUser"
44+
45+
local destGroup
46+
destGroup=$(stat -c '%G' "$destFile")
47+
core::test::assert_equals "root" "$destGroup"
48+
49+
local sourceDir="/tmp/source_dir_$$"
50+
local destDir="/tmp/dest_dir_$$"
51+
52+
core::test::prep_step mkdir -p "$sourceDir"/{sub1,sub2}
53+
core::test::prep_step mkdir -p "$destDir"/{sub1,sub2}
54+
core::test::prep_step touch "$sourceDir"/sub1/file1
55+
core::test::prep_step touch "$destDir"/sub1/file1
56+
core::test::prep_step $sudoCommand chown -R root:root "$sourceDir"
57+
58+
core::test::assert_success file::copy_owners "$sourceDir" "$destDir" true
59+
60+
local destDirUser
61+
destDirUser=$(stat -c '%U' "$destDir")
62+
core::test::assert_equals "root" "$destDirUser"
63+
64+
local destSubdirUser
65+
destSubdirUser=$(stat -c '%U' "$destDir/sub1")
66+
core::test::assert_equals "root" "$destSubdirUser"
67+
68+
local destSubfileUser
69+
destSubfileUser=$(stat -c '%U' "$destDir/sub1/file1")
70+
core::test::assert_equals "root" "$destSubfileUser"
71+
72+
local sourceDir2="/tmp/source_dir2_$$"
73+
local destDir2="/tmp/dest_dir2_$$"
74+
local currentUser
75+
currentUser=$(whoami)
76+
77+
core::test::prep_step mkdir -p "$sourceDir2"/{sub1,sub2}
78+
core::test::prep_step mkdir -p "$destDir2"/{sub1,sub2}
79+
core::test::prep_step touch "$destDir2"/sub1/file1
80+
core::test::prep_step $sudoCommand chown -R root:root "$sourceDir2"
81+
core::test::prep_step $sudoCommand chown "$currentUser:$currentUser" "$destDir2"/sub1/file1
82+
83+
core::test::assert_success file::copy_owners "$sourceDir2" "$destDir2" false
84+
85+
local destDir2User
86+
destDir2User=$(stat -c '%U' "$destDir2")
87+
core::test::assert_equals "root" "$destDir2User"
88+
89+
local destSubfile2User
90+
destSubfile2User=$(stat -c '%U' "$destDir2/sub1/file1")
91+
core::test::assert_equals "$currentUser" "$destSubfile2User"
92+
93+
local sourceFile2="/tmp/source2_$$"
94+
local destFile2="/tmp/dest2_$$"
95+
core::test::prep_step touch "$sourceFile2" "$destFile2"
96+
core::test::prep_step $sudoCommand chown nobody:nogroup "$sourceFile2" 2>/dev/null || core::test::prep_step $sudoCommand chown nobody:nobody "$sourceFile2"
97+
98+
core::test::assert_success file::copy_owners "$sourceFile2" "$destFile2"
99+
100+
local destFile2User
101+
destFile2User=$(stat -c '%U' "$destFile2")
102+
core::test::assert_equals "nobody" "$destFile2User"
103+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# shellcheck shell=bash
2+
#
3+
# Copyright 2025 The Linux Foundation
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
#
17+
18+
#include file/inherit_owners
19+
#include core/test/assert_equals
20+
#include core/test/assert_success
21+
#include core/test/prep_step
22+
23+
function file::tests::inherit_owners::test() {
24+
if ! command -v sudo &>/dev/null; then
25+
apt-get update -qq && apt-get install -y -qq sudo
26+
fi
27+
28+
local sudoCommand=""
29+
if [[ $EUID -ne 0 ]] && command -v sudo &>/dev/null; then
30+
sudoCommand="sudo"
31+
fi
32+
33+
local testDir="/tmp/parent_dir_$$"
34+
local testFile="$testDir/child_file"
35+
36+
core::test::prep_step mkdir -p "$testDir"
37+
core::test::prep_step $sudoCommand chown root:root "$testDir"
38+
core::test::prep_step touch "$testFile"
39+
40+
core::test::assert_success file::inherit_owners "$testFile"
41+
42+
local fileUser
43+
fileUser=$(stat -c '%U' "$testFile")
44+
core::test::assert_equals "root" "$fileUser"
45+
46+
local fileGroup
47+
fileGroup=$(stat -c '%G' "$testFile")
48+
core::test::assert_equals "root" "$fileGroup"
49+
50+
local nestedDir="$testDir/nested"
51+
core::test::prep_step mkdir -p "$nestedDir"
52+
53+
core::test::assert_success file::inherit_owners "$nestedDir"
54+
55+
local nestedUser
56+
nestedUser=$(stat -c '%U' "$nestedDir")
57+
core::test::assert_equals "root" "$nestedUser"
58+
59+
local deepDir="/tmp/deep_parent_$$"
60+
local level1="$deepDir/level1"
61+
local level2="$level1/level2"
62+
local level3="$level2/level3"
63+
local deepFile="$level3/deep_file"
64+
65+
core::test::prep_step mkdir -p "$level3"
66+
core::test::prep_step $sudoCommand chown -R root:root "$deepDir"
67+
core::test::prep_step touch "$deepFile"
68+
69+
core::test::assert_success file::inherit_owners "$deepFile"
70+
71+
local deepFileUser
72+
deepFileUser=$(stat -c '%U' "$deepFile")
73+
core::test::assert_equals "root" "$deepFileUser"
74+
75+
local deepFileGroup
76+
deepFileGroup=$(stat -c '%G' "$deepFile")
77+
core::test::assert_equals "root" "$deepFileGroup"
78+
79+
local parentDir2="/tmp/parent_dir2_$$"
80+
local childDir="$parentDir2/child"
81+
local currentUser
82+
currentUser=$(whoami)
83+
84+
core::test::prep_step mkdir -p "$parentDir2"
85+
core::test::prep_step $sudoCommand chown nobody:nogroup "$parentDir2" 2>/dev/null || core::test::prep_step $sudoCommand chown nobody:nobody "$parentDir2"
86+
core::test::prep_step mkdir "$childDir"
87+
core::test::prep_step $sudoCommand chown "$currentUser:$currentUser" "$childDir"
88+
89+
core::test::assert_success file::inherit_owners "$childDir"
90+
91+
local childDirUser
92+
childDirUser=$(stat -c '%U' "$childDir")
93+
core::test::assert_equals "nobody" "$childDirUser"
94+
95+
local nestedFile="$testDir/nested/file_in_nested"
96+
core::test::prep_step touch "$nestedFile"
97+
98+
core::test::assert_success file::inherit_owners "$nestedFile"
99+
100+
local nestedFileUser
101+
nestedFileUser=$(stat -c '%U' "$nestedFile")
102+
core::test::assert_equals "root" "$nestedFileUser"
103+
}

0 commit comments

Comments
 (0)