From a43380181e8bdaedaf08e59c73b9299a56e8fbcc Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 4 Nov 2013 16:32:30 +0100 Subject: [PATCH 1/6] Fix auth infos edition + updated belle-sip/linphone (needed for fix) --- src/org/linphone/LinphonePreferences.java | 64 +++++++++++++++++------ submodules/belle-sip | 2 +- submodules/linphone | 2 +- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index 2a8ab1f43..fd64106bb 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -106,23 +106,45 @@ public class LinphonePreferences { } private LinphoneAuthInfo getAuthInfo(int n) { - LinphoneAuthInfo[] authsInfos = getLc().getAuthInfosList(); - // In case you have multiple proxy configs with same auth info - if (n > 0 && n >= authsInfos.length) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - try { - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); - return getLc().findAuthInfo(addr.getUserName(), null); - } catch (LinphoneCoreException e) { } - return null; - } - else if (n < 0 || n >= authsInfos.length) { - return null; + LinphoneProxyConfig prxCfg = getProxyConfig(n); + try { + LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); + LinphoneAuthInfo authInfo = getLc().findAuthInfo(addr.getUserName(), null, addr.getDomain()); + return authInfo; + } catch (LinphoneCoreException e) { + e.printStackTrace(); } return null; } + /** + * Removes a authInfo from the core and returns a copy of it. + * Useful to edit a authInfo (you should call saveAuthInfo after the modifications to save them). + */ + private LinphoneAuthInfo getClonedAuthInfo(int n) { + LinphoneProxyConfig prxCfg = getProxyConfig(n); + try { + LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); + LinphoneAuthInfo authInfo = getLc().findAuthInfo(addr.getUserName(), null, addr.getDomain()); + LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); + getLc().removeAuthInfo(authInfo); + return cloneAuthInfo; + } catch (LinphoneCoreException e) { + e.printStackTrace(); + } + + return null; + } + + /** + * Saves a authInfo into the core. + * Useful to save the changes made to a cloned authInfo. + */ + private void saveAuthInfo(LinphoneAuthInfo authInfo) { + getLc().addAuthInfo(authInfo); + } + private String tempUsername; private String tempUserId; private String tempPassword; @@ -151,7 +173,7 @@ public class LinphonePreferences { } catch (NumberFormatException nfe) { } } - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, null, null); + LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, null, null, tempDomain); getLc().addProxyConfig(prxCfg); getLc().addAuthInfo(authInfo); @@ -175,12 +197,14 @@ public class LinphonePreferences { public void setAccountUsername(int n, String username) { String identity = "sip:" + username + "@" + getAccountDomain(n); - LinphoneAuthInfo info = getAuthInfo(n); // Get the auth info before editing the proxy config to ensure to get the correct auth info + LinphoneAuthInfo info = getClonedAuthInfo(n); // Get the auth info before editing the proxy config to ensure to get the correct auth info try { LinphoneProxyConfig prxCfg = getProxyConfig(n); prxCfg.setIdentity(identity); prxCfg.done(); + info.setUsername(username); + saveAuthInfo(info); } catch (LinphoneCoreException e) { e.printStackTrace(); } @@ -196,7 +220,9 @@ public class LinphonePreferences { } public void setAccountUserId(int n, String userId) { - getAuthInfo(n).setUserId(userId); + LinphoneAuthInfo info = getClonedAuthInfo(n); + info.setUserId(userId); + saveAuthInfo(info); } public String getAccountUserId(int n) { @@ -209,7 +235,9 @@ public class LinphonePreferences { } public void setAccountPassword(int n, String password) { - getAuthInfo(n).setPassword(password); + LinphoneAuthInfo info = getClonedAuthInfo(n); + info.setPassword(password); + saveAuthInfo(info); } public String getAccountPassword(int n) { @@ -226,6 +254,10 @@ public class LinphonePreferences { String proxy = "sip:" + domain; try { + LinphoneAuthInfo authInfo = getClonedAuthInfo(n); + authInfo.setDomain(domain); + saveAuthInfo(authInfo); + LinphoneProxyConfig prxCfg = getProxyConfig(n); prxCfg.setIdentity(identity); prxCfg.setProxy(proxy); diff --git a/submodules/belle-sip b/submodules/belle-sip index 38b76142a..2eb17045f 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit 38b76142a0186d393bea57a7f3e7886652900a91 +Subproject commit 2eb17045f1aaf99efe5b5447b2c76a8b7dab8434 diff --git a/submodules/linphone b/submodules/linphone index 74e889fcc..50f9d3580 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 74e889fcc4ae3b61a3d632b108d8493590ccec9d +Subproject commit 50f9d358046b1950e9d0aa3bf1f4527faa79697e From f08c1c4e111839921d442f356bccd9eff5aba263 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 4 Nov 2013 17:14:57 +0100 Subject: [PATCH 2/6] Updated liblinphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 50f9d3580..120fbea39 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 50f9d358046b1950e9d0aa3bf1f4527faa79697e +Subproject commit 120fbea39e56c4fe8b81f67512de43c5113aa267 From e40cf3bbc44fce0b05befaaed088aabeb32cefdc Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 5 Nov 2013 11:42:26 +0100 Subject: [PATCH 3/6] Fix auth info edition --- src/org/linphone/LinphonePreferences.java | 17 ++++++----------- submodules/linphone | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index fd64106bb..8c4926a99 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -123,18 +123,13 @@ public class LinphonePreferences { * Useful to edit a authInfo (you should call saveAuthInfo after the modifications to save them). */ private LinphoneAuthInfo getClonedAuthInfo(int n) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - try { - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); - LinphoneAuthInfo authInfo = getLc().findAuthInfo(addr.getUserName(), null, addr.getDomain()); - LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); - getLc().removeAuthInfo(authInfo); - return cloneAuthInfo; - } catch (LinphoneCoreException e) { - e.printStackTrace(); - } + LinphoneAuthInfo authInfo = getAuthInfo(n); + if (authInfo == null) + return null; - return null; + LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); + getLc().removeAuthInfo(authInfo); + return cloneAuthInfo; } /** diff --git a/submodules/linphone b/submodules/linphone index 120fbea39..263364ac7 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 120fbea39e56c4fe8b81f67512de43c5113aa267 +Subproject commit 263364ac7c4057817f1bb5bcb87f2b69653b749c From e69ff37bce287b5d50900d31cb4156ce9e05df7d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 5 Nov 2013 11:56:52 +0100 Subject: [PATCH 4/6] Updated liblinphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 263364ac7..68a23b44b 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 263364ac7c4057817f1bb5bcb87f2b69653b749c +Subproject commit 68a23b44b0ad8d2cf57ff1b93b6abfd510f14779 From f68292a75956cd6122e713efa00f7fabedd482a3 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 5 Nov 2013 15:54:37 +0100 Subject: [PATCH 5/6] Updated liblinphone for bug fixes + improved tests --- submodules/linphone | 2 +- tests/Makefile | 2 +- tests/res/values/config.xml | 12 ++--- .../org/linphone/test/AccountAssistant.java | 24 +++++----- .../org/linphone/test/AccountManagement.java | 9 ++-- tests/src/org/linphone/test/AinitTestEnv.java | 2 +- tests/src/org/linphone/test/CallsAudio.java | 42 +++++++++-------- tests/src/org/linphone/test/CallsVideo.java | 46 +++++++++++-------- tests/src/org/linphone/test/Chat.java | 19 +++++++- .../linphone/test/ConferenceAndMultiCall.java | 15 ++++-- .../linphone/test/LinphoneTestManager.java | 40 ++++++++++------ tests/src/org/linphone/test/SampleTest.java | 6 ++- 12 files changed, 135 insertions(+), 84 deletions(-) diff --git a/submodules/linphone b/submodules/linphone index 68a23b44b..dbba820b5 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 68a23b44b0ad8d2cf57ff1b93b6abfd510f14779 +Subproject commit dbba820b5a0b0bf587ed614f6cecd9259f6bae2d diff --git a/tests/Makefile b/tests/Makefile index 791b1af86..cdc238939 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -7,7 +7,7 @@ run-basic-tests: $(SDK_PATH)/android update test-project --path . -m ../ ant debug ant installd - ant test + adb shell am instrument -w -e size small org.linphone.test/android.test.InstrumentationTestRunner run-all-tests: $(SDK_PLATFORM_TOOLS_PATH)/adb uninstall org.linphone.test diff --git a/tests/res/values/config.xml b/tests/res/values/config.xml index 6942f8fc5..5e90f0d2a 100644 --- a/tests/res/values/config.xml +++ b/tests/res/values/config.xml @@ -13,19 +13,19 @@ wizard42 wizard42@linphone.org - viish - lucifer + wizard13 + wizard13 sip.linphone.org - Cot + Wizard +33952636505 - viish@sip.linphone.org + wizard@sip.linphone.org Ping! Pong! - elviish - lucifer + wizard16 + wizard16 sip.linphone.org \ No newline at end of file diff --git a/tests/src/org/linphone/test/AccountAssistant.java b/tests/src/org/linphone/test/AccountAssistant.java index 0e7b809ef..dc0126743 100644 --- a/tests/src/org/linphone/test/AccountAssistant.java +++ b/tests/src/org/linphone/test/AccountAssistant.java @@ -4,13 +4,12 @@ import junit.framework.Assert; import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; +import org.linphone.LinphonePreferences; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneProxyConfig; import org.linphone.mediastream.video.capture.hwconf.Hacks; import org.linphone.setup.SetupActivity; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; @@ -51,24 +50,23 @@ public class AccountAssistant extends SampleTest { solo.sleep(3000); //Wait for registration to be done LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); - Assert.assertEquals(proxyConfigs.length, 1); + Assert.assertEquals(1, proxyConfigs.length); LinphoneProxyConfig proxyConfig = proxyConfigs[0]; Assert.assertEquals(RegistrationState.RegistrationOk, proxyConfig.getState()); //Check the wizard added sip.linphone.org custom settings - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - String stunServer = prefs.getString(aContext.getString(org.linphone.R.string.pref_stun_server_key), ""); - Assert.assertEquals(stunServer, aContext.getString(org.linphone.R.string.default_stun)); + LinphonePreferences prefs = LinphonePreferences.instance(); + String stunServer = prefs.getStunServer(); + Assert.assertEquals(aContext.getString(org.linphone.R.string.default_stun), stunServer); - String transport = prefs.getString(aContext.getString(org.linphone.R.string.pref_transport_key), aContext.getString(org.linphone.R.string.pref_transport_udp_key)); - Assert.assertEquals(transport, aContext.getString(org.linphone.R.string.pref_transport_tls_key)); + String transport = prefs.getTransportKey(); + Assert.assertEquals(aContext.getString(org.linphone.R.string.pref_transport_tls_key), transport); - String proxy = prefs.getString(aContext.getString(org.linphone.R.string.pref_proxy_key), ""); - Assert.assertEquals(proxy, aContext.getString(org.linphone.R.string.default_domain) + ":5223"); - boolean outboundproxy = prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_enable_outbound_proxy_key), false); - Assert.assertEquals(outboundproxy, true); + String proxy = prefs.getAccountProxy(0); + Assert.assertEquals(aContext.getString(org.linphone.R.string.default_domain) + ":5223", proxy); + Assert.assertEquals(true, prefs.isAccountOutboundProxySet(0)); - boolean ice = prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_ice_enable_key), false); + boolean ice = prefs.isIceEnabled(); Assert.assertEquals(ice, true); } diff --git a/tests/src/org/linphone/test/AccountManagement.java b/tests/src/org/linphone/test/AccountManagement.java index 839eef18c..84fc0a1b0 100644 --- a/tests/src/org/linphone/test/AccountManagement.java +++ b/tests/src/org/linphone/test/AccountManagement.java @@ -5,6 +5,7 @@ import junit.framework.Assert; import org.linphone.FragmentsAvailable; import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; +import org.linphone.LinphonePreferences; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneProxyConfig; @@ -51,7 +52,7 @@ public class AccountManagement extends SampleTest { solo.goBack(); LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); - Assert.assertEquals(proxyConfigs.length, 1); + Assert.assertEquals(1, proxyConfigs.length); } @LargeTest @@ -64,8 +65,7 @@ public class AccountManagement extends SampleTest { solo.goBack(); solo.goBack(); - LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); - Assert.assertEquals(proxyConfigs.length, 0); + Assert.assertFalse(LinphonePreferences.instance().isAccountEnabled(0)); } @LargeTest @@ -78,8 +78,7 @@ public class AccountManagement extends SampleTest { solo.goBack(); solo.goBack(); - LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); - Assert.assertEquals(proxyConfigs.length, 1); + Assert.assertTrue(LinphonePreferences.instance().isAccountEnabled(0)); } private void goToSettings() { diff --git a/tests/src/org/linphone/test/AinitTestEnv.java b/tests/src/org/linphone/test/AinitTestEnv.java index 90f88595f..f17d90a2f 100644 --- a/tests/src/org/linphone/test/AinitTestEnv.java +++ b/tests/src/org/linphone/test/AinitTestEnv.java @@ -20,7 +20,7 @@ public class AinitTestEnv extends SampleTest { LinphoneTestManager.createAndStart(aContext, iContext, 1); solo.sleep(2000); + Assert.assertEquals(1, LinphoneTestManager.getLc().getProxyConfigList().length); Assert.assertEquals(RegistrationState.RegistrationOk, LinphoneTestManager.getLc().getProxyConfigList()[0].getState()); } - } diff --git a/tests/src/org/linphone/test/CallsAudio.java b/tests/src/org/linphone/test/CallsAudio.java index 3febfdb05..bd8994d2b 100644 --- a/tests/src/org/linphone/test/CallsAudio.java +++ b/tests/src/org/linphone/test/CallsAudio.java @@ -10,6 +10,7 @@ import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCoreException; import org.linphone.core.PayloadType; +import org.linphone.mediastream.Log; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; @@ -42,6 +43,8 @@ public class CallsAudio extends SampleTest { @MediumTest @LargeTest public void testBOutgoingCallWithDefaultConfig() { + LinphoneTestManager.getInstance().declineCall = false; // Just in case + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); solo.clickOnView(solo.getView(org.linphone.R.id.Call)); @@ -56,7 +59,7 @@ public class CallsAudio extends SampleTest { @LargeTest public void testCDTMFRFC2833InPCMUCall() { disableAllEnabledAudioCodecs(); - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + solo.clickOnText("PCMU"); goBackToDialerAfterCodecChanges(); solo.sleep(1000); @@ -360,8 +363,11 @@ public class CallsAudio extends SampleTest { solo.sleep(2000); LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; - if (call.getState() == LinphoneCall.State.OutgoingProgress) { - solo.sleep(3000); + int retry = 0; + while ((call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) && retry < 5) { + solo.sleep(1000); + retry++; + Log.w("Call in progress but not running, retry = " + retry); } Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState()); @@ -395,72 +401,72 @@ public class CallsAudio extends SampleTest { goToAudioCodecsSettings(); if (isAudioCodecEnabled("opus", 48000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_opus)); + solo.clickOnText("opus"); solo.sleep(500); } if (isAudioCodecEnabled("speex", 16000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16)); + solo.clickOnText("speex"); solo.sleep(500); } if (isAudioCodecEnabled("speex", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8)); + solo.clickOnText("speex", 1); solo.sleep(500); } - if (isAudioCodecEnabled("ilbc", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc)); + if (isAudioCodecEnabled("iLBC", 8000)) { + solo.clickOnText("iLBC"); solo.sleep(500); } if (isAudioCodecEnabled("AMR", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr)); + solo.clickOnText("AMR"); solo.sleep(500); } if (isAudioCodecEnabled("AMRWB", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb)); + solo.clickOnText("AMRWB"); solo.sleep(500); } if (isAudioCodecEnabled("G729", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729)); + solo.clickOnText("G729"); solo.sleep(500); } if (isAudioCodecEnabled("GSM", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm)); + solo.clickOnText("GSM"); solo.sleep(500); } if (isAudioCodecEnabled("G722", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722)); + solo.clickOnText("G722"); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 24000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24)); + solo.clickOnText("SILK"); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 16000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16)); + solo.clickOnText("SILK", 1); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk8)); + solo.clickOnText("SILK", 2); solo.sleep(500); } if (isAudioCodecEnabled("PCMU", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + solo.clickOnText("PCMU"); solo.sleep(500); } if (isAudioCodecEnabled("PCMA", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma)); + solo.clickOnText("PCMA"); solo.sleep(500); } } diff --git a/tests/src/org/linphone/test/CallsVideo.java b/tests/src/org/linphone/test/CallsVideo.java index ce3af5672..b84d266cd 100644 --- a/tests/src/org/linphone/test/CallsVideo.java +++ b/tests/src/org/linphone/test/CallsVideo.java @@ -10,6 +10,7 @@ import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCoreException; import org.linphone.core.PayloadType; +import org.linphone.mediastream.Log; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; @@ -26,6 +27,8 @@ public class CallsVideo extends SampleTest { @MediumTest @LargeTest public void testAInit() { + LinphoneTestManager.getLc().enableVideo(true, true); // Just in case + //Disable video goToSettings(); @@ -42,6 +45,8 @@ public class CallsVideo extends SampleTest { @MediumTest @LargeTest public void testBOutgoingCallWithDefaultConfig() { + LinphoneTestManager.getInstance().declineCall = false; // Just in case + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); solo.clickOnView(solo.getView(org.linphone.R.id.Call)); @@ -205,6 +210,7 @@ public class CallsVideo extends SampleTest { assertCallIsCorrectlyRunning(); } + @SmallTest @MediumTest @LargeTest public void testJIncomingVideoCall() { @@ -306,11 +312,15 @@ public class CallsVideo extends SampleTest { solo.sleep(2000); LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; - if (call.getState() == LinphoneCall.State.OutgoingProgress) { - solo.sleep(3000); + int retry = 0; + while ((call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) && retry < 5) { + solo.sleep(1000); + retry++; + Log.w("Call in progress but not running, retry = " + retry); } Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState()); + Assert.assertTrue(call.getCurrentParamsCopy().getVideoEnabled()); } private void goToSettings() { @@ -352,75 +362,75 @@ public class CallsVideo extends SampleTest { goToAudioCodecsSettings(); if (isAudioCodecEnabled("opus", 48000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_opus)); + solo.clickOnText("opus"); solo.sleep(500); } if (isAudioCodecEnabled("speex", 16000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16)); + solo.clickOnText("speex"); solo.sleep(500); } if (isAudioCodecEnabled("speex", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8)); + solo.clickOnText("speex", 1); solo.sleep(500); } - if (isAudioCodecEnabled("ilbc", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc)); + if (isAudioCodecEnabled("iLBC", 8000)) { + solo.clickOnText("iLBC"); solo.sleep(500); } if (isAudioCodecEnabled("AMR", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr)); + solo.clickOnText("AMR"); solo.sleep(500); } if (isAudioCodecEnabled("AMRWB", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb)); + solo.clickOnText("AMRWB"); solo.sleep(500); } if (isAudioCodecEnabled("G729", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729)); + solo.clickOnText("G729"); solo.sleep(500); } if (isAudioCodecEnabled("GSM", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm)); + solo.clickOnText("GSM"); solo.sleep(500); } if (isAudioCodecEnabled("G722", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722)); + solo.clickOnText("G722"); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 24000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24)); + solo.clickOnText("SILK"); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 16000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16)); + solo.clickOnText("SILK", 1); solo.sleep(500); } if (isAudioCodecEnabled("SILK", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk8)); + solo.clickOnText("SILK", 2); solo.sleep(500); } if (isAudioCodecEnabled("PCMU", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + solo.clickOnText("PCMU"); solo.sleep(500); } if (isAudioCodecEnabled("PCMA", 8000)) { - solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma)); + solo.clickOnText("PCMA"); solo.sleep(500); } - } + } private boolean isVideoCodecEnabled(String mime) { LinphoneCore lc = LinphoneTestManager.getLc(); diff --git a/tests/src/org/linphone/test/Chat.java b/tests/src/org/linphone/test/Chat.java index 8d4301e59..923990eb7 100644 --- a/tests/src/org/linphone/test/Chat.java +++ b/tests/src/org/linphone/test/Chat.java @@ -2,6 +2,7 @@ package org.linphone.test; import junit.framework.Assert; +import org.linphone.ChatStorage; import org.linphone.LinphoneActivity; import org.linphone.core.LinphoneChatMessage; import org.linphone.core.LinphoneChatMessage.State; @@ -17,8 +18,22 @@ import android.test.suitebuilder.annotation.SmallTest; */ public class Chat extends SampleTest { + @SmallTest + @MediumTest @LargeTest - public void testBEmptyChatHistory() { + public void testAEmptyChatHistory() { + goToChat(); + + ChatStorage chatStorage = ChatStorage.getInstance(); + for (String conversation : chatStorage.getChatList()) { + chatStorage.removeDiscussion(conversation); + } + + Assert.assertEquals(0, chatStorage.getUnreadMessageCount()); + } + + @LargeTest + public void testBDisplayEmptyChatHistory() { goToChat(); Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.no_chat_history))); @@ -42,7 +57,7 @@ public class Chat extends SampleTest { } @LargeTest - public void testDNotEmptyChatHistory() { + public void testDIsNotEmptyChatHistory() { goToChat(); Assert.assertTrue(solo.searchText(iContext.getString(org.linphone.test.R.string.account_test_calls_login))); diff --git a/tests/src/org/linphone/test/ConferenceAndMultiCall.java b/tests/src/org/linphone/test/ConferenceAndMultiCall.java index cb26cd0f4..b1ee29c22 100644 --- a/tests/src/org/linphone/test/ConferenceAndMultiCall.java +++ b/tests/src/org/linphone/test/ConferenceAndMultiCall.java @@ -11,6 +11,7 @@ import org.linphone.LinphoneManager; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCoreException; +import org.linphone.mediastream.Log; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; @@ -45,6 +46,7 @@ public class ConferenceAndMultiCall extends SampleTest { @MediumTest @LargeTest public void testBSimpleConference() { + LinphoneTestManager.getInstance().declineCall = false; // Just in case startConference(); solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); @@ -255,14 +257,13 @@ public class ConferenceAndMultiCall extends SampleTest { private void startTwoCalls() { solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); solo.clickOnView(solo.getView(org.linphone.R.id.Call)); - assertCallIsCorrectlyRunning(1); + solo.clickOnView(solo.getView(org.linphone.R.id.options)); solo.clickOnView(solo.getView(org.linphone.R.id.addCall)); solo.enterText(0, iContext.getString(org.linphone.test.R.string.conference_account_login) + "@" + iContext.getString(org.linphone.test.R.string.conference_account_domain)); solo.clickOnView(solo.getView(org.linphone.R.id.Call)); - assertCallIsCorrectlyRunning(2); } @@ -280,12 +281,16 @@ public class ConferenceAndMultiCall extends SampleTest { private void assertCallIsCorrectlyRunning(int lcId) { solo.waitForActivity("InCallActivity", 5000); solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - + solo.sleep(2000); + Assert.assertEquals(1, LinphoneTestManager.getLc(lcId).getCallsNb()); LinphoneCall call = LinphoneTestManager.getLc(lcId).getCalls()[0]; - if (call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) { - solo.sleep(3000); + int retry = 0; + while ((call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) && retry < 5) { + solo.sleep(1000); + retry++; + Log.w("Call in progress but not running, retry = " + retry); } Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState()); diff --git a/tests/src/org/linphone/test/LinphoneTestManager.java b/tests/src/org/linphone/test/LinphoneTestManager.java index 15120cbf8..df839ef10 100644 --- a/tests/src/org/linphone/test/LinphoneTestManager.java +++ b/tests/src/org/linphone/test/LinphoneTestManager.java @@ -20,6 +20,7 @@ import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.GlobalState; import org.linphone.core.LinphoneCore.MediaEncryption; import org.linphone.core.LinphoneCore.RegistrationState; +import org.linphone.core.LinphoneCore.Transports; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; import org.linphone.core.LinphoneCoreListener; @@ -37,15 +38,13 @@ import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager.NameNotFoundException; import android.telephony.TelephonyManager; public class LinphoneTestManager implements LinphoneCoreListener { private static LinphoneTestManager instance; - private Context mIContext; + private Context mAContext, mIContext; private LinphoneCore mLc1, mLc2; public String lastMessageReceived; @@ -53,10 +52,12 @@ public class LinphoneTestManager implements LinphoneCoreListener { public boolean autoAnswer = true; public boolean declineCall = false; - private Timer mTimer = new Timer("Linphone scheduler"); + private Timer mTimer1 = new Timer("Linphone scheduler 1"); + private Timer mTimer2 = new Timer("Linphone scheduler 2"); private LinphoneTestManager(Context ac, Context ic) { mIContext = ic; + mAContext = ac; } public static LinphoneTestManager createAndStart(Context ac, Context ic, int id) { @@ -77,7 +78,8 @@ public class LinphoneTestManager implements LinphoneCoreListener { try { LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); - final LinphoneCore mLc = LinphoneCoreFactory.instance().createLinphoneCore(this); + String basePath = mAContext.getFilesDir().getAbsolutePath(); + final LinphoneCore mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, basePath + "/.linphonerc" + id, null, null); if (id == 2) { mLc2 = mLc; } else { @@ -114,11 +116,13 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.iterate(); } }; - mTimer.scheduleAtFixedRate(lTask, 0, 20); - - IntentFilter lFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); - lFilter.addAction(Intent.ACTION_SCREEN_OFF); + if (id == 2) { + mTimer2.scheduleAtFixedRate(lTask, 0, 20); + } else { + mTimer1.scheduleAtFixedRate(lTask, 0, 20); + } + resetCameraFromPreferences(); } catch (Exception e) { @@ -137,9 +141,18 @@ public class LinphoneTestManager implements LinphoneCoreListener { LinphoneManager.getLc().setVideoDevice(camId); } - public void initFromConf(LinphoneCore mLc) throws LinphoneConfigException { + public void initFromConf(LinphoneCore mLc) throws LinphoneConfigException, LinphoneCoreException { LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); + // Use TCP with Random port + Transports transports = getLc().getSignalingTransportPorts(); + transports.tcp = -1; + transports.udp = 0; + transports.tls = 0; + mLc.setSignalingTransportPorts(transports); + + initAccounts(mLc); + mLc.setVideoPolicy(true, true); boolean isVideoEnabled = true; mLc.enableVideo(isVideoEnabled, isVideoEnabled); @@ -169,7 +182,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.setMediaEncryption(me); } - public void initAccounts(LinphoneCore mLc) throws LinphoneCoreException { + private void initAccounts(LinphoneCore mLc) throws LinphoneCoreException { mLc.clearAuthInfos(); mLc.clearProxyConfigs(); @@ -183,7 +196,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { password = mIContext.getString(org.linphone.test.R.string.conference_account_password); domain = mIContext.getString(org.linphone.test.R.string.conference_account_domain); } - LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username, password, null); + LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username, password, null, domain); mLc.addAuthInfo(lAuthInfo); String identity = "sip:" + username +"@" + domain; String proxy = "sip:" + domain; @@ -243,7 +256,8 @@ public class LinphoneTestManager implements LinphoneCoreListener { private void doDestroy() { try { - mTimer.cancel(); + mTimer1.cancel(); + mTimer2.cancel(); mLc1.destroy(); mLc2.destroy(); } diff --git a/tests/src/org/linphone/test/SampleTest.java b/tests/src/org/linphone/test/SampleTest.java index 40269f94b..68a0c9e0d 100644 --- a/tests/src/org/linphone/test/SampleTest.java +++ b/tests/src/org/linphone/test/SampleTest.java @@ -2,6 +2,7 @@ package org.linphone.test; import org.linphone.LinphoneLauncherActivity; import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCore; import android.content.Context; import android.test.ActivityInstrumentationTestCase2; @@ -32,7 +33,10 @@ public abstract class SampleTest extends ActivityInstrumentationTestCase2 Date: Tue, 5 Nov 2013 16:04:12 +0100 Subject: [PATCH 6/6] Fix run-all-tests Makefile target --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f3053b233..e84f1832d 100644 --- a/Makefile +++ b/Makefile @@ -339,11 +339,11 @@ run-linphone: run-basic-tests: ant partial-clean - $(MAKE) -C tests + $(MAKE) -C tests run-basic-tests run-all-tests: ant partial-clean - $(MAKE) -C tests + $(MAKE) -C tests run-all-tests clean-ndk-build: $(NDK_PATH)/ndk-build clean $(LIBLINPHONE_OPTIONS)