Ticket #543: Updated PESQ test, sound device used only by one side to avoid contention

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2057 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip-apps/src/test-pjsua/inc_cfg.py b/pjsip-apps/src/test-pjsua/inc_cfg.py
index 78dc04f..6f3219c 100644
--- a/pjsip-apps/src/test-pjsua/inc_cfg.py
+++ b/pjsip-apps/src/test-pjsua/inc_cfg.py
@@ -67,6 +67,8 @@
 	title = ""
 	# params is list containing InstanceParams objects
 	inst_params = []
+	# flag if this tes should be skipped
+	skip = None
 	# list of Expect instances, to be filled at run-time by
         # the test program	
 	process = []
@@ -77,11 +79,13 @@
 	def __init__(	self, 
 			title, 		# Test title
 			inst_params, 	# InstanceParam's as list
+			skip=False,
 			func=None,
 			post_func=None,
 			user_data=None):
 		self.title = title
 		self.inst_params = inst_params
+		self.skip = skip
 		self.test_func = func
 		self.post_func = post_func
 		self.user_data = user_data
diff --git a/pjsip-apps/src/test-pjsua/mod_pesq.py b/pjsip-apps/src/test-pjsua/mod_pesq.py
index 3c1629d..431b312 100644
--- a/pjsip-apps/src/test-pjsua/mod_pesq.py
+++ b/pjsip-apps/src/test-pjsua/mod_pesq.py
@@ -25,7 +25,7 @@
 # PESQ configs
 # PESQ_THRESHOLD specifies the minimum acceptable PESQ MOS value, so test can be declared successful
 PESQ = "tools/pesq.exe"
-PESQ_THRESHOLD = 1.0
+PESQ_THRESHOLD = 3.0
 
 # UserData
 class mod_pesq_user_data:
@@ -38,6 +38,10 @@
 
 # Test body function
 def test_func(t, user_data):
+
+	if len(t.process) == 0:
+		return
+
 	ua1 = t.process[0]
 	ua2 = t.process[1]
 
@@ -93,16 +97,16 @@
 	pesq_out  = pesq_proc.communicate()
 
 	# Parse ouput
-	mo_pesq_out = re.compile("Prediction\s+:\s+PESQ_MOS\s+=\s+(.+)\s*").search(pesq_out[0])
+	mo_pesq_out = re.compile("Prediction[^=]+=\s+([\d\.]+)\s*").search(pesq_out[0])
 	if (mo_pesq_out == None):
 		raise TestError("Failed to fetch PESQ result")
 
 	# Evaluate the similarity value
 	pesq_res = mo_pesq_out.group(1)
 	if (float(pesq_res) >= PESQ_THRESHOLD):
-		endpt.trace("Success, PESQ result=" + pesq_res)
+		endpt.trace("Success, PESQ result = " + pesq_res)
 	else:
-		endpt.trace("Failed, PESQ result=" + pesq_res)
+		endpt.trace("Failed, PESQ result = " + pesq_res)
 		raise TestError("WAV seems to be degraded badly")
 
 
diff --git a/pjsip-apps/src/test-pjsua/run.py b/pjsip-apps/src/test-pjsua/run.py
index 9026f4f..95d6d45 100644
--- a/pjsip-apps/src/test-pjsua/run.py
+++ b/pjsip-apps/src/test-pjsua/run.py
@@ -143,6 +143,10 @@
 	print "Error: no test defined"
 	sys.exit(1)
 
+if script.test.skip:
+	print "Test " + script.test.title + " is skipped"
+	sys.exit(0)
+
 if len(script.test.inst_params) == 0:
 	print "Error: test doesn't contain pjsua run descriptions"
 	sys.exit(1)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/100_defaults.py b/pjsip-apps/src/test-pjsua/scripts-pesq/100_defaults.py
index ffda20f..32454d7 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/100_defaults.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/100_defaults.py
@@ -12,6 +12,6 @@
 		"PESQ defaults pjsua settings",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --play-file wavs/input.16.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --rec-file  wavs/tmp.16.wav --clock-rate 16000 --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-audio --max-calls=1 --rec-file  wavs/tmp.16.wav --clock-rate 16000 --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/101_defaults.py b/pjsip-apps/src/test-pjsua/scripts-pesq/101_defaults.py
