<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Rimay Technologies, LLC»  – Rimay Technologies, LLC</title>
	
	<link>http://rimaytech.com</link>
	<description>Automating telephony testing.</description>
	<lastBuildDate>Tue, 10 Aug 2010 14:21:42 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rimaytech" /><feedburner:info uri="rimaytech" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Quick Fix for CID Test Failure</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/4tiz2hXXbYc/</link>
		<comments>http://rimaytech.com/quick-fix-cid-test-failure/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 14:21:42 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Tests]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[caller-id]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=303</guid>
		<description><![CDATA[We show how to change the expected "anonymous" caller id string in the config file, instead of by modifying the call script. <p><a href="http://rimaytech.com/quick-fix-cid-test-failure/" title="Continue reading Quick Fix for CID Test Failure">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>Our *67 script failed when run in an interop scenario for the first time:</p>
<p><code></p>
<pre>
bash$ a_calls_b.py
a_calls_b
a_calls_bcd
a_calls_b_hangup
a_calls_b_ring_timeout
a_calls_b_anon_cid
ERROR: caller id string match error. Received 'anonymous', looking for 'Anonymous'. cid_mode=cid_anonymous
run_all_tests:17
 inner:45
  a_calls_b_anon_cid:118
   call:292
    place_call:353
     _check_cid:508
a_calls_b_terminator_hangup
</pre>
<p></code></p>
<p>Ok, that&#8217;s a pretty obvious failure &#8212; our expected CID string should have been all lowercase. No need to modify the script, just edit /etc/rimay/callgen.conf. Find this line:</p>
<p><code><br />
[DEFAULT]<br />
caller_id_anonymous_call_string = Anonymous<br />
</code></p>
<p>and change it to this:</p>
<p><code><br />
[DEFAULT]<br />
caller_id_anonymous_call_string = anonymous<br />
</code></p>
<p>Rerun the test:</p>
<p><code><br />
bash$ a_calls_b.py  a_calls_b_anon_cid<br />
a_calls_b_anon_cid<br />
bash$<br />
</code></p>
<p>Test passes!</p>
<p>This is in keeping with the overall strategy of keeping switch-specific details and behavior in the config file instead of in the scripts. As we can see here, it makes porting to a new interop scenario much easier.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=4tiz2hXXbYc:ttrYOXcEYVQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=4tiz2hXXbYc:ttrYOXcEYVQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=4tiz2hXXbYc:ttrYOXcEYVQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=4tiz2hXXbYc:ttrYOXcEYVQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=4tiz2hXXbYc:ttrYOXcEYVQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=4tiz2hXXbYc:ttrYOXcEYVQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/4tiz2hXXbYc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/quick-fix-cid-test-failure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/quick-fix-cid-test-failure/</feedburner:origLink></item>
		<item>
		<title>Tunable Call Script Delays on the Rimay Call Generator</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/ACNYDDb2TxA/</link>
		<comments>http://rimaytech.com/tunable-call-timing-delays/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 14:24:12 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[test-strategy]]></category>
		<category><![CDATA[test-suite]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=161</guid>
		<description><![CDATA[A tricky aspect of having call testing work on different switches: different delays and timeouts are required throughout the script library. <p><a href="http://rimaytech.com/tunable-call-timing-delays/" title="Continue reading Tunable Call Script Delays on the Rimay Call Generator">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>One tricky aspect of getting automated call testing to work properly across different switches and deployments is that different delays and timeouts are required in various places throughout the script library. This is even harder when targeting different international phone systems.</p>
<p>For example, when we take a phone port off-hook, we sometimes have to be careful to avoid immediately performing operations on that port. It needs a slight delay when we&#8217;re on a VoIP system to give the RTP stream a chance to start. Otherwise if we slam it with DTMF right away we&#8217;ll lose a digit or two. On a pure POTS system, we can reduce the delay.</p>
<p>Sprinkling these delays throughout the script libraries would be a nightmare. When we port to a new deployment type, we&#8217;d have to hunt down all of the places with delays and tweak them individually &#8212; and then somehow maintain the two versions.</p>
<p>Instead we maintain the delays in a configuration file on the RCG-4001. The different delays are available as properties on the PhonePort objects used by the scripts in our suite. When we need to port to a new switch, we can create a new config file and tweak the delays in one place. This avoids tedious searching through scripts and keeps all of the tuning centralized.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=ACNYDDb2TxA:MkX2AuN5Va0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=ACNYDDb2TxA:MkX2AuN5Va0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=ACNYDDb2TxA:MkX2AuN5Va0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=ACNYDDb2TxA:MkX2AuN5Va0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=ACNYDDb2TxA:MkX2AuN5Va0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=ACNYDDb2TxA:MkX2AuN5Va0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/ACNYDDb2TxA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/tunable-call-timing-delays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/tunable-call-timing-delays/</feedburner:origLink></item>
		<item>
		<title>Troubleshooting Telephony Failures</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/kNyewuP-AsA/</link>
		<comments>http://rimaytech.com/troubleshooting-telephony-failures/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 16:12:57 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">https://rimaytech.com/wp/?p=15</guid>
		<description><![CDATA[When a telephony call feature is failing, there are several possible categories of causes. The early stages of troubleshooting should try to eliminate some of these broad categories as causes (or find the cause along the way, whichever happens first). <p><a href="http://rimaytech.com/troubleshooting-telephony-failures/" title="Continue reading Troubleshooting Telephony Failures">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>When a telephony call feature is failing, there are several possible categories of causes:</p>
<ul>
<li>physical (e.g. unplugged cable)</li>
<li>misconfiguration (e.g. feature not enabled)</li>
<li>software defect (e.g. mishandled scenario)</li>
<li>protocol exchange (e.g. interpreting a field value differently)</li>
<li>network / transport (e.g. firewall)</li>
</ul>
<p>The early stages of troubleshooting should try to eliminate some of these broad categories as causes (or find the cause along the way, whichever happens first).</p>
<p>First, and usually easiest, is to make sure it is not a network connectivity problem. Ping is your friend. If you can&#8217;t ping the equipment involved in the call, you may have a physical problem. Are the cables plugged in? Is everything powered on?</p>
<p>Does any voice work between the two endpoints? If you&#8217;re running automated tests, is your <a href="http://rimaytech.com/rcg-4001/">call generator</a> reporting failures for every test in the suite or just for a particular feature? Quick A-&gt;B calls between all involved parties proves a lot. Do other features work, especially similar features and those that exercise the same lines and features? If you can&#8217;t make a simple two way voice call between each of the endpoint pairings involved, there&#8217;s a more fundamental problem &#8212; first troubleshoot the simpler version of the problem before tackling the more complex feature. If basic calls work but not advanced features, ensure the failing features are enabled on the switch and activated for the lines in question.</p>
<p>When you have eliminated network and physical problems as the cause, check the configuration. Does the feature work on any lines? Do logs indicate errors like &#8220;permission denied&#8221; or &#8220;feature unavailable&#8221;? Do you get error tones or announcement messages? If the feature works on other lines, compare the config of the working lines to the non-working lines.</p>
<p>Once you&#8217;re sure that neither of those categories are the culprit, it&#8217;s time for deeper digging. If you have access to the entire transport network, a network traffic capture can be very useful. (Even if you only have visibility into part of the network, captures can still help with troubleshooting but there are more limits to what you can uncover.) If at all feasible, it&#8217;s best to capture all traffic, not just the protocol you&#8217;re expecting to troubleshoot (e.g. SIP or MGCP). I&#8217;ve seen failures caused by a misconfigured router that was sending ICMP redirects all over the place. This won&#8217;t show up in a filtered capture.</p>
<p>Armed with a traffic capture, start looking for the unexpected. ARP storms, loads of ICMP redirects, and rapid SIP reregistrations are all things I&#8217;ve seen as symptoms that point to the real problem. (These were mostly misconfigs that weren&#8217;t caught in the previous troubleshooting step.)</p>
<p>In the absence of anything unusual, look at the traffic that makes up the call trace. Filtering is useful here, as are tools that generate a graphical view of the call flow. First look for error packets. If present, these usually have a specific enough error code or even a text explanation of why the call is failing. If there are no error packets, check that the call is being set up as expected. Is audio fully enabled or is an endpoint simply idled? Check for voice path &#8212; is RTP flowing in both directions as expected? Does the RTP payload match what is expected (and do both directions match each other)? (If not RTP, then whatever equivalent protocol is in your trace.)</p>
<p>When signaling and RTP look good, it is often useful to extract the audio streams. In wireshark, you can choose to extract either direction or both directions. I usually start with both directions, and then listen on my PC&#8217;s speakers. Problems with audio here will point you to one end of the other. Often I have to backtrack to examining configs or traffic for that end of the connection.</p>
<p>At this point I&#8217;ve usually found the cause of the problem. If not, it&#8217;s time to ask for help. I&#8217;ve gotten help from coworkers, partner/vendor tech support, and occasionally partner/vendor developers. Another set of eyes looking at the problem is helpful. Sometimes just explaining the issue and symptoms to a new person will trigger an &#8220;Aha!&#8221; moment.</p>
<p>Do you have any troubleshooting techniques I&#8217;ve missed? Leave a comment. Thanks!</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=kNyewuP-AsA:1KYyEPS1B4I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=kNyewuP-AsA:1KYyEPS1B4I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=kNyewuP-AsA:1KYyEPS1B4I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=kNyewuP-AsA:1KYyEPS1B4I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=kNyewuP-AsA:1KYyEPS1B4I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=kNyewuP-AsA:1KYyEPS1B4I:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/kNyewuP-AsA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/troubleshooting-telephony-failures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/troubleshooting-telephony-failures/</feedburner:origLink></item>
		<item>
		<title>How to Write Test Scripts for Speed Dial 8</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/7iHdLWe7Gkc/</link>
		<comments>http://rimaytech.com/howto-script-speed-dial/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 16:08:37 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[speed-dial]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=277</guid>
		<description><![CDATA[Speed dial 8 is a call feature that allows a subscriber to dial a number using a reduced number of dialed digits. Speed dial is generally a digit between 2 and 9 followed by "#" (pound or hash). Speed dial 8 numbers are usually set by dialing *74 and following the prompts.

Let's outline what the test scripts for speed dial 8 would look like. <p><a href="http://rimaytech.com/howto-script-speed-dial/" title="Continue reading How to Write Test Scripts for Speed Dial 8">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>Speed dial 8 is a call feature that allows a subscriber to dial a number using a reduced number of dialed digits. Speed dial is generally a digit between 2 and 9 followed by &#8220;#&#8221; (pound or hash). Speed dial 8 numbers are usually set by dialing *74 and following the prompts.</p>
<p>Let&#8217;s outline what the test scripts for speed dial 8 would look like:</p>
<p>Once again we follow the <a href="/the-seven-step-strategy-for-testing-telephony-features/">basic strategy for call tests</a>:</p>
<ol>
<li>We will use lines A, B, C, and D.</li>
<li>A will be the originator and the line that uses speed dial.</li>
<li>The happy path for using speed dial is A dials 2#, where 2 is configured to call B, B rings, and A-B have conversation. The happy path for configuring a number is A dials *74, waits for the prompt, enters 2 to set a number for speed dial 2, waits for the prompt (usually stutter tone, could be an announcement), dials the phone number for B, and (sometimes, but not always required) dials # to indicate the end of the phone number. These will be similar for calls to C and D.</li>
<li>The first flow &#8212; using speed dial &#8212; is as easy as it gets. Just dial &#8220;2#&#8221; using <code>CallGenerator</code>&#8217;s <code>call()</code> method. The second flow requires waiting for prompts. Be careful here not to embed switch-specific delays into your script. The <a href="/rcg-4001/">RCG-4001</a> uses a global configuration file to collect all of the delays in one place so that you can easily port your scripts to another switch by changing the delays in the config file. Your script will dial &#8220;*74&#8243;, wait, dial &#8220;2#&#8221;, wait, dial the number for B, dial # if required by the switch, wait, hang up.</li>
<li>Variants would be unconfiguring a speed dial number, configuring  7, 10, 1+10-digit, and international numbers, filling all the speed dial slots, reconfiguring a used slot, dialing using an empty slot, and dialing using each slot when they are all configured.</li>
<li>Edge cases include using an invalid speed dial 8 slot (0, 1, 20, etc), speed dialing an unconfigured slot, entering too many digits for the dialed phone number, too few digits, letting a timeout occur at the dialed number or slot prompt, or hanging up at the dialed number or slot prompt.</li>
<li>A crazy variant would be to configure a VSC as a speed dial number. For example, *70 (cancel call waiting). Maybe this is supposed to be allowed, maybe it&#8217;s not, check your spec. If it&#8217;s allowed, can you configure a speed dial that unconfigures itself? Another crazy variant is to use speed dial when dialing the third leg of a three way call. (This should be allowed by the switch.)</li>
</ol>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=7iHdLWe7Gkc:KlkaPh5QbCg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=7iHdLWe7Gkc:KlkaPh5QbCg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=7iHdLWe7Gkc:KlkaPh5QbCg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=7iHdLWe7Gkc:KlkaPh5QbCg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=7iHdLWe7Gkc:KlkaPh5QbCg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=7iHdLWe7Gkc:KlkaPh5QbCg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/7iHdLWe7Gkc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/howto-script-speed-dial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/howto-script-speed-dial/</feedburner:origLink></item>
		<item>
		<title>How to Force More Failures</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/MYuAnzBoesM/</link>
		<comments>http://rimaytech.com/force-failures/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 15:35:48 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[chaining]]></category>
		<category><![CDATA[stacking]]></category>
		<category><![CDATA[test-strategy]]></category>
		<category><![CDATA[test-tactics]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=163</guid>
		<description><![CDATA[The bad news is that the bugs that are left are hard to find. Forcing external failures during call generator testing will help flush them out. <p><a href="http://rimaytech.com/force-failures/" title="Continue reading How to Force More Failures">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve taught your <a href="/rcg-4001/">call generator</a> all kinds of tricks, <a href="/how-many-call-features-do-you-have-to-stack-before-you-find-a-failure/">stacking</a> and <a href="/chaining-call-features-or-the-hot-potato-test/">chaining</a> call features left and right. In the process you&#8217;ve found (and fixed!) tons of bugs. This has built up a huge regression test suite.</p>
<p>But running this test suite regularly means that you&#8217;re not finding many bugs any more. This is good news (the product is better) and bad news (there are probably still more bugs to find). The really bad news is that the bugs that are left can be really hard to find, and often require stepping outside your current test framework.</p>
<p>We&#8217;ve talked about <a href="/call-generator-robustness-testing/">forcing errors from the call generator</a>, and making sure that the DUT can handle them &#8212; repeatedly. This builds on that practice and expands it beyond the call generator and into your test network.</p>
<h3>What&#8217;s the Worst Thing That Could Happen?</h3>
<p>This is the question to ask.</p>
<ol>
<li>What is the worst thing that could happen internally? Perhaps a memory leak that uses up all available memory. Or the internal storage (disk, flash) fills up. What if a fan fails and the heat builds up?</li>
<li>What is the worst thing that could happen externally? Loss of connection to the network.  Power failure. Network storm.</li>
<li>What could a malicious person do? Send a flood. Send specially crafted packets.</li>
</ol>
<p>Now take the answers to those questions, and make the worst thing happen.</p>
<ol>
<li>If you&#8217;re testing a VoIP gateway, disconnect it from the network mid-call.</li>
<li>Take that VoIP gateway and run a longevity test. Now run a script that toggles the port on the network switch on-off every 2 minutes. (Don&#8217;t have a managed switch? Get a <a href="http://www.servertech.com/products/switched-pdus/switched-pdu-cw-2h-ipm-2">managed power supply</a> and just toggle power to your hub.)</li>
<li>Using the same gateway and longevity test, this time use your managed power supply to kill power to the gateway at random intervals.</li>
<li>Use a network traffic generator to simulate a network storm.</li>
<li>Write scripts to generate some of those &#8220;specially crafted packets&#8221; that might do bad things.</li>
<li>Cheat if you can: examine the code and look for error paths. Do whatever it takes to hit those error paths. (Hint: this is what malicious people do.)</li>
</ol>
<p>Go do your worst.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=MYuAnzBoesM:QaVSJ-zpsnE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=MYuAnzBoesM:QaVSJ-zpsnE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=MYuAnzBoesM:QaVSJ-zpsnE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=MYuAnzBoesM:QaVSJ-zpsnE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=MYuAnzBoesM:QaVSJ-zpsnE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=MYuAnzBoesM:QaVSJ-zpsnE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/MYuAnzBoesM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/force-failures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/force-failures/</feedburner:origLink></item>
		<item>
		<title>Induce Failures by Varying the DTMF Pulse Width</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/NpWPxU-LT2s/</link>
		<comments>http://rimaytech.com/dtmf-pulse-width/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 16:08:23 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[test-suite]]></category>
		<category><![CDATA[test-tactics]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=138</guid>
		<description><![CDATA[Looking for ideas to find bugs? Configure your call generator to run your entire test suite with DTMF tones near the minimum width. <p><a href="http://rimaytech.com/dtmf-pulse-width/" title="Continue reading Induce Failures by Varying the DTMF Pulse Width">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s something to try if you&#8217;re looking for ideas to find bugs: configure your call generator to run your entire test suite (a) with DTMF tones near the minimum width, and then (b) with very long (one or two second) DTMF tones. You can also try varying the timing between digits &#8212; use both the minimum possible gap and a long delay.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=NpWPxU-LT2s:riegbPv34rM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=NpWPxU-LT2s:riegbPv34rM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=NpWPxU-LT2s:riegbPv34rM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=NpWPxU-LT2s:riegbPv34rM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=NpWPxU-LT2s:riegbPv34rM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=NpWPxU-LT2s:riegbPv34rM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/NpWPxU-LT2s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/dtmf-pulse-width/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/dtmf-pulse-width/</feedburner:origLink></item>
		<item>
		<title>Use a Call Generator for Robustness Testing</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/fw1A0iTZzkU/</link>
		<comments>http://rimaytech.com/call-generator-robustness-testing/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 14:23:28 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[test-strategy]]></category>
		<category><![CDATA[test-suite]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=157</guid>
		<description><![CDATA[Sometimes a feature is broken in a way that is not immediately detectable by the call generator. For instance, let's say some call flow causes a memory leak in the switch. The call will work hundreds or thousands of times, but at some point the entire switch will stop working — and the cause won't be obvious.

You want your switch to crash and burn in your lab, not in the field. Let's look at three types of robustness testing. <p><a href="http://rimaytech.com/call-generator-robustness-testing/" title="Continue reading Use a Call Generator for Robustness Testing">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>We know that call generators are handy for finding <a title="How many call features do you have to stack before your switch falls down?" href="http://rimaytech.com/how-many-call-features-do-you-have-to-stack-before-you-find-a-failure/">call flows that break with odd combinations of features</a>.</p>
<p>Sometimes a feature is broken in a way that the call generator can&#8217;t detect right away. For instance, let&#8217;s say the device under test (DUT) leaks memory with a given call flow. The call will work hundreds or thousands of times, but at some point the entire DUT may stop working — and the cause won&#8217;t be obvious.</p>
<p>You want the DUT to melt in your lab, not on your customer. Let&#8217;s look at three types of robustness testing.</p>
<h3>Load Testing</h3>
<p>Load testing is typically performed by bulk call generators with many ports. They specialize in generating high call volume to place a high load on the DUT and verify that it is robust under heavy load. For lab testing, a call volume beyond the rated capacity should be used to verify that the DUT degrades gracefully (i.e. does not crash) under stress. If you are testing a small CPE like a one or two port ATA, then a <a title="RCG-4001 Call Generator" href="http://rimaytech.com/rcg-4001/">small port-count call generator</a> can do the job. <img class="alignright size-medium wp-image-251" title="A real crash" src="http://rimaytech.com/wp-content/uploads/2009/12/car_crash1-300x225.jpg" alt="Automobile crash test." width="300" height="225" /></p>
<p>Much of the load testing I&#8217;ve seen at various companies consists of simple call flows and does not probe the behavior of the DUT with more &#8220;interesting&#8221; calls under load. This is a missed opportunity for finding bugs. <strong>Load tests should include a variety of call flows.</strong></p>
<h3>Longevity Testing</h3>
<p>With longevity testing we want to find out if the DUT can survive a large number of calls that occur at a reasonable rate. For general longevity testing you may want to randomize the test suite so that — as described above — &#8220;interesting&#8221; sets of call flows occur throughout the test.</p>
<p>The point of longevity testing is not to overload the DUT but rather to subject the DUT to a reasonable load over a long period of time. (Where &#8220;reasonable&#8221; is defined for the DUT according to the device&#8217;s performance goals.)</p>
<p>The end goal is to find defects that occur after the DUT has processed a huge number of calls over a period of days or even weeks. Again, too often longevity testing uses a single, simple call flow. It makes sense to perform longevity testing of happy-path calls, but every once in a while it&#8217;s good to mix it up and make sure all of the boundary cases are handled well.</p>
<h3>Repeated Forced Errors</h3>
<p>As someone who has written and read thousands of lines of code I know that the best place to find bugs is in the dark corners of the error handling code. It doesn&#8217;t get exercised often (if at all), so it&#8217;s likely that it is not quite right.</p>
<p>As mentioned above, these failures may not be apparent right away. It may take large numbers of iterations before they rear their head, and then the symptoms may not point to the defect. You can make it easier to diagnose the failure by repeating a test that forces a particular error to occur.</p>
<p>&#8220;Errors&#8221; too can include multiple classes of errors, including some that can&#8217;t be induced at the FXO interface. You may have to create some clever test scripts.</p>
<p>For example, let&#8217;s say the DUT is an ATA. Connect the ATA&#8217;s analog line to the <a title="RCG-4001 Call Generator" href="http://rimaytech.com/rcg-4001/">RCG-4001</a>, and provision the ATA to use the RCG as a switch. On the RCG, your script is the SIP proxy, but it does not always behave properly. Perhaps it drops contact with the ATA, or maybe it returns a 4xx or 5xx response at some point in the flow. If you run this test repeatedly you may find that your production, commercial-quality stack is not as robust to these errors as it should be.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=fw1A0iTZzkU:TKqr0TmJqG8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=fw1A0iTZzkU:TKqr0TmJqG8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=fw1A0iTZzkU:TKqr0TmJqG8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=fw1A0iTZzkU:TKqr0TmJqG8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=fw1A0iTZzkU:TKqr0TmJqG8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=fw1A0iTZzkU:TKqr0TmJqG8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/fw1A0iTZzkU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/call-generator-robustness-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/call-generator-robustness-testing/</feedburner:origLink></item>
		<item>
		<title>Three Ways Call Generators Help Kill Bugs</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/TMuOpA08sCE/</link>
		<comments>http://rimaytech.com/call-generators-kill-bugs/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:09:56 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[test-suite]]></category>

		<guid isPermaLink="false">http://rimaytech.com/?p=154</guid>
		<description><![CDATA[If you can reproduce the bug by hand, you can script the call generator to force it. Even if it is hard to reproduce reliably, it may be easy to force it every time with the help of automation. <p><a href="http://rimaytech.com/call-generators-kill-bugs/" title="Continue reading Three Ways Call Generators Help Kill Bugs">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<h3>Script Every Bug Report to Build a Complete Regression Test Suite</h3>
<p>Developers will find it handy to use their call generator to reproduce bugs reported by customers. For easy-to-reproduce bugs (i.e. those you can reproduce by hand), this may seem like overkill. However, when you write a script you benefit in several ways:</p>
<ul>
<li>Writing a test script to trigger the error helps build a regression test suite.</li>
<li>You know when you&#8217;ve fixed the bug because the script passes.</li>
<li>The script is precise documentation of the actions that caused the error.</li>
</ul>
<h3>Force Timing Bugs Out into the Open</h3>
<p>When bugs are difficult to reproduce because of timing a test script can be a life saver.</p>
<p>When you test by hand, you have accuracy of maybe half a second. The call generator can force timing to an accuracy of tens of milliseconds.</p>
<p>With a script that makes repeated calls and varies the timing by 50 ms on each call, you can find the exact timing that causes the error. Just having the ability to force the error on every call saves valuable debugging time. Knowing the timing may also allow you to review your design or source code for places that use this timing.</p>
<h3>Be the Squeaky Wheel</h3>
<p>If you are an Installer or interop tester (e.g. IOT labs), you may be able to get faster response times. Try providing a script that precisely reproduces the next bug you report.</p>
<p>When faced with the choice of fixing an obvious bug or chasing down a hard-to-reproduce issue, developers and their managers are usually going to pick the obvious bug. (Developers can spend weeks trying to solve problems like this without anything to show for their efforts. I speak from experience!) If you can provide the obvious bug report, you can jump to the front of the line.</p>
<h3>Bottom Line</h3>
<p><strong></strong>If you can reproduce a bug by hand, the call generator can too. And hard to reproduce bugs may become easy with the help of automation.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=TMuOpA08sCE:8JJuZNwNVr0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=TMuOpA08sCE:8JJuZNwNVr0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=TMuOpA08sCE:8JJuZNwNVr0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=TMuOpA08sCE:8JJuZNwNVr0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=TMuOpA08sCE:8JJuZNwNVr0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=TMuOpA08sCE:8JJuZNwNVr0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/TMuOpA08sCE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/call-generators-kill-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/call-generators-kill-bugs/</feedburner:origLink></item>
		<item>
		<title>The Secret to Managing the Voice Test Matrix Explosion</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/sFumNQ5MUuo/</link>
		<comments>http://rimaytech.com/managing-voice-test-matrix-explosion/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 14:14:42 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-generator]]></category>
		<category><![CDATA[test-strategy]]></category>
		<category><![CDATA[test-suite]]></category>

		<guid isPermaLink="false">https://rimaytech.com/wp/?p=17</guid>
		<description><![CDATA[There are a huge number of possible test cases for even a relatively simple telephony feature when multiple interop combinations are involved. How do we manage all of this? <p><a href="http://rimaytech.com/managing-voice-test-matrix-explosion/" title="Continue reading The Secret to Managing the Voice Test Matrix Explosion">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>There are a huge number of possible test cases for even a relatively simple telephony feature when multiple interop combinations are involved.</p>
<p>Look at a simple two-way voice call: just pick up the phone (&#8220;A&#8221;), dial a number, waiting for ringing, answer (&#8220;B&#8221;), and make sure you can talk. Easy, right?</p>
<h3>The Baseline Test</h3>
<p>First we have different possibilities for the identity of A and B:</p>
<ol>
<li>A and B are both &#8220;onnet&#8221;</li>
<li>A is &#8220;offnet&#8221;, B is onnet.</li>
<li>B is offnet, A is onnet.</li>
</ol>
<p>Then we have a few different possible call flows:</p>
<ol>
<li>B answers after one ring (the &#8220;happy path&#8221;).</li>
<li>B is busy.</li>
<li>B does not answer. (A hangs up after a few rings.)</li>
<li>B picks up after half a ring (mid-ring).</li>
<li>B picks up after two rings.</li>
</ol>
<p>There are probably more conditions we can come up with, but lets look at these. The first grouping gives three different tests to run, which isn&#8217;t too bad. The five call flows in the second grouping make for 15 total test combinations. At about 30 seconds per call, that&#8217;s 7.5 minutes to run a suite for this feature.</p>
<h3>Mix it Up With Different Gear</h3>
<p>It gets worse quickly if you&#8217;re an interop tester working with various models of gear.</p>
<ol>
<li>Cisco ATA</li>
<li>Netopia ATA</li>
</ol>
<ol>
<li>Asterisk</li>
<li>Avaya</li>
<li>3Com</li>
</ol>
<p>The 15 tests in the matrix mentioned above become 30 when there are two different adapters to test, and that&#8217;s assuming a homogenous network. If the Cisco and Netopia are on the same net, there are four combinations of &#8220;A &#8211; B&#8221; to test, meaning 60 tests to run.<strong> <span style="font-weight: normal;">Three possible switches would mean 180 tests. Now we&#8217;re talking about an hour and a half to run the test suite</span></strong>, longer if you&#8217;ve got to change physical connections to your call generator. (VoIP gateway testers have an advantage that the connections are virtual and &#8220;changing&#8221; them is software controlled.)</p>
<h3>Overload!</h3>
<p>Whoa! That&#8217;s too much to think about. We haven&#8217;t even tested anything <em>interesting</em> yet. No feature interactions, caller id/name, call waiting, various flavors of forwarding, etc.</p>
<p>Three-line features build bigger test matrices even faster: a three-way-call test with just five flows and the same set of equipment above gives 840 combinations to test &#8212; seven hours of testing for a single feature. And TWC will definitely have more than five flows! A dozen flows would take over a dozen hours to test.</p>
<p>How do we manage all of this? The typical technique I&#8217;ve seen is to ignore most of the matrix and focus on the most common flows with the most common combinations of features. This makes a lot of sense from one perspective: if something is wrong with the common case, then there&#8217;s a real problem. Also, this probably represents most of your customer base.</p>
<p>Looking at it another way, though, it doesn&#8217;t make much sense. If the point of testing is to find problems, then we should define a &#8220;successful&#8221; test case as one that finds an error. Through this lens, the usual technique looks like a lot of wasted time repeatedly running the same batch of passing (&#8220;unsuccessful&#8221;) tests. It would be more profitable to instead run the odd, boundary probing, edge cases. Here, we can have a high comfort level that if these are passing the common cases are passing too.</p>
<h3>Simplify and Find More Bugs</h3>
<p>This implies that we can whittle down the matrix to something reasonable:</p>
<ol>
<li>Happy path, Cisco to Netopia, 2 rings, Asterisk.</li>
<li>Happy, offnet to Netopia, 1 ring, Avaya.</li>
<li>Happy, Cisco to offnet, half ring, 3Com.</li>
<li>Happy, Netopia to Cisco onnet, 2 rings, Asterisk.</li>
<li>Happy, offnet to Cisco, 1 ring, Avaya.</li>
<li>Happy, Netopia to offnet, half ring, 3Com.</li>
<li>Busy, Cisco to Netopia, Asterisk.</li>
<li>Busy, Netopia to Cisco, Avaya.</li>
<li>Busy, Cisco to offnet, 3Com.</li>
<li>Busy, Netopia to offnet, Asterisk.</li>
<li>No Answer, Cisco to offnet, Avaya.</li>
<li>No Answer, Netopia to Cisco, 3Com</li>
</ol>
<p>This reduces the set to 1/15 of the original cases. It is not comprehensive but it does touch all the devices and all the flows. When the situation calls for comprehensive testing &#8212; maybe for interop against a new switch &#8212; you&#8217;d want to run the full matrix. I chose the tests for the reduced test suite on an intuitive basis, just picking combinations that touched each matrix dimension. If you know through experience that certain combinations are troublesome, make sure they get a spot in the reduced test suite &#8212; possibly bumping another less likely test case.</p>
<p>Lastly, if you&#8217;re running tests daily, say on new software builds, you can achieve full matrix coverage over time by running different reduced suites on your call generator every day. Partition the full matrix into N distinct subsets, where N is the number of days to spread out the tests. Each subset should touch all the flows, but it may not use all of the equipment &#8212; you can connect new equipment to the call generator each day to achieve the full set of combinations.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=sFumNQ5MUuo:nRJp9eyu10E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=sFumNQ5MUuo:nRJp9eyu10E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=sFumNQ5MUuo:nRJp9eyu10E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=sFumNQ5MUuo:nRJp9eyu10E:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=sFumNQ5MUuo:nRJp9eyu10E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=sFumNQ5MUuo:nRJp9eyu10E:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/sFumNQ5MUuo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/managing-voice-test-matrix-explosion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/managing-voice-test-matrix-explosion/</feedburner:origLink></item>
		<item>
		<title>Chaining Call Features, or: The Hot Potato Test</title>
		<link>http://feedproxy.google.com/~r/rimaytech/~3/RjYrbJLcfzE/</link>
		<comments>http://rimaytech.com/chaining-call-features-or-the-hot-potato-test/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 04:41:40 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[call-script]]></category>
		<category><![CDATA[chaining]]></category>

		<guid isPermaLink="false">https://rimaytech.com/wp/?p=21</guid>
		<description><![CDATA[The distinction between chaining and stacking is maybe too subtle but I think of them differently when planning tests. "Chaining" is what I call it when a test repeatedly invokes a single feature in a single call flow. <p><a href="http://rimaytech.com/chaining-call-features-or-the-hot-potato-test/" title="Continue reading Chaining Call Features, or: The Hot Potato Test">Click here to read this article...</a></p>]]></description>
			<content:encoded><![CDATA[<p>The distinction between chaining and <a title="How many call features do you have to stack before your switch falls down?" href="/how-many-call-features-do-you-have-to-stack-before-you-find-a-failure/">stacking</a> is maybe too subtle but I think of them differently when planning tests. &#8220;Chaining&#8221; is what I call it when a test repeatedly invokes a single feature in a single call flow.</p>
<p>For example, consider call transfer. This is what I call the &#8220;Hot Potato&#8221; test:</p>
<ol>
<li>A calls B, A-B talk.</li>
<li>B transfers A to C, A-C talk.</li>
<li>C transfers A to D, A-D talk.</li>
<li>D transfers A to B, A-B talk.</li>
<li>Repeat as many times as desired, without B hanging up during the test.</li>
</ol>
<p>Chaining tests are useful to run on your call generator overnight or over a weekend as longevity tests, probing to see if we can detect a resource leak or similar failure.</p>
<p>The Hot Potato test is real-world too, as I&#8217;m sure you&#8217;ve experienced calls like this to certain customer &#8220;service&#8221; hotlines.</p>
<p>Bonus points for chaining and stacking at the same time. When you have built up a good script library, new combinations of features aren&#8217;t hard to mash together in a new script.</p>
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rimaytech?a=RjYrbJLcfzE:Kiwl6ub0wdQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=RjYrbJLcfzE:Kiwl6ub0wdQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rimaytech?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=RjYrbJLcfzE:Kiwl6ub0wdQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=RjYrbJLcfzE:Kiwl6ub0wdQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rimaytech?a=RjYrbJLcfzE:Kiwl6ub0wdQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rimaytech?i=RjYrbJLcfzE:Kiwl6ub0wdQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/rimaytech/~4/RjYrbJLcfzE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rimaytech.com/chaining-call-features-or-the-hot-potato-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rimaytech.com/chaining-call-features-or-the-hot-potato-test/</feedburner:origLink></item>
	</channel>
</rss>
