blob: dc2e5076f7f0e6dbb5b3912981c66f5ea35dd66e [file] [log] [blame]
Mike Doddd3b009a2015-08-11 11:16:59 -07001#!/bin/bash
2# Copyright (C) 2015 The Android Open Source Project
3#
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###################################################################
16## Script that generates SMS and MMS messages and fills the Android
17## telephony provider mmssms.db. This is used for testing SMS/MMS.
18###################################################################
19
20AREA_CODE=605
21
22TABLE_CANONICAL_ADDRESSES_START_ID=100
23TABLE_THREADS_START_ID=100
24TABLE_SMS_START_ID=1000
25
26START_TIMESTAMP_IN_SECONDS=1357683093 # 1/8/2013 2:11:33 PM
27TIMESTAMP_INC_IN_SECONDS=120
28
29PART_DIR="/data/data/com.android.providers.telephony/app_parts"
30
31USAGE='fillsms [-f] [-x] <device_phone_number> <# of threads> <# of sms per thread> <# of mms per thread> <image list file> <sql file>
32 -f -- Only generates the SQL file, do not push to the device
33 -x -- Only execute a SQL file
34 -g -- For GB devices
35Examples:
36 # Generate 2 threads each with 10 SMSes and 10 MMSes on device with phone
37 # number +16508619525. MMS messages use images listed in ./images, which list
38 # *.jpg and *.gif files in local directory. The SQL commands are in sql.txt
39 fillsms +16508619525 2 10 10 images sql.txt
40
41 # Same as above but only creating the SQL command file without pushing to
42 # device
43 fillsms -f +16508619525 2 10 10 images sql.txt
44
45 # Just push the sql.txt to device without generating new SQLs
46 fillsms -x +16508619525 2 10 10 images sql.txt
47'
48
49SMIL='<smil> <head> <layout> <root-layout height="%dpx" width="%dpx"> <region fit="meet" height="%dpx" id="Image" left="0" top="0" width="%dpx"/></root-layout> </layout> </head> <body> <par dur="5000ms"> <img region="Image" src="%s"/> </par> </body> </smil>'
50
51MAX_WORDS_PER_MESSAGE=15
52
53DICT=american-english
54
55# don't actually run the sql on device
56opt_sql_only=0
57opt_exec_only=0
58opt_for_gb=0
59
60while test $# -gt 0
61do
62 case $1 in
63 -f)
64 opt_sql_only=1
65 shift
66 ;;
67 -x)
68 opt_exec_only=1
69 shift
70 ;;
71 -g)
72 opt_for_gb=1
73 shift
74 ;;
75 *)
76 break;
77 esac
78done
79
80
81if [ $opt_sql_only -eq "1" -a $opt_exec_only -eq "1" ]; then
82 echo "-f and -x can not coexist"
83 echo "$USAGE"
84 exit 1
85fi
86
87if [ $# -lt 6 ]; then
88 echo "$USAGE"
89 exit 1
90fi
91device_phone=$1
92shift
93num_of_threads=$1
94shift
95sms_per_thread=$1
96shift
97mms_per_thread=$1
98shift
99image_list_file=$1
100shift
101sql_file=$1
102shift
Sooraj Sasindran35860322023-10-25 15:04:46 -0700103echo $image_list_file
Mike Doddd3b009a2015-08-11 11:16:59 -0700104
105dict_lines=`wc -l < $DICT`
106image_files=`wc -l < $image_list_file`
Sooraj Sasindran35860322023-10-25 15:04:46 -0700107echo $image_files
Mike Doddd3b009a2015-08-11 11:16:59 -0700108
109if [ $mms_per_thread -gt "0" ]; then
110 if [ ! -f $image_list_file ]; then
111 echo "No image files for creating MMS messages"
112 exit 1
113 fi
114fi
115
116echoerr ()
117{
118 echo "$@" 1>&2;
119}
120
121random_value ()
122{
123 echo $(( $RANDOM % $1 + 1 ))
124}
125
126dict_word ()
127{
Sooraj Sasindran35860322023-10-25 15:04:46 -0700128 local v=$(random_value $dict_lines)
Mike Doddd3b009a2015-08-11 11:16:59 -0700129 sed $v"q;d" $DICT
130}
131
132gen_message ()
133{
134 local words=$(random_value $MAX_WORDS_PER_MESSAGE)
135 local message=
136 for k in `seq 1 $words`;
137 do
138 local word=$(dict_word)
139 message="$message $word"
140 done
141 echo $message | sed -e "s/'//g"
142}
143
144random_image ()
145{
146 local v=$(random_value $image_files)
147 sed $v"q;d" $image_list_file
148}
149
150add_sql ()
151{
152 echo $1 >> $sql_file
153}
154
155adb_sql ()
156{
157 echo $1
158 adb shell sqlite3 data/data/com.android.providers.telephony/databases/mmssms.db "$1"
159}
160
Sooraj Sasindran35860322023-10-25 15:04:46 -0700161adb_sql_with_quotes ()
162{
163 echo $1
164 adb shell "sqlite3 data/data/com.android.providers.telephony/databases/mmssms.db \"$1\""
165}
Mike Doddd3b009a2015-08-11 11:16:59 -0700166######################################################################################
167######################################################################################
168
169if [ $opt_exec_only -eq "0" ]; then
170 # clean up sql file
171 rm -f $sql_file
172
Sooraj Sasindran35860322023-10-25 15:04:46 -0700173 add_sql "PRAGMA trusted_schema=1;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700174 # add sql to clean up database
175 add_sql "delete from pdu where _id>=$TABLE_SMS_START_ID;"
176 add_sql "delete from part where _id>=$TABLE_SMS_START_ID;"
177 add_sql "delete from addr where _id>=$TABLE_SMS_START_ID;"
178 add_sql "delete from sms where _id>=$TABLE_SMS_START_ID;"
179 add_sql "delete from threads where _id>=$TABLE_THREADS_START_ID;"
180 add_sql "delete from canonical_addresses where _id>=$TABLE_CANONICAL_ADDRESSES_START_ID;"
181
182 for i in `seq 1 $num_of_threads`;
183 do
184 echo
185 echo "Creating thread $i ......"
186 echo
187
188 # Get random phone number
189 value=$(random_value 1000)
190 middle=$(printf '%03d' $value)
191 value=$(random_value 10000)
192 last=$(printf '%04d' $value)
193 phone="+1$AREA_CODE$middle$last"
194 echo $phone
195 echo
196
197 timestamp=$(( $START_TIMESTAMP_IN_SECONDS + 5 * $TIMESTAMP_INC_IN_SECONDS * $i ))
198
199 # Generate threads
200 addr_id=$(( $TABLE_CANONICAL_ADDRESSES_START_ID + $i ))
201 add_sql "insert into canonical_addresses (_id,address) values ($addr_id,'$phone');"
202
203 thread_id=$(( $TABLE_THREADS_START_ID + $i ))
204 add_sql "insert into threads (_id,date,message_count,recipient_ids,snippet,snippet_cs,read,type,error,has_attachment) values ($thread_id, $timestamp, $sms_per_thread, $addr_id, 'snippet', 0, 1, 0, 0, 0);"
205
206 # Generate SMS
207 if [ $sms_per_thread -gt "0" ]; then
Sooraj Sasindran35860322023-10-25 15:04:46 -0700208 add_sql "PRAGMA trusted_schema=1;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700209 half_timestamp_inc=$(( 500 + ((($sms_per_thread + $mms_per_thread) * $TIMESTAMP_INC_IN_SECONDS) * 500 / $sms_per_thread) ))
210 for j in `seq 1 $sms_per_thread`;
211 do
212 message=$(gen_message)
213 date=$(( ( 1000 * $timestamp ) - $half_timestamp_inc * ( 2 * ($sms_per_thread - $j) + ( $i % 2 ) ) ))
214 message_id=$(( $TABLE_SMS_START_ID + $sms_per_thread * $i * 2 + (2 * $j) ))
215 message_type=$(( $j % 2 + 1 ))
216 add_sql "insert into sms (_id,thread_id,address,person,date,status,type,body,read,seen) values ($message_id, $thread_id, '$phone', '$phone', $date, -1, $message_type, '$message', 1, 1);"
217 done
218 fi
219
220 # Generate MMS
221 if [ $mms_per_thread -gt "0" ]; then
222 half_timestamp_inc=$(( 1 + ((($sms_per_thread + $mms_per_thread) * $TIMESTAMP_INC_IN_SECONDS) / ( 2 * $mms_per_thread) ) ))
223 for j in `seq 1 $mms_per_thread`;
224 do
225 image_line=$(random_image)
226 image=`echo $image_line | awk '{ print $1 }'`
227 width=`echo $image_line | awk '{ print $2 }'`
228 height=`echo $image_line | awk '{ print $3 }'`
229 size=`echo $image_line | awk '{ print $4 }'`
230 date=$(( $timestamp - $half_timestamp_inc * ( 2 * ($mms_per_thread - $j) + ( ($i+1) % 2 ) ) ))
231 message_id=$(( $TABLE_SMS_START_ID + $sms_per_thread * $i * 2 + (2 * $j + 1) ))
232 message_type=$(( $j % 2 + 1 ))
233 if [ $message_type -eq '1' ]; then
234 m_type=132
235 else
236 m_type=128
237 fi
238 if [ $opt_for_gb -eq "0" ]; then
239 add_sql "insert into pdu (_id,thread_id,date,date_sent,msg_box,read,m_id,sub,sub_cs,ct_t,m_cls,m_type,v,m_size,pri,rr,tr_id,d_rpt,locked,seen,text_only) values ($message_id, $thread_id, $date, 0, $message_type, 1, 'hmma3p5s1a3m526@w.tmomail.net', 'no subject', 106, 'application/vnd.wap.multipart.related', 'personal', $m_type, 18, $size, 129, 129 , '$message_id', 129, 0, 1, 0);"
240 else
241 add_sql "insert into pdu (_id,thread_id,date,msg_box,read,m_id,sub,sub_cs,ct_t,m_cls,m_type,v,m_size,pri,rr,tr_id,d_rpt,locked,seen) values ($message_id, $thread_id, $date, $message_type, 1, 'hmma3p5s1a3m526@w.tmomail.net', 'no subject', 106, 'application/vnd.wap.multipart.related', 'personal', $m_type, 18, $size, 129, 129 , '$message_id', 129, 0, 1);"
242 fi
243 id_1=$(( $message_id ))
244 id_2=$(( $message_id + 1 ))
245 smil=$(printf "$SMIL" $height $width $height $width $image)
246 add_sql "insert into part (_id,mid,seq,ct,cid,cl,text) values ($id_1, $message_id, -1, 'application/smil', '<smil>', 'smil.xml', '$smil');"
247 image_no_suffix=${image%.*}
248 add_sql "insert into part (_id,mid,seq,ct,cid,cl,_data) values ($id_2, $message_id, 0, 'image/jpeg', '$image_no_suffix', '$image', '$PART_DIR/$image');"
249 if [ $message_type -eq '1' ]; then
250 add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_1, $message_id, '$phone', 137, 106);"
251 add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_2, $message_id, '$device_phone', 151, 106);"
252 else
253 add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_1, $message_id, 'insert-address-token', 137, 106);"
254 add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_2, $message_id, '$phone', 151, 106);"
255 fi
256 done
257 fi
258 done
259fi
260
261# Push to device
262if [ $opt_sql_only -eq "0" ]; then
263 # make sure we have access
264 adb root
265
266 # Push all local jpgs or gifs to device, being lazy here.
267 if [ $mms_per_thread -gt "0" ]; then
268 for file in `ls *.jpg *.gif`;
269 do
270 echo "adb push $file $PART_DIR/$file"
271 adb push $file $PART_DIR/$file
272 done
273 fi
274
275 echo "adb push $sql_file /data/fillsms"
276 adb push $sql_file /data/fillsms
277 echo
278 adb_sql ".read /data/fillsms"
279 echo
Sooraj Sasindran35860322023-10-25 15:04:46 -0700280 add_sql "PRAGMA trusted_schema=1;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700281 echo
Sooraj Sasindran35860322023-10-25 15:04:46 -0700282 adb_sql_with_quotes "select count(*) from canonical_addresses where _id>=$TABLE_CANONICAL_ADDRESSES_START_ID;"
283 echo
284 adb_sql_with_quotes "select count(*) from threads where _id>=$TABLE_THREADS_START_ID;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700285 echo
286 if [ $sms_per_thread -gt "0" ]; then
Sooraj Sasindran35860322023-10-25 15:04:46 -0700287 adb_sql_with_quotes "select count(*) from sms where _id>=$TABLE_SMS_START_ID;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700288 echo
289 fi
290 if [ $mms_per_thread -gt "0" ]; then
Sooraj Sasindran35860322023-10-25 15:04:46 -0700291 adb_sql_with_quotes "select count(*) from pdu where _id>=$TABLE_SMS_START_ID;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700292 echo
Sooraj Sasindran35860322023-10-25 15:04:46 -0700293 adb_sql_with_quotes "select count(*) from part where _id>=$TABLE_SMS_START_ID;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700294 echo
Sooraj Sasindran35860322023-10-25 15:04:46 -0700295 adb_sql_with_quotes "select count(*) from addr where _id>=$TABLE_SMS_START_ID;"
Mike Doddd3b009a2015-08-11 11:16:59 -0700296 echo
297 fi
298fi