new file mode 100644
index 0000000..16c9eff
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/101_defaults.py
@@ -0,0 +1,17 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with default pjsua settings
+test_param = TestParam(
+		"PESQ defaults pjsua settings (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --play-file wavs/input.16.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --rec-file  wavs/tmp.16.wav --clock-rate 16000 --auto-answer 200 --auto-rec")
+		]
+		)
+
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
+
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711a.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711a.py
index bccced6..3360ba9 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711a.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711a.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with PCMA codec
 test_param = TestParam(
 		"PESQ codec PCMA",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec pcma --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec pcma --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-audio --max-calls=1 --add-codec pcma --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711u.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711u.py
index d4955d8..c50dc4f 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711u.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g711u.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with PCMU codec
 test_param = TestParam(
 		"PESQ codec PCMU",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec pcmu --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec pcmu --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --add-codec pcmu --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g722.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g722.py
index e08d523..23f29c7 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g722.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_g722.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with G722 codec
 test_param = TestParam(
 		"PESQ codec G722",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec g722 --clock-rate 16000 --play-file wavs/input.16.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec g722 --clock-rate 16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --add-codec g722 --clock-rate 16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_gsm.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_gsm.py
index 9cf38ff..8aea1ac 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_gsm.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_gsm.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with GSM codec
 test_param = TestParam(
 		"PESQ codec GSM",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec gsm --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec gsm --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --add-codec gsm --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_ilbc.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_ilbc.py
index 596916b..91ac0ae 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_ilbc.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_ilbc.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with iLBC codec
 test_param = TestParam(
 		"PESQ codec iLBC",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec ilbc --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec ilbc --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --add-codec ilbc --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_16000.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_16000.py
index c169d5f..04e9152 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_16000.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_16000.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with Speex/16000 codec
 test_param = TestParam(
 		"PESQ codec Speex WB",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --clock-rate 16000 --add-codec speex/16000 --play-file wavs/input.16.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --clock-rate 16000 --add-codec speex/16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --clock-rate 16000 --add-codec speex/16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_8000.py b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_8000.py
index 5a2606f..3d89bbd 100644
--- a/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_8000.py
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/200_codec_speex_8000.py
@@ -1,18 +1,17 @@
 # $Id$
 #
 from inc_cfg import *
-from config_site import *
 
 ADD_PARAM = ""
 
 if (HAS_SND_DEV == 0):
 	ADD_PARAM += "--null-audio"
 
-# Simple call
+# Call with Speex/8000 codec
 test_param = TestParam(
 		"PESQ codec Speex NB",
 		[
 			InstanceParam("UA1", ADD_PARAM + " --max-calls=1 --add-codec speex/8000 --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup"),
-			InstanceParam("UA2", ADD_PARAM + " --max-calls=1 --add-codec speex/8000 --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+			InstanceParam("UA2", "--null-sound --max-calls=1 --add-codec speex/8000 --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
 		]
 		)
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711a.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711a.py
new file mode 100644
index 0000000..7b71b81
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711a.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with PCMA codec
+test_param = TestParam(
+		"PESQ codec PCMA (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec pcma --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec pcma --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711u.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711u.py
new file mode 100644
index 0000000..d73ef74
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g711u.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with PCMU codec
+test_param = TestParam(
+		"PESQ codec PCMU (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec pcmu --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec pcmu --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g722.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g722.py
new file mode 100644
index 0000000..33be296
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_g722.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with G722 codec
+test_param = TestParam(
+		"PESQ codec G722 (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec g722 --clock-rate 16000 --play-file wavs/input.16.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec g722 --clock-rate 16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_gsm.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_gsm.py
new file mode 100644
index 0000000..922183a
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_gsm.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with GSM codec
+test_param = TestParam(
+		"PESQ codec GSM (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec gsm --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec gsm --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_ilbc.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_ilbc.py
new file mode 100644
index 0000000..ad61f42
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_ilbc.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with iLBC codec
+test_param = TestParam(
+		"PESQ codec iLBC (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec ilbc --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec ilbc --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_16000.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_16000.py
new file mode 100644
index 0000000..32543cc
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_16000.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with Speex/16000 codec
+test_param = TestParam(
+		"PESQ codec Speex WB (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --clock-rate 16000 --add-codec speex/16000 --play-file wavs/input.16.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --clock-rate 16000 --add-codec speex/16000 --rec-file  wavs/tmp.16.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True
diff --git a/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_8000.py b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_8000.py
new file mode 100644
index 0000000..e0049c8
--- /dev/null
+++ b/pjsip-apps/src/test-pjsua/scripts-pesq/201_codec_speex_8000.py
@@ -0,0 +1,15 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Call with Speex/8000 codec
+test_param = TestParam(
+		"PESQ codec Speex NB (RX side uses snd dev)",
+		[
+			InstanceParam("UA1", "--max-calls=1 --add-codec speex/8000 --clock-rate 8000 --play-file wavs/input.8.wav --auto-play-hangup --null-audio"),
+			InstanceParam("UA2", "--max-calls=1 --add-codec speex/8000 --clock-rate 8000 --rec-file  wavs/tmp.8.wav   --auto-answer 200 --auto-rec")
+		]
+		)
+
+if (HAS_SND_DEV == 0):
+	test_param.skip = True