diff --git a/src/org/linphone/setup/WizardFragment.java b/src/org/linphone/setup/WizardFragment.java index 15c8ee055..9f30ebb52 100644 --- a/src/org/linphone/setup/WizardFragment.java +++ b/src/org/linphone/setup/WizardFragment.java @@ -59,8 +59,7 @@ public class WizardFragment extends Fragment { private TextView errorMessage; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.setup_wizard, container, false); username = (EditText) view.findViewById(R.id.setup_username); diff --git a/tests/res/values/config.xml b/tests/res/values/config.xml index ab5b5d7d9..6942f8fc5 100644 --- a/tests/res/values/config.xml +++ b/tests/res/values/config.xml @@ -24,4 +24,8 @@ Ping! Pong! + elviish + lucifer + sip.linphone.org + \ No newline at end of file diff --git a/tests/src/org/linphone/test/AinitTestEnv.java b/tests/src/org/linphone/test/AinitTestEnv.java index ad1d287eb..90f88595f 100644 --- a/tests/src/org/linphone/test/AinitTestEnv.java +++ b/tests/src/org/linphone/test/AinitTestEnv.java @@ -17,7 +17,7 @@ public class AinitTestEnv extends SampleTest { @MediumTest @LargeTest public void testAInitLinphoneCore() { - LinphoneTestManager.createAndStart(aContext, iContext); + LinphoneTestManager.createAndStart(aContext, iContext, 1); solo.sleep(2000); Assert.assertEquals(RegistrationState.RegistrationOk, LinphoneTestManager.getLc().getProxyConfigList()[0].getState()); diff --git a/tests/src/org/linphone/test/Conference.java b/tests/src/org/linphone/test/Conference.java new file mode 100644 index 000000000..34a80c5f1 --- /dev/null +++ b/tests/src/org/linphone/test/Conference.java @@ -0,0 +1,109 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.InCallActivity; +import org.linphone.LinphoneActivity; +import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCore.RegistrationState; + +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; + +public class Conference extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAInit() { + LinphoneTestManager.createAndStart(aContext, iContext, 2); + + solo.sleep(2000); + Assert.assertEquals(RegistrationState.RegistrationOk, LinphoneTestManager.getLc(2).getProxyConfigList()[0].getState()); + + //Disable video + goToSettings(); + + selectItemInListOnUIThread(3); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title)); + solo.sleep(500); + + solo.goBack(); + solo.sleep(1000); + Assert.assertFalse(LinphoneManager.getLc().isVideoEnabled()); + } + + @SmallTest + @MediumTest + @LargeTest + public void testBSimpleConference() { + startConference(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @SmallTest //TODO REMOVE + @LargeTest + public void testCRemoveOneFromConference() { + startConference(); + + solo.clickOnView(solo.getView(org.linphone.R.id.callStatus)); + + Assert.assertEquals(1, LinphoneTestManager.getLc(1).getCallsNb()); + Assert.assertEquals(1, LinphoneTestManager.getLc(2).getCallsNb()); + Assert.assertEquals(2, LinphoneManager.getLc().getCallsNb()); + Assert.assertFalse(LinphoneManager.getLc().isInConference()); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.sleep(1000); + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + private void goToSettings() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.settings)); + } + + private void startConference() { + 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); + + solo.clickOnView(solo.getView(org.linphone.R.id.conference)); + solo.sleep(1000); + + assertCallIsCorrectlyRunning(1); + assertCallIsCorrectlyRunning(2); + Assert.assertTrue(LinphoneManager.getLc().isInConference()); + } + + private void assertCallIsCorrectlyRunning(int lcId) { + solo.waitForActivity("InCallActivity", 5000); + solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); + + solo.sleep(2000); + LinphoneCall call = LinphoneTestManager.getLc(lcId).getCalls()[0]; + + if (call.getState() == LinphoneCall.State.OutgoingProgress) { + solo.sleep(3000); + } + + 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 fc5b6bb1d..cd312bfe3 100644 --- a/tests/src/org/linphone/test/LinphoneTestManager.java +++ b/tests/src/org/linphone/test/LinphoneTestManager.java @@ -48,7 +48,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { private static LinphoneTestManager instance; private Context mContext, mIContext; - private LinphoneCore mLc; + private LinphoneCore mLc1, mLc2; private static Transports initialTransports; public String lastMessageReceived; @@ -63,26 +63,31 @@ public class LinphoneTestManager implements LinphoneCoreListener { mIContext = ic; } - public static LinphoneTestManager createAndStart(Context ac, Context ic) { - if (instance != null) - throw new RuntimeException("Linphone Manager is already initialized"); - - instance = new LinphoneTestManager(ac, ic); - instance.startLibLinphone(ic); + public static LinphoneTestManager createAndStart(Context ac, Context ic, int id) { + if (instance == null) + instance = new LinphoneTestManager(ac, ic); + + instance.startLibLinphone(ic, id); TelephonyManager tm = (TelephonyManager) ac.getSystemService(Context.TELEPHONY_SERVICE); boolean gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE; - setGsmIdle(gsmIdle); + setGsmIdle(gsmIdle, id); if (Version.isVideoCapable()) AndroidVideoApi5JniWrapper.setAndroidSdkVersion(Version.sdk()); return instance; } - private synchronized void startLibLinphone(Context c) { + private synchronized void startLibLinphone(Context c, int id) { try { LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); - mLc = LinphoneCoreFactory.instance().createLinphoneCore(this); + final LinphoneCore mLc = LinphoneCoreFactory.instance().createLinphoneCore(this); + if (id == 2) { + mLc2 = mLc; + } else { + mLc1 = mLc; + } + mLc.getConfig().setInt("sip", "store_auth_info", 0); mLc.setContext(c); try { @@ -103,7 +108,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.setCpuCount(availableCores); try { - initFromConf(); + initFromConf(mLc); } catch (LinphoneException e) { Log.w("no config ready yet"); } @@ -137,18 +142,18 @@ public class LinphoneTestManager implements LinphoneCoreListener { LinphoneManager.getLc().setVideoDevice(camId); } - public void initFromConf() throws LinphoneConfigException { + public void initFromConf(LinphoneCore mLc) throws LinphoneConfigException { LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); if (initialTransports == null) initialTransports = mLc.getSignalingTransportPorts(); - setSignalingTransportsFromConfiguration(initialTransports); - initMediaEncryption(); + setSignalingTransportsFromConfiguration(initialTransports, mLc); + initMediaEncryption(mLc); mLc.setVideoPolicy(true, true); - readAndSetAudioAndVideoPorts(); + readAndSetAudioAndVideoPorts(mLc); String defaultIncomingCallTimeout = mContext.getString(org.linphone.R.string.pref_incoming_call_timeout_default); int incomingCallTimeout = tryToParseIntValue(defaultIncomingCallTimeout, defaultIncomingCallTimeout); @@ -157,27 +162,27 @@ public class LinphoneTestManager implements LinphoneCoreListener { try { // Configure audio codecs // enableDisableAudioCodec("speex", 32000, 1, R.string.pref_codec_speex32_key); - enableDisableAudioCodec("speex", 32000, 1, false); - enableDisableAudioCodec("speex", 16000, 1, R.string.pref_codec_speex16_key); - enableDisableAudioCodec("speex", 8000, 1, R.string.pref_codec_speex8_key); - enableDisableAudioCodec("iLBC", 8000, 1, R.string.pref_codec_ilbc_key); - enableDisableAudioCodec("GSM", 8000, 1, R.string.pref_codec_gsm_key); - enableDisableAudioCodec("G722", 8000, 1, R.string.pref_codec_g722_key); - enableDisableAudioCodec("G729", 8000, 1, R.string.pref_codec_g729_key); - enableDisableAudioCodec("PCMU", 8000, 1, R.string.pref_codec_pcmu_key); - enableDisableAudioCodec("PCMA", 8000, 1, R.string.pref_codec_pcma_key); - enableDisableAudioCodec("AMR", 8000, 1, R.string.pref_codec_amr_key); - enableDisableAudioCodec("AMR-WB", 16000, 1, R.string.pref_codec_amrwb_key); + enableDisableAudioCodec("speex", 32000, 1, false, mLc); + enableDisableAudioCodec("speex", 16000, 1, R.string.pref_codec_speex16_key, mLc); + enableDisableAudioCodec("speex", 8000, 1, R.string.pref_codec_speex8_key, mLc); + enableDisableAudioCodec("iLBC", 8000, 1, R.string.pref_codec_ilbc_key, mLc); + enableDisableAudioCodec("GSM", 8000, 1, R.string.pref_codec_gsm_key, mLc); + enableDisableAudioCodec("G722", 8000, 1, R.string.pref_codec_g722_key, mLc); + enableDisableAudioCodec("G729", 8000, 1, R.string.pref_codec_g729_key, mLc); + enableDisableAudioCodec("PCMU", 8000, 1, R.string.pref_codec_pcmu_key, mLc); + enableDisableAudioCodec("PCMA", 8000, 1, R.string.pref_codec_pcma_key, mLc); + enableDisableAudioCodec("AMR", 8000, 1, R.string.pref_codec_amr_key, mLc); + enableDisableAudioCodec("AMR-WB", 16000, 1, R.string.pref_codec_amrwb_key, mLc); //enableDisableAudioCodec("SILK", 24000, 1, R.string.pref_codec_silk24_key); - enableDisableAudioCodec("SILK", 24000, 1, false); - enableDisableAudioCodec("SILK", 16000, 1, R.string.pref_codec_silk16_key); + enableDisableAudioCodec("SILK", 24000, 1, false, mLc); + enableDisableAudioCodec("SILK", 16000, 1, R.string.pref_codec_silk16_key, mLc); //enableDisableAudioCodec("SILK", 12000, 1, R.string.pref_codec_silk12_key); - enableDisableAudioCodec("SILK", 12000, 1, false); - enableDisableAudioCodec("SILK", 8000, 1, R.string.pref_codec_silk8_key); + enableDisableAudioCodec("SILK", 12000, 1, false, mLc); + enableDisableAudioCodec("SILK", 8000, 1, R.string.pref_codec_silk8_key, mLc); // Configure video codecs for (PayloadType videoCodec : mLc.getVideoCodecs()) { - enableDisableVideoCodecs(videoCodec); + enableDisableVideoCodecs(videoCodec, mLc); } } catch (LinphoneCoreException e) { throw new LinphoneConfigException(mContext.getString(R.string.wrong_settings),e); @@ -199,7 +204,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { //accounts try { - initAccounts(); + initAccounts(mLc); //init network state mLc.setNetworkReachable(true); @@ -208,32 +213,39 @@ public class LinphoneTestManager implements LinphoneCoreListener { } } - public boolean detectVideoCodec(String mime) { + public boolean detectVideoCodec(String mime, LinphoneCore mLc) { for (PayloadType videoCodec : mLc.getVideoCodecs()) { if (mime.equals(videoCodec.getMime())) return true; } return false; } - public boolean detectAudioCodec(String mime){ + public boolean detectAudioCodec(String mime, LinphoneCore mLc){ for (PayloadType audioCodec : mLc.getAudioCodecs()) { if (mime.equals(audioCodec.getMime())) return true; } return false; } - void initMediaEncryption(){ + void initMediaEncryption(LinphoneCore mLc){ MediaEncryption me=MediaEncryption.None; mLc.setMediaEncryption(me); } - public void initAccounts() throws LinphoneCoreException { + public void initAccounts(LinphoneCore mLc) throws LinphoneCoreException { mLc.clearAuthInfos(); mLc.clearProxyConfigs(); - String username = mIContext.getString(org.linphone.test.R.string.account_test_calls_login); - String password = mIContext.getString(org.linphone.test.R.string.account_test_calls_pwd); - String domain = mIContext.getString(org.linphone.test.R.string.account_test_calls_domain); + String username, password, domain; + if (mLc.equals(mLc1)) { + username = mIContext.getString(org.linphone.test.R.string.account_test_calls_login); + password = mIContext.getString(org.linphone.test.R.string.account_test_calls_pwd); + domain = mIContext.getString(org.linphone.test.R.string.account_test_calls_domain); + } else { + username = mIContext.getString(org.linphone.test.R.string.conference_account_login); + 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); mLc.addAuthInfo(lAuthInfo); String identity = "sip:" + username +"@" + domain; @@ -251,7 +263,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { } } - private void readAndSetAudioAndVideoPorts() throws NumberFormatException { + private void readAndSetAudioAndVideoPorts(LinphoneCore mLc) throws NumberFormatException { int aPortStart, aPortEnd, vPortStart, vPortEnd; int defaultAudioPort, defaultVideoPort; defaultAudioPort = Integer.parseInt(mContext.getString(R.string.default_audio_port)); @@ -317,7 +329,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { return instance; } - private void setSignalingTransportsFromConfiguration(Transports t) { + private void setSignalingTransportsFromConfiguration(Transports t, LinphoneCore mLc) { Transports ports = new Transports(t); boolean useRandomPort = true; int lPreviousPort = 5060; @@ -333,31 +345,37 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.setSignalingTransportPorts(ports); } + public static synchronized final LinphoneCore getLc(int i) { + if (i == 2) + return getInstance().mLc2; + return getInstance().mLc1; + } + public static synchronized final LinphoneCore getLc() { - return getInstance().mLc; + return getLc(1); } - private void enableDisableAudioCodec(String codec, int rate, int channels, int key) throws LinphoneCoreException { + private void enableDisableAudioCodec(String codec, int rate, int channels, int key, LinphoneCore mLc) throws LinphoneCoreException { PayloadType pt = mLc.findPayloadType(codec, rate, channels); if (pt !=null) { boolean enable = true; mLc.enablePayloadType(pt, enable); } } - private void enableDisableAudioCodec(String codec, int rate, int channels, boolean enable) throws LinphoneCoreException { + private void enableDisableAudioCodec(String codec, int rate, int channels, boolean enable, LinphoneCore mLc) throws LinphoneCoreException { PayloadType pt = mLc.findPayloadType(codec, rate, channels); if (pt !=null) { mLc.enablePayloadType(pt, enable); } } - private void enableDisableVideoCodecs(PayloadType videoCodec) throws LinphoneCoreException { + private void enableDisableVideoCodecs(PayloadType videoCodec, LinphoneCore mLc) throws LinphoneCoreException { boolean enable = true; mLc.enablePayloadType(videoCodec, enable); } private int savedMaxCallWhileGsmIncall; - private synchronized void preventSIPCalls() { + private synchronized void preventSIPCalls(LinphoneCore mLc) { if (savedMaxCallWhileGsmIncall != 0) { Log.w("SIP calls are already blocked due to GSM call running"); return; @@ -365,7 +383,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { savedMaxCallWhileGsmIncall = mLc.getMaxCalls(); mLc.setMaxCalls(0); } - private synchronized void allowSIPCalls() { + private synchronized void allowSIPCalls(LinphoneCore mLc) { if (savedMaxCallWhileGsmIncall == 0) { Log.w("SIP calls are already allowed as no GSM call knowned to be running"); return; @@ -373,26 +391,28 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.setMaxCalls(savedMaxCallWhileGsmIncall); savedMaxCallWhileGsmIncall = 0; } - public static void setGsmIdle(boolean gsmIdle) { + public static void setGsmIdle(boolean gsmIdle, int id) { LinphoneTestManager mThis = instance; if (mThis == null) return; if (gsmIdle) { - mThis.allowSIPCalls(); + mThis.allowSIPCalls(LinphoneTestManager.getLc(id)); } else { - mThis.preventSIPCalls(); + mThis.preventSIPCalls(LinphoneTestManager.getLc(id)); } } private void doDestroy() { try { mTimer.cancel(); - mLc.destroy(); + mLc1.destroy(); + mLc2.destroy(); } catch (RuntimeException e) { e.printStackTrace(); } finally { - mLc = null; + mLc1 = null; + mLc2 = null; instance = null; } } @@ -421,10 +441,10 @@ public class LinphoneTestManager implements LinphoneCoreListener { Log.e("Call state = " + cstate.toString()); if (cstate == LinphoneCall.State.IncomingReceived) { if (declineCall) { - mLc.terminateCall(call); + lc.terminateCall(call); } else if (autoAnswer) { try { - mLc.acceptCall(call); + lc.acceptCall(call); } catch (LinphoneCoreException e) { e.printStackTrace(); }