1 /* 2 * Copyright (C) 2023 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.mms.service; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.mock; 23 import static org.mockito.Mockito.never; 24 import static org.mockito.Mockito.spy; 25 import static org.mockito.Mockito.verify; 26 import static org.mockito.Mockito.when; 27 28 import android.content.Context; 29 import android.net.ConnectivityManager; 30 import android.net.Network; 31 import android.os.Bundle; 32 import android.telephony.ServiceState; 33 import android.telephony.SubscriptionManager; 34 import android.telephony.TelephonyManager; 35 36 import androidx.test.core.app.ApplicationProvider; 37 38 import org.junit.After; 39 import org.junit.Before; 40 import org.mockito.MockitoAnnotations; 41 import org.mockito.Spy; 42 import org.junit.Test; 43 44 import static org.mockito.ArgumentMatchers.anyInt; 45 import static org.mockito.Mockito.reset; 46 47 import android.util.Log; 48 49 public class MmsHttpClientTest { 50 // Mocked classes 51 private Context mContext; 52 private TelephonyManager mTelephonyManager; 53 private SubscriptionManager mSubscriptionManager; 54 55 // The raw phone number from TelephonyManager.getLine1Number 56 private static final String MACRO_LINE1 = "LINE1"; 57 // The phone number without country code 58 private static final String MACRO_LINE1NOCOUNTRYCODE = "LINE1NOCOUNTRYCODE"; 59 private String line1Number = "1234567890"; 60 private String subscriberPhoneNumber = "0987654321"; 61 private int subId = 1; 62 63 @Before setUp()64 public void setUp() { 65 MockitoAnnotations.initMocks(this); 66 mContext = spy(ApplicationProvider.getApplicationContext()); 67 mTelephonyManager = mock(TelephonyManager.class); 68 mSubscriptionManager = mock(SubscriptionManager.class); 69 70 when(mContext.getSystemService(Context.TELEPHONY_SERVICE)) 71 .thenReturn(mTelephonyManager); 72 when(mTelephonyManager.createForSubscriptionId(anyInt())) 73 .thenReturn(mTelephonyManager); 74 when(mContext.getSystemService(SubscriptionManager.class)) 75 .thenReturn(mSubscriptionManager); 76 } 77 78 @After tearDown()79 public void tearDown() { 80 mContext = null; 81 mTelephonyManager = null; 82 mSubscriptionManager = null; 83 } 84 85 @Test getPhoneNumberForMacroLine1()86 public void getPhoneNumberForMacroLine1() { 87 String macro = MACRO_LINE1; 88 Bundle mmsConfig = new Bundle(); 89 String emptyStr = ""; 90 String phoneNo; 91 92 /* when getLine1Number returns valid number */ 93 doReturn(line1Number).when(mTelephonyManager).getLine1Number(); 94 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 95 assertThat(phoneNo).isEqualTo(line1Number); 96 // getLine1NumberAPI should be called 97 verify(mTelephonyManager).getLine1Number(); 98 // getPhoneNumber should never be called 99 verify(mSubscriptionManager, never()).getPhoneNumber(subId); 100 101 /* when getLine1Number returns empty string */ 102 doReturn(emptyStr).when(mTelephonyManager).getLine1Number(); 103 when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); 104 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 105 assertThat(phoneNo).isEqualTo(subscriberPhoneNumber); 106 verify(mSubscriptionManager).getPhoneNumber(subId); 107 108 /* when getLine1Number returns null */ 109 reset(mSubscriptionManager); 110 when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); 111 doReturn(null).when(mTelephonyManager).getLine1Number(); 112 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 113 assertThat(phoneNo).isEqualTo(subscriberPhoneNumber); 114 verify(mSubscriptionManager).getPhoneNumber(subId); 115 } 116 117 @Test getPhoneNumberForMacroLine1CountryCode()118 public void getPhoneNumberForMacroLine1CountryCode() throws Exception { 119 String macro = MACRO_LINE1NOCOUNTRYCODE; 120 String emptyStr = ""; 121 String phoneNo; 122 Bundle mmsConfig = new Bundle(); 123 124 /* when getLine1Number returns valid number */ 125 doReturn(line1Number).when(mTelephonyManager).getLine1Number(); 126 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 127 assertThat(phoneNo).contains(line1Number); 128 // getLine1NumberAPI should be called 129 verify(mTelephonyManager).getLine1Number(); 130 // getPhoneNumber should never be called 131 verify(mSubscriptionManager, never()).getPhoneNumber(subId); 132 133 /* when getLine1Number returns empty string */ 134 doReturn(emptyStr).when(mTelephonyManager).getLine1Number(); 135 when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); 136 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 137 assertThat(phoneNo).contains(subscriberPhoneNumber); 138 verify(mSubscriptionManager).getPhoneNumber(subId); 139 140 /* when getLine1Number returns null */ 141 reset(mSubscriptionManager); 142 when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); 143 doReturn(null).when(mTelephonyManager).getLine1Number(); 144 phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); 145 assertThat(phoneNo).contains(subscriberPhoneNumber); 146 verify(mSubscriptionManager).getPhoneNumber(subId); 147 } 148 } 149