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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
check_updates () {
# called with 10 args - platform, source package, target package, update package, old updater boolean,
# a path to the updater binary to use for the tests, a file to write diffs to, the update channel,
# update-settings.ini values, and a flag to indicate the target is dep-signed
update_platform=$1
source_package=$2
target_package=$3
locale=$4
use_old_updater=$5
updater=$6
diff_file=$7
channel=$8
mar_channel_IDs=$9
update_to_dep=${10}
# cleanup
rm -rf source/*
rm -rf target/*
unpack_build $update_platform source "$source_package" $locale '' $mar_channel_IDs
if [ "$?" != "0" ]; then
echo "FAILED: cannot unpack_build $update_platform source $source_package"
return 1
fi
unpack_build $update_platform target "$target_package" $locale
if [ "$?" != "0" ]; then
echo "FAILED: cannot unpack_build $update_platform target $target_package"
return 1
fi
case $update_platform in
Darwin_ppc-gcc | Darwin_Universal-gcc3 | Darwin_x86_64-gcc3 | Darwin_x86-gcc3-u-ppc-i386 | Darwin_x86-gcc3-u-i386-x86_64 | Darwin_x86_64-gcc3-u-i386-x86_64 | Darwin_aarch64-gcc3)
platform_dirname="*.app"
;;
WINNT*)
platform_dirname="bin"
;;
Linux_x86-gcc | Linux_x86-gcc3 | Linux_x86_64-gcc3)
platform_dirname=`echo $product | tr '[A-Z]' '[a-z]'`
;;
esac
if [ -f update/update.status ]; then rm update/update.status; fi
if [ -f update/update.log ]; then rm update/update.log; fi
if [ -d source/$platform_dirname ]; then
if [ `uname | cut -c-5` == "MINGW" ]; then
# windows
# change /c/path/to/pwd to c:\\path\\to\\pwd
four_backslash_pwd=$(echo $PWD | sed -e 's,^/\([a-zA-Z]\)/,\1:/,' | sed -e 's,/,\\\\,g')
two_backslash_pwd=$(echo $PWD | sed -e 's,^/\([a-zA-Z]\)/,\1:/,' | sed -e 's,/,\\,g')
cwd="$two_backslash_pwd\\source\\$platform_dirname"
update_abspath="$two_backslash_pwd\\update"
else
# not windows
# use ls here, because mac uses *.app, and we need to expand it
cwd=$(ls -d $PWD/source/$platform_dirname)
update_abspath="$PWD/update"
fi
cd_dir=$(ls -d ${PWD}/source/${platform_dirname})
cd "${cd_dir}"
set -x
"$updater" "$update_abspath" "$cwd" "$cwd" 0
set +x
cd ../..
else
echo "TEST-UNEXPECTED-FAIL: no dir in source/$platform_dirname"
return 1
fi
cat update/update.log
update_status=`cat update/update.status`
if [ "$update_status" != "succeeded" ]
then
echo "TEST-UNEXPECTED-FAIL: update status was not successful: $update_status"
return 1
fi
# If we were testing an OS X mar on Linux, the unpack step copied the
# precomplete file from Contents/Resources to the root of the install
# to ensure the Linux updater binary could find it. However, only the
# precomplete file in Contents/Resources was updated, which means
# the copied version in the root of the install will usually have some
# differences between the source and target. To prevent this false
# positive from failing the tests, we simply remove it before diffing.
# The precomplete file in Contents/Resources is still diffed, so we
# don't lose any coverage by doing this.
cd `echo "source/$platform_dirname"`
if [[ -f "Contents/Resources/precomplete" && -f "precomplete" ]]
then
rm "precomplete"
fi
cd ../..
cd `echo "target/$platform_dirname"`
if [[ -f "Contents/Resources/precomplete" && -f "precomplete" ]]
then
rm "precomplete"
fi
cd ../..
# If we are testing an OSX mar to update from a production-signed/notarized
# build to a dep-signed one, ignore Contents/CodeResources which won't be
# present in the target, to avoid spurious failures
if ${update_to_dep}; then
ignore_coderesources=--ignore-missing=Contents/CodeResources
else
ignore_coderesources=
fi
../compare-directories.py source/${platform_dirname} target/${platform_dirname} ${channel} ${ignore_coderesources} > "${diff_file}"
diffErr=$?
cat "${diff_file}"
if [ $diffErr == 2 ]
then
echo "TEST-UNEXPECTED-FAIL: differences found after update"
return 1
elif [ $diffErr != 0 ]
then
echo "TEST-UNEXPECTED-FAIL: unknown error from diff: $diffErr"
return 3
fi
}
|