Files
sharp-coin/spec/em-bitcoin_spec.rb

110 lines
1.8 KiB
Ruby
Raw Normal View History

require 'spec_helper'
require 'em-bitcoin'
include ::EM::P
class MockActor
attr_accessor :connection, :network_name, :sub_version, :current_height,
:node_nonce
def inspect
"#<MockActor: #{name}>"
end
def to_s ; inspect ; end
def initialize(attributes = {})
self.network_name = :main # defaults
self.current_height = 0
self.node_nonce = 0
attributes.each {|k,v| self.send("#{k}=", v) }
end
def current_time=(new_time)
@current_time = new_time
end
def current_time
@current_time || Time.now
end
def log(level, msg)
STDERR.puts([name, level, msg].join(": ")) #if $DEBUG
end
def ready!
log(:info, "Received ready! call from em-bitcoin")
@ready = true
@on_ready.call
end
def ready?
@ready == true
end
# triggers for various events
def on_ready(&blk)
@on_ready = blk
end
protected
attr_accessor :name
end
shared_examples_for BitcoinPeer do
end
describe BitcoinClient do
include EM::Spec
def host
"127.0.0.1"
end
def port
@port || 0
end
def start_server(actor = @server_actor)
sig = EM::start_server(host, port, EM::P::BitcoinServer, actor)
@port = Socket::unpack_sockaddr_in(EM::get_sockname(sig))[0]
@server
end
def start_client(actor = @client_actor)
@client = EM::connect(host, port, EM::P::BitcoinClient, actor)
end
before(:each) do
@client_actor = MockActor.new(:name => "client")
@server_actor = MockActor.new(:name => "server")
done
end
describe "connection setup" do
context "successful" do
it "should connect to a Bitcoin server" do
start_server
start_client
@client_actor.on_ready do
@client_actor.connection.should_not == nil
done
end
end
end
end
end
describe BitcoinServer do
end