-
Notifications
You must be signed in to change notification settings - Fork 168
/
test-topology.sh.in
144 lines (116 loc) · 3.07 KB
/
test-topology.sh.in
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!@BASH@
#-*-sh-*-
#
# Copyright © 2015-2023 Inria. All rights reserved.
# See COPYING in top-level directory.
#
HWLOC_top_srcdir="@HWLOC_top_srcdir@"
HWLOC_top_builddir="@HWLOC_top_builddir@"
lstopo="$HWLOC_top_builddir/utils/lstopo/lstopo-no-graphics"
HWLOC_PLUGINS_PATH=${HWLOC_top_builddir}/hwloc/.libs
export HWLOC_PLUGINS_PATH
HWLOC_DONT_ADD_VERSION_INFO=1
export HWLOC_DONT_ADD_VERSION_INFO
HWLOC_XML_EXPORT_SUPPORT=0
export HWLOC_XML_EXPORT_SUPPORT
HWLOC_X86_TOPOEXT_NUMANODES=1
export HWLOC_X86_TOPOEXT_NUMANODES
# make sure we use default numeric formats (only XML outputs are dis-localized when supported)
LANG=C
LC_ALL=C
export LANG LC_ALL
error()
{
echo $@ 2>&1
}
if [ ! -x "$lstopo" ]
then
error "Could not find executable file \`$lstopo'."
exit 1
fi
testname="$1"
dirname=`dirname $1`
basename=`basename $1 .test`
if test \! -f "$testname"; then
echo "Cannot find test file $testname"
exit 1
fi
dir="`mktemp -d`"
####################################
# foo.test should contain:
# - source: tarball filename (must be in same directory as foo.test)
# - target: expected output filename (must be in same directory as foo.test, ends with either .console or .xml)
# - options: lstopo options, if any
# - env: environment variable lines to be sourced, if any
source=`sed -n 's/^source: *//p' "$testname"`
target=`sed -n 's/^target: *//p' "$testname"`
opts=`sed -n 's/^options: *//p' "$testname"`
sed -n 's/^env: *//p' "$testname" > "$dir/env"
if test \! -f "$dirname/$source"; then
echo "Cannot find source file $source from test $testname"
exit 1
fi
if test \! -f "$dirname/$target"; then
echo "Cannot find target file $target from test $testname"
exit 1
fi
[ -z "$opts" ] && opts="--of xml -"
if test "$target" = `basename $target .xml`".xml"; then
is_xml_target=1
opts="--of xml $opts"
else
is_xml_target=0
opts="--of console $opts"
fi
. "$dir/env"
# test_topology NAME TOPOLOGY-DIR
#
# Test the topology under TOPOLOGY-DIR. Return true on success.
test_topology ()
{
local cpuiddir="$1"
local expected_output="$dirname/$target"
local output="`mktemp`"
export HWLOC_THISSYSTEM=0
export HWLOC_DEBUG_CHECK=1
if ! "$lstopo" -i "$cpuiddir" --if cpuid $opts \
| sed -e 's/ id="obj[0-9]*"//' \
| sed -e 's/ gp_index="[0-9]*"//' \
> "$output"
# filtered id/gp_index because it depends on the insertiong order, etc
then
result=1
else
if [ "$HWLOC_UPDATE_TEST_TOPOLOGY_OUTPUT" != 1 ]
then
@DIFF@ @HWLOC_DIFF_U@ @HWLOC_DIFF_W@ "$expected_output" "$output"
result=$?
else
if ! @DIFF@ "$expected_output" "$output" >/dev/null
then
cp -f "$output" "$expected_output"
echo "Updated $expected_output"
fi
result=0
fi
fi
rm "$output"
return $result
}
result=1
if ! ( bunzip2 -c "$dirname/$source" | ( cd "$dir" && tar xf - $tar_options ) )
then
error "failed to extract cpuid \`$source'"
else
actual_dir="`echo "$dir"/*/`"
if [ -d "$actual_dir" ]
then
test_topology "$actual_dir"
result=$?
else
# Skip this test.
result=77
fi
fi
rm -rf "$dir"
exit $result