spec/tcr_spec.rb in tcr-0.0.1 vs spec/tcr_spec.rb in tcr-0.0.2
- old
+ new
@@ -1,8 +1,9 @@
require "spec_helper"
require "tcr"
require "net/protocol"
+require "net/smtp"
describe TCR do
before(:each) do
TCR.configuration.reset_defaults!
end
@@ -42,14 +43,14 @@
before(:each) {
TCR.configure { |c|
c.hook_tcp_ports = [25]
c.cassette_library_dir = "."
}
- File.unlink("./test.json") if File.exists?("./test.json")
+ File.unlink("test.json") if File.exists?("test.json")
}
after(:each) {
- File.unlink("./test.json") if File.exists?("./test.json")
+ File.unlink("test.json") if File.exists?("test.json")
}
it "requires a block to call" do
expect {
TCR.use_cassette("test")
@@ -70,10 +71,67 @@
tcp_socket = TCPSocket.open("aspmx.l.google.com", 25)
io = Net::InternetMessageIO.new(tcp_socket)
line = io.readline
tcp_socket.close
end
- file_contents = File.open("./test.json") { |f| f.read }
- file_contents.include?("220 mx.google.com ESMTP").should == true
+ cassette_contents = File.open("test.json") { |f| f.read }
+ cassette_contents.include?("220 mx.google.com ESMTP").should == true
+ end
+
+ it "plays back tcp sessions without opening a real connection" do
+ expect(TCPSocket).to_not receive(:real_open)
+
+ TCR.use_cassette("spec/fixtures/google_smtp") do
+ tcp_socket = TCPSocket.open("aspmx.l.google.com", 25)
+ io = Net::InternetMessageIO.new(tcp_socket)
+ line = io.readline.should include("220 mx.google.com ESMTP")
+ end
+ end
+
+ it "raises an error if the recording gets out of order (i.e., we went to write but it expected a read)" do
+ expect {
+ TCR.use_cassette("spec/fixtures/google_smtp") do
+ tcp_socket = TCPSocket.open("aspmx.l.google.com", 25)
+ io = Net::InternetMessageIO.new(tcp_socket)
+ io.write("hi")
+ end
+ }.to raise_error(TCR::DirectionMismatchError)
+ end
+
+
+ context "multiple connections" do
+ it "records multiple sessions per cassette" do
+ TCR.use_cassette("test") do
+ smtp = Net::SMTP.start("aspmx.l.google.com", 25)
+ smtp.finish
+ smtp = Net::SMTP.start("mta6.am0.yahoodns.net", 25)
+ smtp.finish
+ end
+ cassette_contents = File.open("test.json") { |f| f.read }
+ cassette_contents.include?("google.com ESMTP").should == true
+ cassette_contents.include?("yahoo.com ESMTP").should == true
+ end
+
+ it "plays back multiple sessions per cassette in order" do
+ TCR.use_cassette("spec/fixtures/multitest") do
+ tcp_socket = TCPSocket.open("aspmx.l.google.com", 25)
+ io = Net::InternetMessageIO.new(tcp_socket)
+ line = io.readline.should include("google.com ESMTP")
+
+ tcp_socket = TCPSocket.open("mta6.am0.yahoodns.net", 25)
+ io = Net::InternetMessageIO.new(tcp_socket)
+ line = io.readline.should include("yahoo.com ESMTP")
+ end
+ end
+
+ it "raises an error if you try to playback more sessions than you previously recorded" do
+ expect {
+ TCR.use_cassette("spec/fixtures/multitest-smtp") do
+ smtp = Net::SMTP.start("aspmx.l.google.com", 25)
+ smtp = Net::SMTP.start("mta6.am0.yahoodns.net", 25)
+ smtp = Net::SMTP.start("mta6.am0.yahoodns.net", 25)
+ end
+ }.to raise_error(TCR::NoMoreSessionsError)
+ end
end
end
end
\ No newline at end of file