require 'spec_helper' require 'em-bitcoin' include ::EM::P class MockActor attr_accessor :connection, :network_name, :sub_version, :current_height, :node_nonce def inspect "#" 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