From 237e5944029e73d20caaf7c509473b9a6f954363 Mon Sep 17 00:00:00 2001 From: Xia Wang Date: Mon, 26 Jul 2010 18:10:27 -0700 Subject: [PATCH] Create Mock Ril Controller as a static library, Generate a simple test case using the controller, wrap tests uing mockril in a seperate package. Change-Id: Iae9422ec30963aae79cc1b58e17df6cff16955c8 --- telephony/mockril/Android.mk | 30 +++++ .../telephony/mockril/MockRilController.java | 107 ++++++++++++++++++ .../tests/telephonymockriltests/Android.mk | 14 +++ .../telephonymockriltests/AndroidManifest.xml | 40 +++++++ .../TelephonyMockTestRunner.java | 64 +++++++++++ .../functional/SimpleTestUsingMockRil.java | 49 ++++++++ 6 files changed, 304 insertions(+) create mode 100644 telephony/mockril/Android.mk create mode 100644 telephony/mockril/src/com/android/internal/telephony/mockril/MockRilController.java create mode 100644 telephony/tests/telephonymockriltests/Android.mk create mode 100644 telephony/tests/telephonymockriltests/AndroidManifest.xml create mode 100644 telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/TelephonyMockTestRunner.java create mode 100644 telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/functional/SimpleTestUsingMockRil.java diff --git a/telephony/mockril/Android.mk b/telephony/mockril/Android.mk new file mode 100644 index 0000000000000..95ae84c544c2b --- /dev/null +++ b/telephony/mockril/Android.mk @@ -0,0 +1,30 @@ +# +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# + +LOCAL_PATH:=$(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_JAVA_LIBRARIES := core framework + +LOCAL_STATIC_JAVA_LIBRARIES := librilproto-java + +LOCAL_MODULE := mockrilcontroller + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/telephony/mockril/src/com/android/internal/telephony/mockril/MockRilController.java b/telephony/mockril/src/com/android/internal/telephony/mockril/MockRilController.java new file mode 100644 index 0000000000000..39ad07dd5b73a --- /dev/null +++ b/telephony/mockril/src/com/android/internal/telephony/mockril/MockRilController.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2010, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.telephony.mockril; + +import android.os.Bundle; +import android.util.Log; + +import com.android.internal.communication.MsgHeader; +import com.android.internal.communication.Msg; +import com.android.internal.telephony.RilChannel; +import com.android.internal.telephony.ril_proto.RilCtrlCmds; +import com.android.internal.telephony.ril_proto.RilCmds; +import com.google.protobuf.micro.MessageMicro; + +import java.io.IOException; + +/** + * Contain a list of commands to control Mock RIL. Before using these commands the devices + * needs to be set with Mock RIL. Refer to hardware/ril/mockril/README.txt for details. + * + */ +public class MockRilController { + private static final String TAG = "MockRILController"; + private RilChannel mRilChannel = null; + private Msg mMessage = null; + + public MockRilController() throws IOException { + mRilChannel = RilChannel.makeRilChannel(); + } + + /** + * Close the channel after the communication is done. + * This method has to be called after the test is finished. + */ + public void closeChannel() { + mRilChannel.close(); + } + + /** + * Send commands and return true on success + * @param cmd for MsgHeader + * @param token for MsgHeader + * @param status for MsgHeader + * @param pbData for Msg data + * @return true if command is sent successfully, false if it fails + */ + private boolean sendCtrlCommand(int cmd, long token, int status, MessageMicro pbData) { + try { + Msg.send(mRilChannel, cmd, token, status, pbData); + } catch (IOException e) { + Log.v(TAG, "send command : %d failed: " + e.getStackTrace()); + return false; + } + return true; + } + + /** + * Get control response + * @return Msg if response is received, else return null. + */ + private Msg getCtrlResponse() { + Msg response = null; + try { + response = Msg.recv(mRilChannel); + } catch (IOException e) { + Log.v(TAG, "receive response for getRadioState() error: " + e.getStackTrace()); + return null; + } + return response; + } + + /** + * @return the radio state if it is valid, otherwise return -1 + */ + public int getRadioState() { + if (!sendCtrlCommand(RilCtrlCmds.CTRL_CMD_GET_RADIO_STATE, 0, 0, null)) { + return -1; + } + Msg response = getCtrlResponse(); + if (response == null) { + Log.v(TAG, "failed to get response"); + return -1; + } + response.printHeader(TAG); + RilCtrlCmds.CtrlRspRadioState resp = + response.getDataAs(RilCtrlCmds.CtrlRspRadioState.class); + int state = resp.getState(); + if ((state >= RilCmds.RADIO_STATE_OFF) && (state <= RilCmds.RADIO_STATE_NV_READY)) + return state; + else + return -1; + } +} diff --git a/telephony/tests/telephonymockriltests/Android.mk b/telephony/tests/telephonymockriltests/Android.mk new file mode 100644 index 0000000000000..9731d0d0059d4 --- /dev/null +++ b/telephony/tests/telephonymockriltests/Android.mk @@ -0,0 +1,14 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_STATIC_JAVA_LIBRARIES := mockrilcontroller + +LOCAL_JAVA_LIBRARIES := android.test.runner + +LOCAL_PACKAGE_NAME := TelephonyMockRilTests + +include $(BUILD_PACKAGE) diff --git a/telephony/tests/telephonymockriltests/AndroidManifest.xml b/telephony/tests/telephonymockriltests/AndroidManifest.xml new file mode 100644 index 0000000000000..63f44a2d8a6fe --- /dev/null +++ b/telephony/tests/telephonymockriltests/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/TelephonyMockTestRunner.java b/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/TelephonyMockTestRunner.java new file mode 100644 index 0000000000000..78ee73809cfa8 --- /dev/null +++ b/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/TelephonyMockTestRunner.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.telephonymockriltests; + +import android.os.Bundle; +import android.test.InstrumentationTestRunner; +import android.test.InstrumentationTestSuite; +import com.android.internal.telephony.mockril.MockRilController; +import android.util.Log; + +import com.android.telephonymockriltests.functional.SimpleTestUsingMockRil; + +import java.io.IOException; +import junit.framework.TestSuite; +import junit.framework.TestCase; + +/** + * Test runner for telephony tests that using Mock RIL + * + */ +public class TelephonyMockTestRunner extends InstrumentationTestRunner { + private static final String TAG="TelephonyMockTestRunner"; + public MockRilController mController; + + @Override + public TestSuite getAllTests() { + TestSuite suite = new InstrumentationTestSuite(this); + suite.addTestSuite(SimpleTestUsingMockRil.class); + return suite; + } + + @Override + public void onCreate(Bundle icicle) { + try { + mController = new MockRilController(); + } catch (IOException e) { + e.printStackTrace(); + TestCase.assertTrue("Create Mock RIl Controller failed", false); + } + TestCase.assertNotNull(mController); + super.onCreate(icicle); + } + + @Override + public void finish(int resultCode, Bundle results) { + if (mController != null) + mController.closeChannel(); + super.finish(resultCode, results); + } +} diff --git a/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/functional/SimpleTestUsingMockRil.java b/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/functional/SimpleTestUsingMockRil.java new file mode 100644 index 0000000000000..87001c8f0829a --- /dev/null +++ b/telephony/tests/telephonymockriltests/src/com/android/telephonymockriltests/functional/SimpleTestUsingMockRil.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.telephonymockriltests.functional; + +import com.android.internal.telephony.mockril.MockRilController; +import android.test.InstrumentationTestCase; +import android.util.Log; + +import com.android.telephonymockriltests.TelephonyMockTestRunner; + +/** + * A simple test that using Mock RIL Controller + */ +public class SimpleTestUsingMockRil extends InstrumentationTestCase { + private static final String TAG = "SimpleTestUsingMockRil"; + private MockRilController mMockRilCtrl = null; + private TelephonyMockTestRunner mRunner; + + @Override + public void setUp() throws Exception { + super.setUp(); + mRunner = (TelephonyMockTestRunner)getInstrumentation(); + mMockRilCtrl = mRunner.mController; + assertNotNull(mMockRilCtrl); + } + + /** + * Get the current radio state of RIL + */ + public void testGetRadioState() { + int state = mMockRilCtrl.getRadioState(); + Log.v(TAG, "testGetRadioState: " + state); + assertTrue(state >= 0 && state <= 9); + } +}