1afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang/*
2afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * Copyright (C) 2010 The Android Open Source Project
3afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang *
4afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * Licensed under the Apache License, Version 2.0 (the "License");
5afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * you may not use this file except in compliance with the License.
6afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * You may obtain a copy of the License at
7afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang *
8afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang *      http://www.apache.org/licenses/LICENSE-2.0
9afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang *
10afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * Unless required by applicable law or agreed to in writing, software
11afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * distributed under the License is distributed on an "AS IS" BASIS,
12afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * See the License for the specific language governing permissions and
14afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang * limitations under the License.
15afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang */
16afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
17afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangpackage com.android.internal.telephony.mockril;
18afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
19afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport android.util.Log;
20afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport android.test.InstrumentationTestCase;
21afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
22afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport java.io.IOException;
23afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport java.nio.ByteBuffer;
24afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
25afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.internal.communication.MsgHeader;
26afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.internal.communication.Msg;
27afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.internal.telephony.RilChannel;
28afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.internal.telephony.ril_proto.RilCtrlCmds;
29afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.internal.telephony.ril_proto.RilCmds;
30afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
31afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.android.frameworks.telephonytests.TelephonyMockRilTestRunner;
32afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangimport com.google.protobuf.micro.InvalidProtocolBufferMicroException;
33afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
34afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang// Test suite for test ril
35afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wangpublic class MockRilTest extends InstrumentationTestCase {
36afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    private static final String TAG = "MockRilTest";
37afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
38afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    RilChannel mMockRilChannel;
39afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    TelephonyMockRilTestRunner mRunner;
40afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
41afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    @Override
42afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    protected void setUp() throws Exception {
43afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        super.setUp();
44afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mRunner = (TelephonyMockRilTestRunner)getInstrumentation();
45afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mMockRilChannel = mRunner.mMockRilChannel;
46afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
47afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
48afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    @Override
49afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    protected void tearDown() throws Exception {
50afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        super.tearDown();
51afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
52afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
53afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    static void log(String s) {
54afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Log.v(TAG, s);
55afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
56afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
57afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    /**
58ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test Case 1: Test protobuf serialization and deserialization
59afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang     * @throws InvalidProtocolBufferMicroException
60afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang     */
61afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    public void testProtobufSerDes() throws InvalidProtocolBufferMicroException {
62afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testProtobufSerdes E");
63afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
64afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        RilCtrlCmds.CtrlRspRadioState rs = new RilCtrlCmds.CtrlRspRadioState();
65afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected rs.state == 0 was %d", rs.getState()),
66afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                rs.getState() == 0);
67afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        rs.setState(1);
68afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected rs.state == 1 was %d", rs.getState()),
69afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                rs.getState() == 1);
70afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
71afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        byte[] rs_ser = rs.toByteArray();
72afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        RilCtrlCmds.CtrlRspRadioState rsNew = RilCtrlCmds.CtrlRspRadioState.parseFrom(rs_ser);
73afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected rsNew.state == 1 was %d", rs.getState()),
74afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                rs.getState() == 1);
75afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
76afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testProtobufSerdes X");
77afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
78afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
79afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    /**
80ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 2: Test echo command works using writeMsg & readMsg
81afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang     */
82afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    public void testEchoMsg() throws IOException {
83afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testEchoMsg E");
84afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
85afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        MsgHeader mh = new MsgHeader();
86afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setCmd(0);
87afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setToken(1);
88afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setStatus(2);
89afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        ByteBuffer data = ByteBuffer.allocate(3);
90afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        data.put((byte)3);
91afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        data.put((byte)4);
92afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        data.put((byte)5);
93afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg.send(mMockRilChannel, mh, data);
94afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
95afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg respMsg = Msg.recv(mMockRilChannel);
96afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.header.cmd == 0 was %d",respMsg.getCmd()),
97afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getCmd() == 0);
98afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.header.token == 1 was %d",respMsg.getToken()),
99afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getToken() == 1);
100afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.header.status == 2 was %d", respMsg.getStatus()),
101afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getStatus() == 2);
102afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.data[0] == 3 was %d", respMsg.getData(0)),
103afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getData(0) == 3);
104afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.data[1] == 4 was %d", respMsg.getData(1)),
105afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getData(1) == 4);
106afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected mhd.data[2] == 5 was %d", respMsg.getData(2)),
107afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                respMsg.getData(2) == 5);
108afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
109afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testEchoMsg X");
110afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
111afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
112afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    /**
113ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 3: Test get as
114afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang     */
115afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    public void testGetAs() {
116afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testGetAs E");
117afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
118afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        // Use a message header as the protobuf data content
119afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        MsgHeader mh = new MsgHeader();
120afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setCmd(12345);
121afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setToken(9876);
122afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setStatus(7654);
123afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mh.setLengthData(4321);
124afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        byte[] data = mh.toByteArray();
125afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        MsgHeader mhResult = Msg.getAs(MsgHeader.class, data);
126afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
127afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected cmd == 12345 was %d", mhResult.getCmd()),
128afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getCmd() == 12345);
129afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected token == 9876 was %d", mhResult.getToken()),
130afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getToken() == 9876);
131afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected status == 7654 was %d", mhResult.getStatus()),
132afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getStatus() == 7654);
133afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected lengthData == 4321 was %d", mhResult.getLengthData()),
134afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getLengthData() == 4321);
135afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
136afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg msg = Msg.obtain();
137afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        msg.setData(ByteBuffer.wrap(data));
138afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
139afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        mhResult = msg.getDataAs(MsgHeader.class);
140afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
141afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected cmd == 12345 was %d", mhResult.getCmd()),
142afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getCmd() == 12345);
143afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected token == 9876 was %d", mhResult.getToken()),
144afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getToken() == 9876);
145afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected status == 7654 was %d", mhResult.getStatus()),
146afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getStatus() == 7654);
147afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected lengthData == 4321 was %d", mhResult.getLengthData()),
148afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                mhResult.getLengthData() == 4321);
149afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
150afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testGetAs X");
151afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
152afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
153ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    /**
154ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 3: test get radio state
155ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     */
156afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    public void testGetRadioState() throws IOException {
157afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testGetRadioState E");
158afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
159afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg.send(mMockRilChannel, 1, 9876, 0, null);
160afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
161afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg resp = Msg.recv(mMockRilChannel);
162afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        //resp.printHeader("testGetRadioState");
163afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
164afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected cmd == 1 was %d", resp.getCmd()),
165afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                resp.getCmd() == 1);
166afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected token == 9876 was %d", resp.getToken()),
167afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                resp.getToken() == 9876);
168afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected status == 0 was %d", resp.getStatus()),
169afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                resp.getStatus() == 0);
170afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
171afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        RilCtrlCmds.CtrlRspRadioState rsp = resp.getDataAs(RilCtrlCmds.CtrlRspRadioState.class);
172afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
173afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        int state = rsp.getState();
174afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testGetRadioState state=" + state);
175afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(String.format("expected RadioState >= 0 && RadioState <= 9 was %d", state),
176afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang                ((state >= 0) && (state <= 9)));
177afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
178afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testGetRadioState X");
179afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
180afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
181ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    /**
182ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 5: test set radio state
183ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     */
184afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    public void testSetRadioState() throws IOException {
185afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("testSetRadioState E");
186afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
187afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        RilCtrlCmds.CtrlReqRadioState cmdrs = new RilCtrlCmds.CtrlReqRadioState();
188afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertEquals(0, cmdrs.getState());
189afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
190afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        cmdrs.setState(RilCmds.RADIOSTATE_SIM_NOT_READY);
191afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertEquals(2, cmdrs.getState());
192afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
193afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_RADIO_STATE, 0, 0, cmdrs);
194afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
195afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        Msg resp = Msg.recv(mMockRilChannel);
196ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("get response status :" + resp.getStatus());
197ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("get response for command: " + resp.getCmd());
198ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("get command token: " + resp.getToken());
199afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
200afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        RilCtrlCmds.CtrlRspRadioState rsp = resp.getDataAs(RilCtrlCmds.CtrlRspRadioState.class);
201afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang
202afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        int state = rsp.getState();
203afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        log("get response for testSetRadioState: " + state);
204afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang        assertTrue(RilCmds.RADIOSTATE_SIM_NOT_READY == state);
205afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang    }
206ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
207ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    /**
208ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 6: test start incoming call and hangup it.
209ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     */
210ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    public void testStartIncomingCallAndHangup() throws IOException {
211ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("testStartIncomingCallAndHangup");
212ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        RilCtrlCmds.CtrlReqSetMTCall cmd = new RilCtrlCmds.CtrlReqSetMTCall();
213ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        String incomingCall = "6502889108";
214ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // set the MT call
215ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        cmd.setPhoneNumber(incomingCall);
216ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_MT_CALL, 0, 0, cmd);
217ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // get response
218ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg resp = Msg.recv(mMockRilChannel);
219ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response status: " + resp.getStatus());
220ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("The ril is not in a proper state to set MT calls.",
221ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
222ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
223ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // allow the incoming call alerting for some time
224ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        try {
225ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang            Thread.sleep(5000);
226ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        } catch (InterruptedException e) {}
227ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
228ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // we are playing a trick to assume the current is 1
229ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        RilCtrlCmds.CtrlHangupConnRemote hangupCmd = new RilCtrlCmds.CtrlHangupConnRemote();
230ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        hangupCmd.setConnectionId(1);
231ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        hangupCmd.setCallFailCause(16);   // normal hangup
232ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_HANGUP_CONN_REMOTE, 0, 0, hangupCmd);
233ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
234ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // get response
235ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
236ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response for hangup connection: " + resp.getStatus());
237ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("CTRL_CMD_HANGUP_CONN_REMOTE failed",
238ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
239ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    }
240ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
241ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    /**
242ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     * Test case 7: test set call transition flag
243ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang     */
244ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    public void testSetCallTransitionFlag() throws IOException {
245ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("testSetCallTransitionFlag");
246ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // Set flag to true:
247ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        RilCtrlCmds.CtrlSetCallTransitionFlag cmd = new RilCtrlCmds.CtrlSetCallTransitionFlag();
248ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        cmd.setFlag(true);
249ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_TRANSITION_FLAG, 0, 0, cmd);
250ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
251ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg resp = Msg.recv(mMockRilChannel);
252ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response status: " + resp.getStatus());
253ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("Set call transition flag failed",
254ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
255ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
256ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // add a dialing call
257ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        RilCtrlCmds.CtrlReqAddDialingCall cmdDialCall = new RilCtrlCmds.CtrlReqAddDialingCall();
258ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        String phoneNumber = "5102345678";
259ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        cmdDialCall.setPhoneNumber(phoneNumber);
260ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_ADD_DIALING_CALL, 0, 0, cmdDialCall);
261ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
262ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response status for adding a dialing call: " + resp.getStatus());
263ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("add dialing call failed",
264ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
265ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        try {
266ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang            Thread.sleep(5000);
267ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        } catch (InterruptedException e) {}
268ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
269ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // send command to force call state change
270ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_ALERT, 0, 0, null);
271ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
272ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response status: " + resp.getStatus());
273ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("Set call alert failed",
274ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
275ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
276ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        try {
277ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang            Thread.sleep(2000);
278ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        } catch (InterruptedException e) {}
279ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
280ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // send command to force call state change
281ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_ACTIVE, 0, 0, null);
282ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
283ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response status: " + resp.getStatus());
284ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("Set call active failed",
285ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
286ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
287ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // hangup the active all remotely
288ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        RilCtrlCmds.CtrlHangupConnRemote hangupCmd = new RilCtrlCmds.CtrlHangupConnRemote();
289ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        hangupCmd.setConnectionId(1);
290ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        hangupCmd.setCallFailCause(16);   // normal hangup
291ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_HANGUP_CONN_REMOTE, 0, 0, hangupCmd);
292ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
293ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        log("Get response for hangup connection: " + resp.getStatus());
294ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("CTRL_CMD_HANGUP_CONN_REMOTE failed",
295ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
296ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang
297ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        // set the flag to false
298ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        cmd.setFlag(false);
299ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        Msg.send(mMockRilChannel, RilCtrlCmds.CTRL_CMD_SET_CALL_TRANSITION_FLAG, 0, 0, cmd);
300ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        resp = Msg.recv(mMockRilChannel);
301ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang        assertTrue("Set call transition flag failed",
302ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang                   resp.getStatus() == RilCtrlCmds.CTRL_STATUS_OK);
303ffcb68719bca6816fc0f39135b41b4c7320042d5Xia Wang    }
304afeeaf351a6d48ff218b31775de9b73c8848eba5Xia Wang}
305