1#!/bin/bash
2
3# Copyright (c) 2023 Huawei Device Co., Ltd.
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16LOCAL="unknown_dir"
17OUTDIR=out/rk3568
18CMD=hdc_std
19ARCH=arm
20
21function usage {
22    echo "usage: $0 -r {source root} -p {product name in out(eg rk3568)}"
23    exit 1
24}
25
26while getopts ":r:p:" opt
27do
28    case $opt in
29        r)
30            LOCAL=$OPTARG
31            ;;
32        p)
33            OUTDIR=out/$OPTARG
34            ;;
35        ?)
36            echo "unknown options $opt"
37            usage
38            exit 1
39            ;;
40    esac
41done
42
43TESTDIR=${LOCAL}/${OUTDIR}/musl/libc-test
44DYNLIB=${LOCAL}/${OUTDIR}/musl/libc-test-lib
45SHDIR=${LOCAL}/third_party/musl/scripts
46REMOTE=/data/tests/libc-test
47REMOTELOCAL=/data/local/tmp
48REMOTESYSTEM=/system/lib
49
50echo checking HDC device....
51for device in $($CMD list targets); do 
52    device=$(echo $device | tr -d '\n\r')
53    if [ $device == "[Empty]" ]; then
54        echo Device not found, please check your device.
55        exit 1
56    fi
57done
58
59ABILIST=$(${CMD} shell param get const.product.cpu.abilist)
60echo $ABILIST
61
62if [ $ABILIST == "arm64-v8a" ]; then
63    ARCH=aarch64
64fi
65echo detect arch = ${ARCH}
66
67
68echo checking TESTDIR
69if [ ! -d ${TESTDIR} ]; then
70    echo Error: path "${TESTDIR}" was not found.
71    exit 1
72fi
73
74# Xts test require all so should exist in ${DYNLIB}
75TOTAL_SO_IN_TESTDIR=$(ls ${TESTDIR} | grep -E "*.so$" | wc -l)
76SO_NAMES=$(ls ${TESTDIR} | grep -E "*.so$")
77if [ $TOTAL_SO_IN_TESTDIR -gt 0  ]; then
78    echo Error: so shoul not exist in ${TESTDIR}, you should modify your part_name in gn to set so in ${DYNLIB}.
79    echo "Total so:${TOTAL_SO_IN_TESTDIR}"
80    echo -e "So list:\n${SO_NAMES}"
81    exit 1
82fi
83
84echo now mkdir
85${CMD} shell rm -rf ${REMOTE}
86${CMD} shell mkdir /data/tests
87${CMD} shell mkdir ${REMOTE}
88
89#mk temp directory
90${CMD} shell mkdir /tmp
91${CMD} shell mkdir /dev/shm
92echo Mkdir done.
93
94
95${CMD} file send ${TESTDIR} ${REMOTE}/src
96${CMD} shell mv ${REMOTE}/src/libc-test/* ${REMOTE}/src
97for lib in ${DYNLIB}/*; do
98    echo $lib
99    ${CMD} file send $lib ${REMOTE}/src
100done
101
102${CMD} shell chmod +x ${REMOTE}/src/*
103${CMD} shell mount -o rw,remount /
104${CMD} shell chmod 777 /etc
105${CMD} shell cp /etc/ld-musl-namespace-${ARCH}.ini /etc/ld-musl-namespace-${ARCH}.ini.bak
106${CMD} file send ${LOCAL}/third_party/musl/config/ld-musl-namespace-${ARCH}-test.ini /etc/ld-musl-namespace-${ARCH}.ini
107${CMD} shell mkdir ${REMOTE}/src/A
108${CMD} shell mkdir ${REMOTE}/src/B
109${CMD} shell mkdir ${REMOTE}/src/C
110${CMD} shell mkdir ${REMOTE}/src/D
111${CMD} shell mkdir ${REMOTELOCAL}/libc-test-lib
112${CMD} shell mkdir -p ${REMOTE}/src/rpath_lib/rpath_support_A
113${CMD} shell mkdir -p ${REMOTE}/src/rpath_lib/rpath_support_B
114${CMD} shell mkdir -p ${REMOTE}/src/rpath_support_C
115${CMD} shell mv ${REMOTE}/src/libdlns_dlsym_dep_a.so ${REMOTE}/src/A
116${CMD} shell mv ${REMOTE}/src/libdlns_dlsym_dep_b.so ${REMOTE}/src/B
117${CMD} shell mv ${REMOTE}/src/libdlns_dlsym_dep_c.so ${REMOTE}/src/C
118${CMD} shell mv ${REMOTE}/src/libprimary_absolute.so ${REMOTE}/src/rpath_lib
119${CMD} shell mv ${REMOTE}/src/libprimary_origin.so ${REMOTE}/src/rpath_lib
120${CMD} shell mv ${REMOTE}/src/libprimary_multiple.so ${REMOTE}/src/rpath_lib
121${CMD} shell mv ${REMOTE}/src/libsupport_002.so ${REMOTE}/src/rpath_support_C
122${CMD} shell mv ${REMOTE}/src/libsupport_001.so ${REMOTE}/src/rpath_lib/rpath_support_A
123${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/B/libB.so
124${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/C/libC.so
125${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/D/libD.so
126${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/sharedlibtest.so
127${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/set_lib_path_0200.so
128${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/inherit_0300.so
129${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/inherit_0700.so
130${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/inherit_0800.so
131${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/inherit_1100.so
132${CMD} shell cp ${REMOTE}/src/libdlopen_ns_dso.so /system/lib
133${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/lib_for_no_delete.so
134${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTE}/src/lib_for_dlopen.so
135${CMD} shell cp ${REMOTE}/src/libdlopen_ns_dso.so /system/lib64/libdlopen_ns_dso_sys.so
136${CMD} shell cp ${REMOTE}/src/libdlopen_ns_dso.so /system/lib64/ndk/libdlopen_ns_dso_ndk.so
137${CMD} shell cp ${REMOTE}/src/libdlopen_ns_dso.so /system/lib/libdlopen_ns_dso_sys.so
138${CMD} shell cp ${REMOTE}/src/libdlopen_ns_dso.so /system/lib/ndk/libdlopen_ns_dso_ndk.so
139${CMD} shell cp ${REMOTE}/src/libdlclose_recursive.so /system/lib64/libdlclose_recursive.so
140${CMD} shell cp ${REMOTE}/src/libdlclose_recursive_dlopen_so.so /system/lib64/libdlclose_recursive_dlopen_so.so
141${CMD} shell cp ${REMOTE}/src/libdl_gnu_hash_so.so ${REMOTE}/src/libdl_gnu_hash_so.so
142${CMD} shell cp ${REMOTE}/src/libdl_sysv_hash_so.so ${REMOTE}/src/libdl_sysv_hash_so.so
143${CMD} shell cp ${REMOTE}/src/libdlopen_dso.so ${REMOTELOCAL}/libc-test-lib/libdlopen_dso.so
144${CMD} shell cp ${REMOTE}/src/libdlopen_init.so ${REMOTELOCAL}/libc-test-lib/libdlopen_init.so
145${CMD} shell cp ${REMOTE}/src/libldso_debug_test_lib_6.so ${REMOTELOCAL}/libc-test-lib/libldso_debug_test_lib_6.so
146${CMD} shell cp ${REMOTE}/src/libldso_debug_test_lib_8.so ${REMOTELOCAL}/libc-test-lib/libldso_debug_test_lib_8.so
147${CMD} shell cp ${REMOTE}/src/libldso_debug_test_lib_9.so ${REMOTELOCAL}/libc-test-lib/libldso_debug_test_lib_9.so
148
149${CMD} shell mv ${REMOTE}/src/zh_CN /tmp/zh_CN
150
151${CMD} file send ${SHDIR}/runtest.sh ${REMOTE}/runtest.sh
152${CMD} shell chmod +x ${REMOTE}/runtest.sh
153${CMD} shell ${REMOTE}/runtest.sh
154
155
156echo hdc file recv ${REMOTE}/REPORT ${SHDIR}/REPORT
157${CMD} file recv ${REMOTE}/REPORT ${SHDIR}/REPORT
158
159if [ -f FileList.txt ]; then
160	rm FileList.txt
161fi
162if [ -f Summary.txt ]; then
163	rm Summary.txt
164fi
165${CMD} file recv ${REMOTE}/FileList.txt ${SHDIR}/FileList.txt
166${CMD} file recv ${REMOTE}/SkipList.txt ${SHDIR}/SkipList.txt
167#
168#for /f "delims=:" %%a in ('dir /b "${TESTDIR}" ^| findstr /n .*') do set all=%%a
169all=$(ls -l ${TESTDIR} | grep "^-" | wc -l)
170#for /f %%b in (' find /c /v "" ^<"FileList.txt" ') do set /a run=%%b
171run=$(cat -t ${SHDIR}/FileList.txt | grep -v ^\s*$ | wc -l)
172#for /f %%c in (' find /c "FAIL" ^<"REPORT" ') do set fail=%%c
173fail=$(cat -t ${SHDIR}/REPORT | grep 'FAIL ' | wc -l)
174#
175#
176echo ===================================
177pass=$[$run - $fail]
178skip=$[$all - $run]
179#
180echo "SUMMARY
181echo All: ${all} | Run: ${run} | Skip: ${skip}
182echo Pass: [${pass}/${run}]
183echo Fail: [${fail}/${run}]
184" | tee Summary.txt
185
186#
187echo "[Failed List]: 
188$(cat -t ${SHDIR}/REPORT | grep 'FAIL ')
189" | tee -a Summary.txt
190echo "[Skip List]:  " | tee -a Summary.txt
191
192cat ${SHDIR}/SkipList.txt | tee -a Summary.txt
193