add automated arm tests
This commit is contained in:
parent
ce79617875
commit
87be6bf9d5
1
Gemfile
1
Gemfile
@ -13,6 +13,7 @@ group :test do
|
|||||||
gem "simplecov"
|
gem "simplecov"
|
||||||
gem "minitest-color"
|
gem "minitest-color"
|
||||||
gem 'minitest-fail-fast'
|
gem 'minitest-fail-fast'
|
||||||
|
gem "net-ssh"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
|
@ -54,7 +54,7 @@ GEM
|
|||||||
nenv (0.3.0)
|
nenv (0.3.0)
|
||||||
net-scp (1.2.1)
|
net-scp (1.2.1)
|
||||||
net-ssh (>= 2.6.5)
|
net-ssh (>= 2.6.5)
|
||||||
net-ssh (4.2.0)
|
net-ssh (5.0.2)
|
||||||
notiffany (0.1.1)
|
notiffany (0.1.1)
|
||||||
nenv (~> 0.1)
|
nenv (~> 0.1)
|
||||||
shellany (~> 0.0)
|
shellany (~> 0.0)
|
||||||
@ -98,6 +98,7 @@ DEPENDENCIES
|
|||||||
guard-minitest
|
guard-minitest
|
||||||
minitest-color
|
minitest-color
|
||||||
minitest-fail-fast
|
minitest-fail-fast
|
||||||
|
net-ssh
|
||||||
rake
|
rake
|
||||||
rb-readline
|
rb-readline
|
||||||
rubyx!
|
rubyx!
|
||||||
|
72
test/elf/helper.rb
Normal file
72
test/elf/helper.rb
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
require_relative "../helper"
|
||||||
|
require 'net/ssh'
|
||||||
|
require 'net/scp'
|
||||||
|
|
||||||
|
module Elf
|
||||||
|
|
||||||
|
class FullTest < MiniTest::Test
|
||||||
|
DEBUG = false
|
||||||
|
|
||||||
|
def setup
|
||||||
|
Risc.machine.boot
|
||||||
|
end
|
||||||
|
|
||||||
|
def check(file)
|
||||||
|
Vool::VoolCompiler.ruby_to_binary( "class Space;def main(arg);#{@input};end;end" )
|
||||||
|
writer = Elf::ObjectWriter.new(Risc.machine)
|
||||||
|
writer.save "test/#{file}.o"
|
||||||
|
stdout , exit_code = run_ssh(file)
|
||||||
|
@stdout = "" unless @stdout
|
||||||
|
assert_equal @stdout , stdout
|
||||||
|
assert_equal @exit_code , exit_code
|
||||||
|
end
|
||||||
|
|
||||||
|
def run_ssh( file )
|
||||||
|
host = ENV["ARM_HOST"]
|
||||||
|
return unless host
|
||||||
|
port = (ENV["ARM_PORT"] || 2222)
|
||||||
|
user = (ENV["ARM_USER"] || "pi")
|
||||||
|
binary_file = "/tmp/#{file}"
|
||||||
|
object_file = binary_file + ".o"
|
||||||
|
Net::SCP.start(host, user , port: port ) do |scp|
|
||||||
|
puts "Copying test/#{file}.o to #{object_file}" if DEBUG
|
||||||
|
scp.upload! "test/#{file}.o", object_file
|
||||||
|
end
|
||||||
|
Net::SSH.start(host, user , port: port ) do |ssh|
|
||||||
|
puts "Linking #{object_file}" if DEBUG
|
||||||
|
stdout , exit_code = ssh_exec!(ssh , "ld -N -o #{binary_file} #{object_file}")
|
||||||
|
assert_equal 0 , exit_code , "Linking #{binary_file} failed"
|
||||||
|
puts "Running #{binary_file}" if DEBUG
|
||||||
|
stdout , exit_code = ssh_exec!(ssh , binary_file)
|
||||||
|
puts "Result #{stdout} #{exit_code}" if DEBUG
|
||||||
|
return stdout , exit_code
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def ssh_exec!(ssh, command)
|
||||||
|
stdout_data = ""
|
||||||
|
exit_code = nil
|
||||||
|
ssh.open_channel do |channel|
|
||||||
|
channel.exec(command) do |ch, success|
|
||||||
|
unless success
|
||||||
|
raise "FAILED: couldn't execute command (ssh.channel.exec)"
|
||||||
|
end
|
||||||
|
channel.on_data do |c,data|
|
||||||
|
stdout_data+=data
|
||||||
|
end
|
||||||
|
channel.on_extended_data do |c,type,data|
|
||||||
|
raise "#{ssh} received stderr #{data}"
|
||||||
|
end
|
||||||
|
channel.on_request("exit-status") do |c,data|
|
||||||
|
exit_code = data.read_long
|
||||||
|
end
|
||||||
|
channel.on_request("exit-signal") do |c, data|
|
||||||
|
raise "#{ssh} received signal #{data.read_long}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ssh.loop
|
||||||
|
[stdout_data, exit_code]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
12
test/elf/test_add.rb
Normal file
12
test/elf/test_add.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
require_relative "helper"
|
||||||
|
|
||||||
|
module Elf
|
||||||
|
class AddTest < FullTest
|
||||||
|
|
||||||
|
def test_add
|
||||||
|
@input = "return 2 + 2"
|
||||||
|
@exit_code = 4
|
||||||
|
check "add"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,18 +1,14 @@
|
|||||||
require_relative "../helper"
|
require_relative "helper"
|
||||||
|
|
||||||
class HelloTest < MiniTest::Test
|
module Elf
|
||||||
|
class HelloTest < FullTest
|
||||||
|
|
||||||
def setup
|
def test_string_put
|
||||||
Risc.machine.boot
|
hello = "Hello World!\n"
|
||||||
end
|
@input = "return '#{hello}'.putstring"
|
||||||
def check
|
@stdout = hello
|
||||||
Vool::VoolCompiler.ruby_to_binary( "class Space;def main(arg);#{@input};end;end" )
|
@exit_code = hello.length
|
||||||
writer = Elf::ObjectWriter.new(Risc.machine)
|
check "hello"
|
||||||
writer.save "test/hello.o"
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def test_string_put
|
|
||||||
@input = "return 'Hello World!\n'.putstring"
|
|
||||||
check
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user