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