require 'helper' require 'qmp_client' module TestQMPClient class TestModuleMethods < BaseTestCase include QMPClient def test_require_loads_main_constants assert(defined?(::QMPClient), "QMPClient not defined") assert(defined?(::QMPClient::API), "QMPClient::API not defined") assert(defined?(::QMPClient::Connectors), "Connectors not defined") assert(defined?(::QMPClient::Connectors::Socket), "Socket connector not defined") assert(defined?(::QMPClient::Connectors::WriteProxy), "WriteProxy not defined") assert(defined?(::QMPClient::Messages), "Messages module not defined") assert(defined?(::QMPClient::Messages::Query), "Query message not defined") assert(defined?(::QMPClient::Messages::Command), "Command message not defined") assert(defined?(::QMPClient::Messages::Event), "Event message not defined") assert(defined?(::QMPClient::Messages::Reply), "Greeting message not defined") end def expects_socket_run(rio, wio=nil) rq, wq = [Queue.new, Queue.new] Connectors::Socket.any_instance.expects(:run).with(rio, wio). once.yields(rq, wq) API.expects(:run).with(rq, wq).once.yields("(mock-api)") end def test_connect_tcp cargs = ["127.0.0.1", 4440, "127.0.0.1", 40000] mock_sock = mock("(tcp-socket)") mock_sock.stubs(:closed? => false, :close => true) TCPSocket.expects(:connect).with(*cargs).once.returns(mock_sock) expects_socket_run(mock_sock) runs_api_block = false QMPClient::connect_tcp(*cargs) do |api| runs_api_block = true end assert(runs_api_block, "API not yielded by connect_tcp") end def test_connect_unix mock_sock = mock("(unix-socket)") mock_sock.stubs(:closed? => false, :close => true) UNIXSocket.expects(:connect).with("/tmp/test.sock").once.returns(mock_sock) expects_socket_run(mock_sock) runs_api_block = false QMPClient::connect_unix("/tmp/test.sock") do |api| runs_api_block = true end assert(runs_api_block, "API not yielded by connect_unix") end def test_connect_socket rs, ws = [mock("(read-socket)"), mock("(write-socket)")] expects_socket_run(rs, ws) runs_api_block = false QMPClient::connect_socket(rs, ws) do |api| runs_api_block = true end assert(runs_api_block, "API not yielded by connect_socket") # If we pass in just one socket, it's used for both read and write rw = mock("(rw-socket)") runs_api_block = false expects_socket_run(rw) QMPClient::connect_socket(rw) do runs_api_block = true end assert(runs_api_block, "API not yielded by connect_socket with one sock") end end end