Skip to content

Instantly share code, notes, and snippets.

@trevren11
Created March 31, 2018 00:01
Show Gist options
  • Save trevren11/e669532d1ec384d7be6949f6470448fd to your computer and use it in GitHub Desktop.
Save trevren11/e669532d1ec384d7be6949f6470448fd to your computer and use it in GitHub Desktop.
Ruby test for SMS end to end
# example usage:
# ruby test.rb -t -d "Moto G (4)"
require 'sqlite3'
require 'time'
require 'optparse'
options = {phone_number: nil, message_text: nil, device_name: nil}
options[:phone_number] = ENV['espresso_phone']
options[:message_text] = ENV['espresso_message']
options[:message_text] = ENV['espresso_phone_friendly_name']
parser = OptionParser.new do |opts|
opts.banner = 'Usage: test.rb [options]'
opts.on('-p', '--phone phone', 'Phone Number') do |phone|
options[:phone_number] = phone
end
opts.on('-m', '--message message', 'Message Text') do |text|
options[:message_text] = text
end
opts.on('-t', '--time', 'Set message to current time') do
options[:message_text] = Time.now
end
opts.on('-d', '--device device', 'Phone display name') do |phone|
options[:device_name] = phone
end
opts.on('-h', '--help', 'Show Help') do
puts opts
exit
end
end
parser.parse!
if options[:phone_number].nil?
print 'Enter Phone number: '
options[:phone_number] = gets.chomp
end
if options[:device_name].nil?
p "To see devices, go here #{ENV['LOCALAPPDATA']}/Packages/Microsoft.YourPhone_8wekyb3d8bbwe/LocalState/Databases/".tr('\\', '/')
print 'Enter Device Name: '
options[:device_name] = gets.chomp
p options[:device_name]
end
options[:message_text] = Time.now if options[:message_text].nil?
print "Sending text | #{options[:message_text]}\n"
print "To phone number | #{options[:phone_number]}\n"
# $message_database_location = "#{ENV['LOCALAPPDATA']}/Packages/Microsoft.YourPhone_8wekyb3d8bbwe/LocalState/Databases/#{options[:device_name]}/phone.db".tr('\\', '/')
$message_database_location = "#{ENV['LOCALAPPDATA']}/Packages/Microsoft.YourPhone_8wekyb3d8bbwe/LocalState/Databases/#{options[:device_name]}/messages.db".tr('\\', '/')
p $message_database_location
def send_sms_from_phone(phone_number, message_text)
p 'Run ui test'
`adb shell input keyevent KEYCODE_WAKEUP`
`adb shell am force-stop com.microsoft.mmx.sdksample`
result = `adb shell am instrument -w -r -e debug false -e ESPRESSO_PHONE #{phone_number} -e ESPRESSO_MESSAGE_TEXT '#{message_text}' -e class com.microsoft.mmx.sdksample.UiSendTextTest#uiSendTextTest com.microsoft.mmx.sdksample.test/android.support.test.runner.AndroidJUnitRunner`
# print result
if result.include? 'OK (1 test)'
p 'passed'
else
p 'failed'
# exit(false)
end
end
def get_last_message
db_query('SELECT * FROM message order by timestamp desc limit 1')
end
def get_total_count
# db_query('SELECT count(*) FROM address lock order by contact_id desc limit 1').to_i
db_query('SELECT count(*) FROM message lock order by timestamp desc limit 1').to_i
end
def db_query(statement)
ret = nil
locked_conn = SQLite3::Database.open($message_database_location)
locked_conn.busy_timeout(5000)
locked_conn.execute('begin immediate')
begin
ret = locked_conn.execute(statement)[0][0]
rescue SQLite3::Exception => e
puts 'Error occurred, exiting'
puts e
exit(false)
ensure
locked_conn.close if locked_conn
end
ret
end
def time_taken
success = false
num_before = get_total_count
p 'Last message'
p get_last_message
p 'Number of messages before: ' + get_total_count.to_s
# get_total_count
t1 = Time.now
1.upto(60) do |_i|
sleep(1)
# check if database incremented
if num_before != get_total_count
t2 = Time.now
delta = t2 - t1
p "Found message in #{delta} seconds"
success = true
break
else
t2 = Time.now
delta = t2 - t1
$stdout.flush
print "Time elapsed: #{delta.round(2)} seconds" + "\r"
end
# if not found, continue
end
t2 = Time.now
delta = t2 - t1
if success == false
p "failed to sync message in #{delta.to_i} seconds"
exit(false)
else
exit(true)
end
end
get_initial_message_count = get_total_count
send_sms_from_phone(options[:phone_number], options[:message_text])
time_taken
# todo eventually switch to check if the last message had the exact text we sent to it, but texts aren't syncing so that will have to wait
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment