[CTS]PhoneNumberUtilsTest-- testGetMethods&&ManagedProfileTest-- testManagedContacts

23091 단어 CTS
[CTS] android. telephony. cts. Phone NumberUtils Test – testGetMethods [CTS] com. android. cts. devicepolicy. Managed Profile Test – testManaged Contacts 이 두 CTS 오 류 는 모두 시스템 이 contacts 동기 화 를 시 작 했 기 때문에 발생 한 것 입 니 다. 첫 번 째 문 제 를 구체 적 으로 분석 하 겠 습 니 다. Android 6.0 QCOM
오류 정 보 는 다음 과 같 습 니 다.
cts-tf > run cts -c android.telephony.cts.PhoneNumberUtilsTest -m testGetMethods  --skip-preconditions

android.telephony.cts.PhoneNumberUtilsTest#testGetMethods FAIL 
junit.framework.AssertionFailedError: Expected:  but was: +16175551212 //            ,       null           
at junit.framework.Assert.fail(Assert.java:50)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertNull(Assert.java:237)
at junit.framework.Assert.assertNull(Assert.java:230)
at android.telephony.cts.PhoneNumberUtilsTest.testGetMethods(PhoneNumberUtilsTest.java:138)
at java.lang.reflect.Method.invoke(Native Method)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:115)
at android.support.test.internal.runner.junit3.AndroidTestResult.runProtected(AndroidTestResult.java:77)
at junit.framework.TestResult.run(TestResult.java:118)
at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:55)
at junit.framework.TestCase.run(TestCase.java:124)
at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63)
at android.support.test.internal.runner.junit3.AndroidTestSuite$1.run(AndroidTestSuite.java:98)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)

분석 절차
log 정 보 를 통 해 우 리 는 Phone NumberUtils Test. java: 138 줄 코드 를 다음 과 같이 볼 수 있 습 니 다.
    public void testGetMethods() throws RemoteException {
        // Test getStrippedReversed
        assertNull(PhoneNumberUtils.getStrippedReversed(null));
        assertEquals("14145550071", PhoneNumberUtils.getStrippedReversed("1-700-555-4141"));
        assertEquals("14145550071", PhoneNumberUtils.getStrippedReversed("1-700-555-4141,1234"));
        assertEquals("14145550071", PhoneNumberUtils.getStrippedReversed("1-700-555-4141;1234"));
        assertEquals("NN145550071", PhoneNumberUtils.getStrippedReversed("1-700-555-41NN"));
        assertEquals("", PhoneNumberUtils.getStrippedReversed(""));
        assertEquals("#130#*+", PhoneNumberUtils.getStrippedReversed("+*#031#"));

        // Test getFormatTypeForLocale
        int formatType = PhoneNumberUtils.getFormatTypeForLocale(Locale.CHINA);
        assertEquals(PhoneNumberUtils.FORMAT_UNKNOWN, formatType);
        formatType = PhoneNumberUtils.getFormatTypeForLocale(Locale.US);
        assertEquals(PhoneNumberUtils.FORMAT_NANP, formatType);
        formatType = PhoneNumberUtils.getFormatTypeForLocale(Locale.JAPAN);
        assertEquals(PhoneNumberUtils.FORMAT_JAPAN, formatType);

        // Test getNumberFromIntent, query nothing, return null.
        Intent intent = new Intent();
        intent.setData(Contacts.People.CONTENT_URI);//CONTENT_URI = Uri.parse("content://contacts/people")
        Context context = getContext();
        assertNull(PhoneNumberUtils.getNumberFromIntent(intent, context));//        

        intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:+18005555555"));
        assertEquals("+18005555555", PhoneNumberUtils.getNumberFromIntent(intent, getContext()));

        ContentResolver cr = getContext().getContentResolver();
        Uri personRecord = null;
        Uri phoneRecord = null;
        try {
            // insert a contact with phone number
            ContentValues values = new ContentValues();
            values.put(People.NAME, "CTS test contact");
            personRecord = cr.insert(People.CONTENT_URI, values);
            Uri phoneUri = Uri.withAppendedPath(personRecord, People.Phones.CONTENT_DIRECTORY);
            values.clear();
            values.put(People.Phones.TYPE, People.Phones.TYPE_HOME);
            values.put(People.Phones.NUMBER, "+18005552871");
            phoneRecord = cr.insert(phoneUri, values);

            intent = new Intent(Intent.ACTION_DIAL, phoneRecord);
            assertEquals("+18005552871",
                    PhoneNumberUtils.getNumberFromIntent(intent, getContext()));
        } finally {
            if (personRecord != null) {
                cr.delete(personRecord, null, null);
            }
            if (phoneRecord != null) {
                cr.delete(phoneRecord, null, null);
            }
        }
    }

assert Null 방법 을 보면 알 수 있 습 니 다. null 대상 에 들 어 가 려 고 예상 되 지만 실제로 CTS 를 달 릴 때 비 null 대상 이 들 어 왔 기 때문에 Phone NumberUtils. getNumberFromIntent (intent, context) 는 비 null 대상 입 니 다. 아래 코드 를 통 해 알 수 있 습 니 다.
        /**
         * The content:// style URL for this table
         * @deprecated see {@link android.provider.ContactsContract}
         */
        @Deprecated
        public static final Uri CONTENT_URI =
            Uri.parse("content://contacts/people");

        "ContactsProvider2"  //      
            android:authorities="contacts;com.android.contacts"
            android:label="@string/provider_label"
            android:multiprocess="false"
            android:exported="true"
            android:grantUriPermissions="true"
            android:readPermission="android.permission.READ_CONTACTS"
            android:writePermission="android.permission.WRITE_CONTACTS">

Phone NumberUtils. getNumberFromIntent (intent, context) 의 데 이 터 는 시스템 연락처 데이터베이스 에서 나 오고 최종 적 으로 Contacts Provider 2. query Local 방법 으로 데 이 터 를 조회 합 니 다. 이것 은 좀 이상 합 니 다. CTS 를 뛸 때 contacts 응용 프로그램 에 데이터 가 없어 야 합 니 다. 핸드폰 에 있 는 연락 처 를 보면 알 수 있 습 니 다.안에 연락 처 를 저장 하고 번 호 는 + 16175551212 이 며 계 정 유형 은 SIM 입 니 다. 이 연락 처 는 어느 SIM 에서 데이터 베 이 스 를 가 져 왔 는 지 밝 혀 졌 습 니 다. SIM 카드 가 휴대 전화 에 삽입 되면 연락처 데 이 터 를 연락처 로 컬 데이터 베이스 에 저장 하기 때 문 입 니 다.
해결 방법
우 리 는 자동 동기 화 기능 을 닫 기만 하면 이 문 제 를 해결 할 수 있 습 니 다. 다음 과 같이 수정 할 수 있 습 니 다.
 、android/vendor/qcom/proprietary/qrdplus/Extension/config/default.prop
// true  false
//persist.env.contacts.autosync=true
persist.env.contacts.autosync=false

 、android/vendor/qcom/proprietary/qrdplus/Extension/res-overlay/vendor/qcom/proprietary/telephony-apps/SimContacts/res/values/config.xml
// true  false  
<resources>
    
    //<bool name="sim_contacts_auto_sync">truebool>
    <bool name="sim_contacts_auto_sync">falsebool>
resources>

두 번 째 문제 의 오류 정 보 는 다음 과 같 습 니 다. contacts 가 자동 으로 동기 화 될 때 만들어 진 phone 계 정과 관련 이 있 습 니 다.
04-21 15:52:47 I/bc17b500: com.android.cts.devicepolicy.ManagedProfileTest#testManagedContacts FAIL 
junit.framework.AssertionFailedError
at junit.framework.Assert.fail(Assert.java:48)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertTrue(Assert.java:27)
at com.android.cts.devicepolicy.ManagedProfileTest.testManagedContacts(ManagedProfileTest.java:444)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at com.android.tradefed.testtype.DeviceTestResult$1.protect(DeviceTestResult.java:81)
at com.android.tradefed.testtype.DeviceTestResult.runProtected(DeviceTestResult.java:56)
at com.android.tradefed.testtype.DeviceTestResult.run(DeviceTestResult.java:85)
at junit.framework.TestCase.run(TestCase.java:124)
at com.android.tradefed.testtype.DeviceTestCase.run(DeviceTestCase.java:117)
at com.android.cts.tradefed.testtype.JarHostTest$TestRunnable.run(JarHostTest.java:248)
at com.android.tradefed.util.RunUtil$RunnableNotifier.run(RunUtil.java:378)


04-21 15:51:53 I/BaseDevicePolicyTest: Test com.android.cts.managedprofile.ContactsTest#testManagedProfilePhoneLookup_canNotAccessPrimaryContact: PASSED
04-21 15:51:54 I/BaseDevicePolicyTest: Test com.android.cts.managedprofile.ContactsTest#testManagedProfileEmailLookup_canNotAccessPrimaryContact: PASSED
04-21 15:51:56 I/BaseDevicePolicyTest: Test com.android.cts.managedprofile.ContactsTest#testManagedProfileEnterprisePhoneLookup_canAccessEnterpriseContact: FAILURE
04-21 15:51:56 W/BaseDevicePolicyTest: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.android.cts.managedprofile.ContactsTest$ContactInfo.displayName' on a null object reference
at com.android.cts.managedprofile.ContactsTest.testManagedProfileEnterprisePhoneLookup_canAccessEnterpriseContact(ContactsTest.java:311)
at java.lang.reflect.Method.invoke(Native Method)

좋은 웹페이지 즐겨찾기