Created
March 31, 2018 00:01
-
-
Save trevren11/e669532d1ec384d7be6949f6470448fd to your computer and use it in GitHub Desktop.
Ruby test for SMS end to end
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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