Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Testing - Network Layer Fault Injection in Ruby

Reply
Thread Tools

Testing - Network Layer Fault Injection in Ruby

 
 
James Tucker
Guest
Posts: n/a
 
      10-14-2007
Hi all,

I've yet to find something that fills this hole in my test cases.

Does anyone do this, and if so, what tools do they use?

Thanks,

James.

 
Reply With Quote
 
 
 
 
Eric Hodel
Guest
Posts: n/a
 
      10-14-2007
On Oct 14, 2007, at 13:23 , James Tucker wrote:
> I've yet to find something that fills this hole in my test cases.
> Does anyone do this, and if so, what tools do they use?


I do some of this with custom stubs in memcache-client, see below.
I've also simulated call failures (Errno::whatever) with slightly
more powerful stubs that can take a block to raise the exception.

Here's a fake socket:

class FakeSocket

attr_reader :written, :data

def initialize
@written = StringIO.new
@data = StringIO.new
end

def write(data)
@written.write data
end

def gets
@data.gets
end

def read(arg)
@data.read arg
end

end

And here's a test using it:

def test_flush_all_failure
socket = FakeSocket.new
socket.data.write "ERROR\r\n"
socket.data.rewind
server = FakeServer.new socket
def server.host() "localhost"; end
def server.port() 11211; end

@cache.servers = []
@cache.servers << server

assert_raise MemCache::MemCacheError do
@cache.flush_all
end

assert_equal "flush_all\r\n", socket.written.string
end


--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



 
Reply With Quote
 
 
 
 
James Tucker
Guest
Posts: n/a
 
      10-14-2007
Eric,

Thanks, that's somewhat the route I had started down for some of the units. I probably shouldn't have omitted from my orignal question, the fact that I'm also using OpenSSL.

Some of the specific issues I have been dealing with are caused by a harsh environment (trans-atlantic links and poor ADSL connections), and in some cases this causes irrecoverable blocking. I think I've managed to cover all of the blocking cases, but local tests are hard to implement, as you have to fake things like a full TCP connection timeout. (Which requires not sending and timing out packet data which normally the OS doesn't want you to do).

It's also difficult to find out where the blocks are, as the state renders the app essentially useless, and happens in a different environment than that of the testing / development stage.

As some of this connection state stuff is actually outside of pure ruby, I was somewhat hoping for an external solution, such as a fault injection proxy socket or similar. Do you know of any?

Regards,

James.



Eric Hodel wrote:
> On Oct 14, 2007, at 13:23 , James Tucker wrote:
>> I've yet to find something that fills this hole in my test cases.
>> Does anyone do this, and if so, what tools do they use?

>
> I do some of this with custom stubs in memcache-client, see below. I've
> also simulated call failures (Errno::whatever) with slightly more
> powerful stubs that can take a block to raise the exception.
>
> Here's a fake socket:
>
> class FakeSocket
>
> attr_reader :written, :data
>
> def initialize
> @written = StringIO.new
> @data = StringIO.new
> end
>
> def write(data)
> @written.write data
> end
>
> def gets
> @data.gets
> end
>
> def read(arg)
> @data.read arg
> end
>
> end
>
> And here's a test using it:
>
> def test_flush_all_failure
> socket = FakeSocket.new
> socket.data.write "ERROR\r\n"
> socket.data.rewind
> server = FakeServer.new socket
> def server.host() "localhost"; end
> def server.port() 11211; end
>
> @cache.servers = []
> @cache.servers << server
>
> assert_raise MemCache::MemCacheError do
> @cache.flush_all
> end
>
> assert_equal "flush_all\r\n", socket.written.string
> end
>
>
> --
> Poor workers blame their tools. Good workers build better tools. The
> best workers get their tools to do the work for them. -- Syndicate Wars
>
>
>
>



 
Reply With Quote
 
Eric Hodel
Guest
Posts: n/a
 
      10-15-2007
On Oct 14, 2007, at 14:52 , James Tucker wrote:
> Thanks, that's somewhat the route I had started down for some of
> the units. I probably shouldn't have omitted from my orignal
> question, the fact that I'm also using OpenSSL.
>
> Some of the specific issues I have been dealing with are caused by
> a harsh environment (trans-atlantic links and poor ADSL
> connections), and in some cases this causes irrecoverable blocking.
> I think I've managed to cover all of the blocking cases, but local
> tests are hard to implement, as you have to fake things like a full
> TCP connection timeout. (Which requires not sending and timing out
> packet data which normally the OS doesn't want you to do).
>
> It's also difficult to find out where the blocks are, as the state
> renders the app essentially useless, and happens in a different
> environment than that of the testing / development stage.
>
> As some of this connection state stuff is actually outside of pure
> ruby, I was somewhat hoping for an external solution, such as a
> fault injection proxy socket or similar. Do you know of any?


I don't I've not needed that level of fault tolerance.

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
business layer, data access layer , presentation layer for asp.net using C#.net Dhananjay ASP .Net 1 12-18-2006 11:35 PM
how to get layer 2 trough layer 3 ? C Cant Cisco 11 04-19-2005 05:07 PM
Layer 4 device on a Layer 3 switch Warrick FitzGerald Cisco 5 02-24-2004 03:45 PM
bridge / layer 2 switch / layer 3 switch Joel M. Baldwin Cisco 2 11-06-2003 11:19 PM
difference b/w layer 2 switch and layer 3 switch praveen Cisco 1 10-22-2003 07:19 AM



Advertisments