10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2010 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.mockril;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.test.InstrumentationTestCase;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.IOException;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.nio.ByteBuffer;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.communication.MsgHeader;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.communication.Msg;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.RilChannel;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ril_proto.RilCtrlCmds;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ril_proto.RilCmds;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.frameworks.telephonytests.TelephonyMockRilTestRunner;
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.google.protobuf.micro.InvalidProtocolBufferMicroException;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville// Test suite for test ril
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class MockRilTest extends InstrumentationTestCase {
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final String TAG = "MockRilTest";
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    RilChannel mMockRilChannel;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    TelephonyMockRilTestRunner mRunner;
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void setUp() throws Exception {
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.setUp();
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mRunner = (TelephonyMockRilTestRunner)getInstrumentation();
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mMockRilChannel = mRunner.mMockRilChannel;
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void tearDown() throws Exception {
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.tearDown();
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static void log(String s) {
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Log.v(TAG, s);
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test Case 1: Test protobuf serialization and deserialization
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @throws InvalidProtocolBufferMicroException
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testProtobufSerDes() throws InvalidProtocolBufferMicroException {
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testProtobufSerdes E");
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlRspRadioState rs = new RilCtrlCmds.CtrlRspRadioState();
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected rs.state == 0 was %d", rs.getState()),
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rs.getState() == 0);
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        rs.setState(1);
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected rs.state == 1 was %d", rs.getState()),
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rs.getState() == 1);
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] rs_ser = rs.toByteArray();
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlRspRadioState rsNew = RilCtrlCmds.CtrlRspRadioState.parseFrom(rs_ser);
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected rsNew.state == 1 was %d", rs.getState()),
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                rs.getState() == 1);
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testProtobufSerdes X");
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 2: Test echo command works using writeMsg & readMsg
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testEchoMsg() throws IOException {
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testEchoMsg E");
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        MsgHeader mh = new MsgHeader();
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setCmd(0);
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setToken(1);
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setStatus(2);
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ByteBuffer data = ByteBuffer.allocate(3);
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data.put((byte)3);
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data.put((byte)4);
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        data.put((byte)5);
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, mh, data);
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg respMsg = Msg.recv(mMockRilChannel);
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.header.cmd == 0 was %d",respMsg.getCmd()),
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getCmd() == 0);
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.header.token == 1 was %d",respMsg.getToken()),
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getToken() == 1);
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.header.status == 2 was %d", respMsg.getStatus()),
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getStatus() == 2);
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.data[0] == 3 was %d", respMsg.getData(0)),
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getData(0) == 3);
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.data[1] == 4 was %d", respMsg.getData(1)),
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getData(1) == 4);
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected mhd.data[2] == 5 was %d", respMsg.getData(2)),
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                respMsg.getData(2) == 5);
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testEchoMsg X");
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 3: Test get as
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testGetAs() {
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testGetAs E");
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Use a message header as the protobuf data content
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        MsgHeader mh = new MsgHeader();
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setCmd(12345);
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setToken(9876);
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setStatus(7654);
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mh.setLengthData(4321);
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        byte[] data = mh.toByteArray();
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        MsgHeader mhResult = Msg.getAs(MsgHeader.class, data);
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected cmd == 12345 was %d", mhResult.getCmd()),
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getCmd() == 12345);
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected token == 9876 was %d", mhResult.getToken()),
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getToken() == 9876);
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected status == 7654 was %d", mhResult.getStatus()),
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getStatus() == 7654);
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected lengthData == 4321 was %d", mhResult.getLengthData()),
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getLengthData() == 4321);
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg msg = Msg.obtain();
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        msg.setData(ByteBuffer.wrap(data));
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mhResult = msg.getDataAs(MsgHeader.class);
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected cmd == 12345 was %d", mhResult.getCmd()),
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getCmd() == 12345);
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected token == 9876 was %d", mhResult.getToken()),
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getToken() == 9876);
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected status == 7654 was %d", mhResult.getStatus()),
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getStatus() == 7654);
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected lengthData == 4321 was %d", mhResult.getLengthData()),
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mhResult.getLengthData() == 4321);
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testGetAs X");
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 3: test get radio state
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testGetRadioState() throws IOException {
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testGetRadioState E");
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, 1, 9876, 0, null);
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg resp = Msg.recv(mMockRilChannel);
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //resp.printHeader("testGetRadioState");
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected cmd == 1 was %d", resp.getCmd()),
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                resp.getCmd() == 1);
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected token == 9876 was %d", resp.getToken()),
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                resp.getToken() == 9876);
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected status == 0 was %d", resp.getStatus()),
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                resp.getStatus() == 0);
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlRspRadioState rsp = resp.getDataAs(RilCtrlCmds.CtrlRspRadioState.class);
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int state = rsp.getState();
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testGetRadioState state=" + state);
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(String.format("expected RadioState >= 0 && RadioState <= 9 was %d", state),
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ((state >= 0) && (state <= 9)));
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testGetRadioState X");
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 5: test set radio state
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testSetRadioState() throws IOException {
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testSetRadioState E");
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlReqRadioState cmdrs = new RilCtrlCmds.CtrlReqRadioState();
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(0, cmdrs.getState());
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmdrs.setState(RilCmds.RADIOSTATE_SIM_NOT_READY);
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertEquals(2, cmdrs.getState());
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_RADIO_STATE, 0, 0, cmdrs);
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg resp = Msg.recv(mMockRilChannel);
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("get response status :" + resp.getStatus());
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("get response for command: " + resp.getCmd());
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("get command token: " + resp.getToken());
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlRspRadioState rsp = resp.getDataAs(RilCtrlCmds.CtrlRspRadioState.class);
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int state = rsp.getState();
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("get response for testSetRadioState: " + state);
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue(RilCmds.RADIOSTATE_SIM_NOT_READY == state);
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 6: test start incoming call and hangup it.
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testStartIncomingCallAndHangup() throws IOException {
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testStartIncomingCallAndHangup");
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlReqSetMTCall cmd = new RilCtrlCmds.CtrlReqSetMTCall();
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String incomingCall = "6502889108";
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // set the MT call
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmd.setPhoneNumber(incomingCall);
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_MT_CALL, 0, 0, cmd);
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // get response
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg resp = Msg.recv(mMockRilChannel);
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response status: " + resp.getStatus());
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("The ril is not in a proper state to set MT calls.",
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // allow the incoming call alerting for some time
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Thread.sleep(5000);
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (InterruptedException e) {}
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // we are playing a trick to assume the current is 1
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlHangupConnRemote hangupCmd = new RilCtrlCmds.CtrlHangupConnRemote();
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        hangupCmd.setConnectionId(1);
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        hangupCmd.setCallFailCause(16);   // normal hangup
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_HANGUP_CONN_REMOTE, 0, 0, hangupCmd);
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // get response
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response for hangup connection: " + resp.getStatus());
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("CTRL_CMD_HANGUP_CONN_REMOTE failed",
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Test case 7: test set call transition flag
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void testSetCallTransitionFlag() throws IOException {
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("testSetCallTransitionFlag");
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Set flag to true:
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlSetCallTransitionFlag cmd = new RilCtrlCmds.CtrlSetCallTransitionFlag();
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmd.setFlag(true);
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_TRANSITION_FLAG, 0, 0, cmd);
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg resp = Msg.recv(mMockRilChannel);
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response status: " + resp.getStatus());
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("Set call transition flag failed",
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // add a dialing call
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlReqAddDialingCall cmdDialCall = new RilCtrlCmds.CtrlReqAddDialingCall();
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String phoneNumber = "5102345678";
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmdDialCall.setPhoneNumber(phoneNumber);
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_ADD_DIALING_CALL, 0, 0, cmdDialCall);
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response status for adding a dialing call: " + resp.getStatus());
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("add dialing call failed",
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Thread.sleep(5000);
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (InterruptedException e) {}
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // send command to force call state change
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_ALERT, 0, 0, null);
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response status: " + resp.getStatus());
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("Set call alert failed",
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Thread.sleep(2000);
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (InterruptedException e) {}
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // send command to force call state change
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_ACTIVE, 0, 0, null);
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response status: " + resp.getStatus());
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("Set call active failed",
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // hangup the active all remotely
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        RilCtrlCmds.CtrlHangupConnRemote hangupCmd = new RilCtrlCmds.CtrlHangupConnRemote();
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        hangupCmd.setConnectionId(1);
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        hangupCmd.setCallFailCause(16);   // normal hangup
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_HANGUP_CONN_REMOTE, 0, 0, hangupCmd);
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        log("Get response for hangup connection: " + resp.getStatus());
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("CTRL_CMD_HANGUP_CONN_REMOTE failed",
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // set the flag to false
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmd.setFlag(false);
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_TRANSITION_FLAG, 0, 0, cmd);
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resp = Msg.recv(mMockRilChannel);
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        assertTrue("Set call transition flag failed",
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
305