1 /* 2 * Copyright (C) 2021 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.server.appsearch; 18 19 import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; 20 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_API_CALL_STATS_LIMIT; 21 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_BYTES_OPTIMIZE_THRESHOLD; 22 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_DENYLIST; 23 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_DOC_COUNT_OPTIMIZE_THRESHOLD; 24 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_FULLY_PERSIST_JOB_INTERVAL; 25 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_COMPRESSION_LEVEL; 26 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_DOCUMENT_STORE_NAMESPACE_ID_FINGERPRINT; 27 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_INDEX_MERGE_SIZE; 28 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD; 29 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_LITE_INDEX_SORT_AT_INDEXING; 30 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_LITE_INDEX_SORT_SIZE; 31 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_MAX_PAGE_BYTES_LIMIT; 32 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_MAX_TOKEN_LENGTH; 33 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_OPTIMIZE_REBUILD_INDEX_THRESHOLD; 34 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_USE_PERSISTENT_HASHMAP; 35 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_USE_PRE_MAPPING_WITH_FILE_BACKED_VECTOR; 36 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ICING_USE_READ_ONLY_SEARCH; 37 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_LIGHTWEIGHT_PERSIST_TYPE; 38 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_LIMIT_CONFIG_DOCUMENT_COUNT_LIMIT_START_THRESHOLD; 39 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_LIMIT_CONFIG_MAX_DOCUMENT_SIZE_BYTES; 40 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_LIMIT_CONFIG_MAX_SUGGESTION_COUNT; 41 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_LIMIT_CONFIG_PER_PACKAGE_DOCUMENT_COUNT_LIMIT; 42 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_MAX_OPEN_BLOB_COUNT; 43 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS; 44 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS; 45 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_ORPHAN_BLOB_TIME_TO_LIVE_MS; 46 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_RATE_LIMIT_API_COSTS; 47 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_RATE_LIMIT_ENABLED; 48 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE; 49 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY; 50 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_DEFAULT; 51 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_BATCH_CALL_STATS; 52 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_GLOBAL_SEARCH_STATS; 53 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_INITIALIZE_STATS; 54 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_OPTIMIZE_STATS; 55 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS; 56 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_SAMPLING_INTERVAL_FOR_SEARCH_STATS; 57 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_TIME_OPTIMIZE_THRESHOLD_MILLIS; 58 import static com.android.server.appsearch.FrameworkServiceAppSearchConfig.KEY_USE_NEW_QUALIFIED_ID_JOIN_INDEX; 59 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_API_CALL_STATS_LIMIT; 60 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_BYTES_OPTIMIZE_THRESHOLD; 61 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_DOC_COUNT_OPTIMIZE_THRESHOLD; 62 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_FULLY_PERSIST_JOB_INTERVAL; 63 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_ICING_CONFIG_USE_READ_ONLY_SEARCH; 64 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD; 65 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LIMIT_CONFIG_DOCUMENT_COUNT_LIMIT_START_THRESHOLD; 66 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LIMIT_CONFIG_MAX_DOCUMENT_SIZE_BYTES; 67 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LIMIT_CONFIG_MAX_SUGGESTION_COUNT; 68 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LIMIT_CONFIG_PER_PACKAGE_DOCUMENT_COUNT_LIMIT; 69 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LITE_INDEX_SORT_AT_INDEXING; 70 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_LITE_INDEX_SORT_SIZE; 71 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_MAX_OPEN_BLOB_COUNT; 72 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS; 73 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS; 74 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_RATE_LIMIT_ENABLED; 75 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE; 76 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY; 77 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_SAMPLING_INTERVAL; 78 import static com.android.server.appsearch.ServiceAppSearchConfig.DEFAULT_TIME_OPTIMIZE_THRESHOLD_MILLIS; 79 import static com.android.server.appsearch.external.localstorage.IcingOptionsConfig.DEFAULT_ICU_DATA_FILE_ABSOLUTE_PATH; 80 import static com.android.server.appsearch.external.localstorage.IcingOptionsConfig.DEFAULT_ORPHAN_BLOB_TIME_TO_LIVE_MS; 81 import static com.android.server.appsearch.external.localstorage.IcingOptionsConfig.DEFAULT_USE_NEW_QUALIFIED_ID_JOIN_INDEX; 82 83 import static com.google.common.truth.Truth.assertThat; 84 85 import android.app.appsearch.testutil.AppSearchTestUtils; 86 import android.platform.test.annotations.RequiresFlagsDisabled; 87 import android.platform.test.annotations.RequiresFlagsEnabled; 88 import android.provider.DeviceConfig; 89 90 import com.android.appsearch.flags.Flags; 91 import com.android.modules.utils.testing.TestableDeviceConfig; 92 import com.android.server.appsearch.external.localstorage.AppSearchConfig; 93 import com.android.server.appsearch.external.localstorage.IcingOptionsConfig; 94 import com.android.server.appsearch.external.localstorage.stats.CallStats; 95 import com.android.server.appsearch.icing.proto.PersistType; 96 import com.android.server.appsearch.isolated_storage_service.IsolatedStorageServiceManager; 97 98 import org.junit.Assert; 99 import org.junit.Rule; 100 import org.junit.Test; 101 import org.junit.rules.RuleChain; 102 103 public class ServiceAppSearchConfigTest { 104 @Rule 105 public final RuleChain mRuleChain = 106 AppSearchTestUtils.createCommonTestRules() 107 .around(new TestableDeviceConfig.TestableDeviceConfigRule()); 108 109 @Test testDefaultValues_cachedMinTimeOptimizeThreshold()110 public void testDefaultValues_cachedMinTimeOptimizeThreshold() { 111 ServiceAppSearchConfig appSearchConfig = 112 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 113 114 // TODO (b/385020106): figure out how to make the default 0 timeSinceLastOptimize work 115 // with a higher threshold and return 4 hours when 116 // Flags.enable_four_hour_min_optimize_threshold is true 117 assertThat(appSearchConfig.getCachedMinTimeOptimizeThresholdMs()) 118 .isEqualTo(DEFAULT_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS); 119 } 120 121 @Test testDefaultValues_allCachedValue()122 public void testDefaultValues_allCachedValue() { 123 ServiceAppSearchConfig appSearchConfig = 124 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 125 126 assertThat(appSearchConfig.getCachedMinTimeIntervalBetweenSamplesMillis()).isEqualTo( 127 DEFAULT_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS); 128 assertThat(appSearchConfig.getCachedSamplingIntervalDefault()).isEqualTo( 129 DEFAULT_SAMPLING_INTERVAL); 130 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 131 DEFAULT_SAMPLING_INTERVAL); 132 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 133 DEFAULT_SAMPLING_INTERVAL); 134 assertThat(appSearchConfig.getCachedSamplingIntervalForInitializeStats()).isEqualTo( 135 DEFAULT_SAMPLING_INTERVAL); 136 assertThat(appSearchConfig.getCachedSamplingIntervalForSearchStats()).isEqualTo( 137 DEFAULT_SAMPLING_INTERVAL); 138 assertThat(appSearchConfig.getCachedSamplingIntervalForGlobalSearchStats()).isEqualTo( 139 DEFAULT_SAMPLING_INTERVAL); 140 assertThat(appSearchConfig.getCachedSamplingIntervalForOptimizeStats()).isEqualTo( 141 DEFAULT_SAMPLING_INTERVAL); 142 assertThat(appSearchConfig.getMaxDocumentSizeBytes()).isEqualTo( 143 DEFAULT_LIMIT_CONFIG_MAX_DOCUMENT_SIZE_BYTES); 144 assertThat(appSearchConfig.getPerPackageDocumentCountLimit()) 145 .isEqualTo(DEFAULT_LIMIT_CONFIG_PER_PACKAGE_DOCUMENT_COUNT_LIMIT); 146 assertThat(appSearchConfig.getDocumentCountLimitStartThreshold()) 147 .isEqualTo(DEFAULT_LIMIT_CONFIG_DOCUMENT_COUNT_LIMIT_START_THRESHOLD); 148 assertThat(appSearchConfig.getMaxSuggestionCount()).isEqualTo( 149 DEFAULT_LIMIT_CONFIG_MAX_SUGGESTION_COUNT); 150 assertThat(appSearchConfig.getCachedBytesOptimizeThreshold()).isEqualTo( 151 DEFAULT_BYTES_OPTIMIZE_THRESHOLD); 152 assertThat(appSearchConfig.getCachedTimeOptimizeThresholdMs()).isEqualTo( 153 DEFAULT_TIME_OPTIMIZE_THRESHOLD_MILLIS); 154 assertThat(appSearchConfig.getCachedDocCountOptimizeThreshold()).isEqualTo( 155 DEFAULT_DOC_COUNT_OPTIMIZE_THRESHOLD); 156 assertThat(appSearchConfig.getCachedApiCallStatsLimit()).isEqualTo( 157 DEFAULT_API_CALL_STATS_LIMIT); 158 assertThat(appSearchConfig.getCachedDenylist()).isEqualTo(Denylist.EMPTY_INSTANCE); 159 assertThat(appSearchConfig.getMaxTokenLength()).isEqualTo( 160 IcingOptionsConfig.DEFAULT_MAX_TOKEN_LENGTH); 161 assertThat(appSearchConfig.getIndexMergeSize()).isEqualTo( 162 IcingOptionsConfig.DEFAULT_INDEX_MERGE_SIZE); 163 assertThat(appSearchConfig.getDocumentStoreNamespaceIdFingerprint()).isEqualTo( 164 IcingOptionsConfig.DEFAULT_DOCUMENT_STORE_NAMESPACE_ID_FINGERPRINT); 165 assertThat(appSearchConfig.getOptimizeRebuildIndexThreshold()).isEqualTo( 166 IcingOptionsConfig.DEFAULT_OPTIMIZE_REBUILD_INDEX_THRESHOLD); 167 assertThat(appSearchConfig.getCompressionLevel()).isEqualTo( 168 IcingOptionsConfig.DEFAULT_COMPRESSION_LEVEL); 169 assertThat(appSearchConfig.getUseReadOnlySearch()).isEqualTo( 170 DEFAULT_ICING_CONFIG_USE_READ_ONLY_SEARCH); 171 assertThat(appSearchConfig.getUsePreMappingWithFileBackedVector()).isEqualTo( 172 IcingOptionsConfig.DEFAULT_USE_PREMAPPING_WITH_FILE_BACKED_VECTOR); 173 assertThat(appSearchConfig.getUsePersistentHashMap()).isEqualTo( 174 IcingOptionsConfig.DEFAULT_USE_PERSISTENT_HASH_MAP); 175 // TODO: b/389105038 - remove this temporary workaround for binder transaction limit. 176 assertThat(appSearchConfig.getMaxPageBytesLimit()) 177 .isAnyOf( 178 IcingOptionsConfig.DEFAULT_MAX_PAGE_BYTES_LIMIT, 179 IsolatedStorageServiceManager 180 .DEFAULT_MAX_PAGE_BYTES_LIMIT_FOR_ISOLATED_STORAGE); 181 assertThat(appSearchConfig.getCachedRateLimitEnabled()).isEqualTo( 182 DEFAULT_RATE_LIMIT_ENABLED); 183 AppSearchRateLimitConfig rateLimitConfig = appSearchConfig.getCachedRateLimitConfig(); 184 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo( 185 DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY); 186 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 187 (int) (DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 188 * DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY)); 189 // Check that rate limit api costs are set to default 190 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENT)).isEqualTo( 191 AppSearchRateLimitConfig.DEFAULT_API_COST); 192 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NEXT_PAGE)).isEqualTo( 193 AppSearchRateLimitConfig.DEFAULT_API_COST); 194 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo( 195 AppSearchRateLimitConfig.DEFAULT_API_COST); 196 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo( 197 AppSearchRateLimitConfig.DEFAULT_API_COST); 198 assertThat(appSearchConfig.getIntegerIndexBucketSplitThreshold()).isEqualTo( 199 DEFAULT_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD); 200 assertThat(appSearchConfig.getLiteIndexSortAtIndexing()).isEqualTo( 201 DEFAULT_LITE_INDEX_SORT_AT_INDEXING); 202 assertThat(appSearchConfig.getLiteIndexSortSize()).isEqualTo(DEFAULT_LITE_INDEX_SORT_SIZE); 203 assertThat(appSearchConfig.getUseNewQualifiedIdJoinIndex()) 204 .isEqualTo(DEFAULT_USE_NEW_QUALIFIED_ID_JOIN_INDEX); 205 assertThat(appSearchConfig.getCachedFullyPersistJobIntervalMillis()) 206 .isEqualTo(DEFAULT_FULLY_PERSIST_JOB_INTERVAL); 207 assertThat(appSearchConfig.getMaxOpenBlobCount()).isEqualTo(DEFAULT_MAX_OPEN_BLOB_COUNT); 208 assertThat(appSearchConfig.getOrphanBlobTimeToLiveMs()) 209 .isEqualTo(DEFAULT_ORPHAN_BLOB_TIME_TO_LIVE_MS); 210 assertThat(appSearchConfig.getIcuDataFileAbsolutePath()) 211 .isEqualTo(DEFAULT_ICU_DATA_FILE_ABSOLUTE_PATH); 212 } 213 214 @Test testCustomizedValue_minTimeIntervalBetweenSamplesMillis()215 public void testCustomizedValue_minTimeIntervalBetweenSamplesMillis() { 216 final long minTimeIntervalBetweenSamplesMillis = -1; 217 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 218 KEY_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS, 219 Long.toString(minTimeIntervalBetweenSamplesMillis), 220 false); 221 222 ServiceAppSearchConfig appSearchConfig = 223 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 224 225 assertThat(appSearchConfig.getCachedMinTimeIntervalBetweenSamplesMillis()).isEqualTo( 226 minTimeIntervalBetweenSamplesMillis); 227 } 228 229 @Test testCustomizedValueOverride_minTimeIntervalBetweenSamplesMillis()230 public void testCustomizedValueOverride_minTimeIntervalBetweenSamplesMillis() { 231 long minTimeIntervalBetweenSamplesMillis = -1; 232 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 233 KEY_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS, 234 Long.toString(minTimeIntervalBetweenSamplesMillis), 235 false); 236 ServiceAppSearchConfig appSearchConfig = 237 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 238 239 minTimeIntervalBetweenSamplesMillis = -2; 240 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 241 KEY_MIN_TIME_INTERVAL_BETWEEN_SAMPLES_MILLIS, 242 Long.toString(minTimeIntervalBetweenSamplesMillis), 243 false); 244 245 assertThat(appSearchConfig.getCachedMinTimeIntervalBetweenSamplesMillis()).isEqualTo( 246 minTimeIntervalBetweenSamplesMillis); 247 } 248 249 @Test testCustomizedValue_allSamplingIntervals()250 public void testCustomizedValue_allSamplingIntervals() { 251 final int samplingIntervalDefault = -1; 252 final int samplingIntervalPutDocumentStats = -2; 253 final int samplingIntervalBatchCallStats = -3; 254 final int samplingIntervalInitializeStats = -4; 255 final int samplingIntervalSearchStats = -5; 256 final int samplingIntervalGlobalSearchStats = -6; 257 final int samplingIntervalOptimizeStats = -7; 258 259 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 260 KEY_SAMPLING_INTERVAL_DEFAULT, 261 Integer.toString(samplingIntervalDefault), 262 false); 263 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 264 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 265 Integer.toString(samplingIntervalPutDocumentStats), 266 false); 267 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 268 KEY_SAMPLING_INTERVAL_FOR_BATCH_CALL_STATS, 269 Integer.toString(samplingIntervalBatchCallStats), 270 false); 271 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 272 KEY_SAMPLING_INTERVAL_FOR_INITIALIZE_STATS, 273 Integer.toString(samplingIntervalInitializeStats), 274 false); 275 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 276 KEY_SAMPLING_INTERVAL_FOR_SEARCH_STATS, 277 Integer.toString(samplingIntervalSearchStats), 278 false); 279 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 280 KEY_SAMPLING_INTERVAL_FOR_GLOBAL_SEARCH_STATS, 281 Integer.toString(samplingIntervalGlobalSearchStats), 282 false); 283 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 284 KEY_SAMPLING_INTERVAL_FOR_OPTIMIZE_STATS, 285 Integer.toString(samplingIntervalOptimizeStats), 286 false); 287 288 ServiceAppSearchConfig appSearchConfig = 289 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 290 291 assertThat(appSearchConfig.getCachedSamplingIntervalDefault()).isEqualTo( 292 samplingIntervalDefault); 293 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 294 samplingIntervalPutDocumentStats); 295 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 296 samplingIntervalBatchCallStats); 297 assertThat(appSearchConfig.getCachedSamplingIntervalForInitializeStats()).isEqualTo( 298 samplingIntervalInitializeStats); 299 assertThat(appSearchConfig.getCachedSamplingIntervalForSearchStats()).isEqualTo( 300 samplingIntervalSearchStats); 301 assertThat(appSearchConfig.getCachedSamplingIntervalForGlobalSearchStats()).isEqualTo( 302 samplingIntervalGlobalSearchStats); 303 assertThat(appSearchConfig.getCachedSamplingIntervalForOptimizeStats()).isEqualTo( 304 samplingIntervalOptimizeStats); 305 } 306 307 @Test testCustomizedValueOverride_allSamplingIntervals()308 public void testCustomizedValueOverride_allSamplingIntervals() { 309 int samplingIntervalDefault = -1; 310 int samplingIntervalPutDocumentStats = -2; 311 int samplingIntervalBatchCallStats = -3; 312 int samplingIntervalInitializeStats = -4; 313 int samplingIntervalSearchStats = -5; 314 int samplingIntervalGlobalSearchStats = -6; 315 int samplingIntervalOptimizeStats = -7; 316 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 317 KEY_SAMPLING_INTERVAL_DEFAULT, 318 Integer.toString(samplingIntervalDefault), 319 false); 320 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 321 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 322 Integer.toString(samplingIntervalPutDocumentStats), 323 false); 324 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 325 KEY_SAMPLING_INTERVAL_FOR_BATCH_CALL_STATS, 326 Integer.toString(samplingIntervalBatchCallStats), 327 false); 328 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 329 KEY_SAMPLING_INTERVAL_FOR_INITIALIZE_STATS, 330 Integer.toString(samplingIntervalInitializeStats), 331 false); 332 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 333 KEY_SAMPLING_INTERVAL_FOR_SEARCH_STATS, 334 Integer.toString(samplingIntervalSearchStats), 335 false); 336 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 337 KEY_SAMPLING_INTERVAL_FOR_GLOBAL_SEARCH_STATS, 338 Integer.toString(samplingIntervalGlobalSearchStats), 339 false); 340 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 341 KEY_SAMPLING_INTERVAL_FOR_OPTIMIZE_STATS, 342 Integer.toString(samplingIntervalOptimizeStats), 343 false); 344 ServiceAppSearchConfig appSearchConfig = 345 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 346 347 // Overrides 348 samplingIntervalDefault = -4; 349 samplingIntervalPutDocumentStats = -5; 350 samplingIntervalBatchCallStats = -6; 351 samplingIntervalInitializeStats = -7; 352 samplingIntervalSearchStats = -8; 353 samplingIntervalGlobalSearchStats = -9; 354 samplingIntervalOptimizeStats = -10; 355 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 356 KEY_SAMPLING_INTERVAL_DEFAULT, 357 Integer.toString(samplingIntervalDefault), 358 false); 359 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 360 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 361 Integer.toString(samplingIntervalPutDocumentStats), 362 false); 363 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 364 KEY_SAMPLING_INTERVAL_FOR_BATCH_CALL_STATS, 365 Integer.toString(samplingIntervalBatchCallStats), 366 false); 367 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 368 KEY_SAMPLING_INTERVAL_FOR_INITIALIZE_STATS, 369 Integer.toString(samplingIntervalInitializeStats), 370 false); 371 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 372 KEY_SAMPLING_INTERVAL_FOR_SEARCH_STATS, 373 Integer.toString(samplingIntervalSearchStats), 374 false); 375 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 376 KEY_SAMPLING_INTERVAL_FOR_GLOBAL_SEARCH_STATS, 377 Integer.toString(samplingIntervalGlobalSearchStats), 378 false); 379 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 380 KEY_SAMPLING_INTERVAL_FOR_OPTIMIZE_STATS, 381 Integer.toString(samplingIntervalOptimizeStats), 382 false); 383 384 assertThat(appSearchConfig.getCachedSamplingIntervalDefault()).isEqualTo( 385 samplingIntervalDefault); 386 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 387 samplingIntervalPutDocumentStats); 388 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 389 samplingIntervalBatchCallStats); 390 assertThat(appSearchConfig.getCachedSamplingIntervalForInitializeStats()).isEqualTo( 391 samplingIntervalInitializeStats); 392 assertThat(appSearchConfig.getCachedSamplingIntervalForSearchStats()).isEqualTo( 393 samplingIntervalSearchStats); 394 assertThat(appSearchConfig.getCachedSamplingIntervalForGlobalSearchStats()).isEqualTo( 395 samplingIntervalGlobalSearchStats); 396 assertThat(appSearchConfig.getCachedSamplingIntervalForOptimizeStats()).isEqualTo( 397 samplingIntervalOptimizeStats); 398 } 399 400 /** 401 * Tests if we fall back to {@link AppSearchConfig#DEFAULT_SAMPLING_INTERVAL} if both default 402 * sampling interval and custom value are not set in DeviceConfig, and there is some other 403 * sampling interval set. 404 */ 405 @Test testFallbackToDefaultSamplingValue_useHardCodedDefault()406 public void testFallbackToDefaultSamplingValue_useHardCodedDefault() { 407 final int samplingIntervalPutDocumentStats = -1; 408 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 409 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 410 Integer.toString(samplingIntervalPutDocumentStats), 411 false); 412 413 ServiceAppSearchConfig appSearchConfig = 414 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 415 416 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 417 samplingIntervalPutDocumentStats); 418 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 419 DEFAULT_SAMPLING_INTERVAL); 420 } 421 422 // Tests if we fall back to configured default sampling interval if custom value is not set in 423 // DeviceConfig. 424 @Test testFallbackDefaultSamplingValue_useConfiguredDefault()425 public void testFallbackDefaultSamplingValue_useConfiguredDefault() { 426 final int samplingIntervalPutDocumentStats = -1; 427 final int samplingIntervalDefault = -2; 428 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 429 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 430 Integer.toString(samplingIntervalPutDocumentStats), 431 false); 432 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 433 KEY_SAMPLING_INTERVAL_DEFAULT, 434 Integer.toString(samplingIntervalDefault), 435 false); 436 437 ServiceAppSearchConfig appSearchConfig = 438 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 439 440 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 441 samplingIntervalPutDocumentStats); 442 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 443 samplingIntervalDefault); 444 } 445 446 // Tests that cached values should reflect latest values in DeviceConfig. 447 @Test testFallbackDefaultSamplingValue_defaultValueChanged()448 public void testFallbackDefaultSamplingValue_defaultValueChanged() { 449 int samplingIntervalPutDocumentStats = -1; 450 int samplingIntervalDefault = -2; 451 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 452 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 453 Integer.toString(samplingIntervalPutDocumentStats), 454 false); 455 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 456 KEY_SAMPLING_INTERVAL_DEFAULT, 457 Integer.toString(samplingIntervalDefault), 458 false); 459 460 ServiceAppSearchConfig appSearchConfig = 461 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 462 463 // Sampling values changed. 464 samplingIntervalPutDocumentStats = -3; 465 samplingIntervalDefault = -4; 466 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 467 KEY_SAMPLING_INTERVAL_FOR_PUT_DOCUMENT_STATS, 468 Integer.toString(samplingIntervalPutDocumentStats), 469 false); 470 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 471 KEY_SAMPLING_INTERVAL_DEFAULT, 472 Integer.toString(samplingIntervalDefault), 473 false); 474 475 assertThat(appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()).isEqualTo( 476 samplingIntervalPutDocumentStats); 477 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 478 samplingIntervalDefault); 479 } 480 481 // Tests default sampling interval won't affect custom sampling intervals if they are set. 482 @Test testShouldNotFallBack_ifValueConfigured()483 public void testShouldNotFallBack_ifValueConfigured() { 484 int samplingIntervalDefault = -1; 485 int samplingIntervalBatchCallStats = -2; 486 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 487 KEY_SAMPLING_INTERVAL_DEFAULT, 488 Integer.toString(samplingIntervalDefault), 489 false); 490 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 491 KEY_SAMPLING_INTERVAL_FOR_BATCH_CALL_STATS, 492 Integer.toString(samplingIntervalBatchCallStats), 493 false); 494 495 ServiceAppSearchConfig appSearchConfig = 496 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 497 498 // Default sampling interval changed. 499 samplingIntervalDefault = -3; 500 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 501 KEY_SAMPLING_INTERVAL_DEFAULT, 502 Integer.toString(samplingIntervalDefault), 503 false); 504 505 assertThat(appSearchConfig.getCachedSamplingIntervalForBatchCallStats()).isEqualTo( 506 samplingIntervalBatchCallStats); 507 } 508 509 @Test testCustomizedValueOverride_maxDocument()510 public void testCustomizedValueOverride_maxDocument() { 511 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 512 KEY_LIMIT_CONFIG_MAX_DOCUMENT_SIZE_BYTES, 513 Integer.toString(2001), 514 /*makeDefault=*/ false); 515 DeviceConfig.setProperty( 516 DeviceConfig.NAMESPACE_APPSEARCH, 517 KEY_LIMIT_CONFIG_PER_PACKAGE_DOCUMENT_COUNT_LIMIT, 518 Integer.toString(2002), 519 /* makeDefault= */ false); 520 DeviceConfig.setProperty( 521 DeviceConfig.NAMESPACE_APPSEARCH, 522 KEY_LIMIT_CONFIG_DOCUMENT_COUNT_LIMIT_START_THRESHOLD, 523 Integer.toString(2003), 524 /* makeDefault= */ false); 525 526 ServiceAppSearchConfig appSearchConfig = 527 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 528 assertThat(appSearchConfig.getMaxDocumentSizeBytes()).isEqualTo(2001); 529 assertThat(appSearchConfig.getPerPackageDocumentCountLimit()).isEqualTo(2002); 530 assertThat(appSearchConfig.getDocumentCountLimitStartThreshold()).isEqualTo(2003); 531 532 // Override 533 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 534 KEY_LIMIT_CONFIG_MAX_DOCUMENT_SIZE_BYTES, 535 Integer.toString(1775), 536 /*makeDefault=*/ false); 537 DeviceConfig.setProperty( 538 DeviceConfig.NAMESPACE_APPSEARCH, 539 KEY_LIMIT_CONFIG_PER_PACKAGE_DOCUMENT_COUNT_LIMIT, 540 Integer.toString(1776), 541 /* makeDefault= */ false); 542 DeviceConfig.setProperty( 543 DeviceConfig.NAMESPACE_APPSEARCH, 544 KEY_LIMIT_CONFIG_DOCUMENT_COUNT_LIMIT_START_THRESHOLD, 545 Integer.toString(1777), 546 /* makeDefault= */ false); 547 548 assertThat(appSearchConfig.getMaxDocumentSizeBytes()).isEqualTo(1775); 549 assertThat(appSearchConfig.getPerPackageDocumentCountLimit()).isEqualTo(1776); 550 assertThat(appSearchConfig.getDocumentCountLimitStartThreshold()).isEqualTo(1777); 551 } 552 553 @Test testCustomizedValueOverride_maxSuggestionCount()554 public void testCustomizedValueOverride_maxSuggestionCount() { 555 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 556 KEY_LIMIT_CONFIG_MAX_SUGGESTION_COUNT, 557 Integer.toString(2003), 558 /*makeDefault=*/ false); 559 560 ServiceAppSearchConfig appSearchConfig = 561 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 562 assertThat(appSearchConfig.getMaxSuggestionCount()).isEqualTo(2003); 563 564 // Override 565 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 566 KEY_LIMIT_CONFIG_MAX_SUGGESTION_COUNT, 567 Integer.toString(1777), 568 /*makeDefault=*/ false); 569 570 assertThat(appSearchConfig.getMaxSuggestionCount()).isEqualTo(1777); 571 } 572 573 @Test testCustomizedValue_optimizeThreshold()574 public void testCustomizedValue_optimizeThreshold() { 575 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 576 KEY_BYTES_OPTIMIZE_THRESHOLD, 577 Integer.toString(147147), 578 false); 579 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 580 KEY_TIME_OPTIMIZE_THRESHOLD_MILLIS, 581 Integer.toString(258258), 582 false); 583 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 584 KEY_DOC_COUNT_OPTIMIZE_THRESHOLD, 585 Integer.toString(369369), 586 false); 587 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 588 KEY_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS, 589 Integer.toString(1000), 590 false); 591 592 ServiceAppSearchConfig appSearchConfig = 593 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 594 595 assertThat(appSearchConfig.getCachedBytesOptimizeThreshold()).isEqualTo(147147); 596 assertThat(appSearchConfig.getCachedTimeOptimizeThresholdMs()).isEqualTo(258258); 597 assertThat(appSearchConfig.getCachedDocCountOptimizeThreshold()).isEqualTo(369369); 598 assertThat(appSearchConfig.getCachedMinTimeOptimizeThresholdMs()).isEqualTo(1000); 599 } 600 601 @Test testCustomizedValueOverride_optimizeThreshold()602 public void testCustomizedValueOverride_optimizeThreshold() { 603 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 604 KEY_BYTES_OPTIMIZE_THRESHOLD, 605 Integer.toString(147147), 606 false); 607 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 608 KEY_TIME_OPTIMIZE_THRESHOLD_MILLIS, 609 Integer.toString(258258), 610 false); 611 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 612 KEY_DOC_COUNT_OPTIMIZE_THRESHOLD, 613 Integer.toString(369369), 614 false); 615 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 616 KEY_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS, 617 Integer.toString(1000), 618 false); 619 620 ServiceAppSearchConfig appSearchConfig = 621 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 622 623 // Override 624 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 625 KEY_BYTES_OPTIMIZE_THRESHOLD, 626 Integer.toString(741741), 627 false); 628 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 629 KEY_TIME_OPTIMIZE_THRESHOLD_MILLIS, 630 Integer.toString(852852), 631 false); 632 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 633 KEY_DOC_COUNT_OPTIMIZE_THRESHOLD, 634 Integer.toString(963963), 635 false); 636 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 637 KEY_MIN_TIME_OPTIMIZE_THRESHOLD_MILLIS, 638 Integer.toString(2000), 639 false); 640 641 assertThat(appSearchConfig.getCachedBytesOptimizeThreshold()).isEqualTo(741741); 642 assertThat(appSearchConfig.getCachedTimeOptimizeThresholdMs()).isEqualTo(852852); 643 assertThat(appSearchConfig.getCachedDocCountOptimizeThreshold()).isEqualTo(963963); 644 assertThat(appSearchConfig.getCachedMinTimeOptimizeThresholdMs()).isEqualTo(2000); 645 } 646 647 @Test testCustomizedValue_dumpsysStatsLimit()648 public void testCustomizedValue_dumpsysStatsLimit() { 649 final long dumpsysStatsLimit = 10; 650 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 651 KEY_API_CALL_STATS_LIMIT, Long.toString(dumpsysStatsLimit), false); 652 653 ServiceAppSearchConfig appSearchConfig = 654 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 655 656 assertThat(appSearchConfig.getCachedApiCallStatsLimit()).isEqualTo(dumpsysStatsLimit); 657 } 658 659 @Test testCustomizedValueOverride_dumpsysStatsLimit()660 public void testCustomizedValueOverride_dumpsysStatsLimit() { 661 long dumpsysStatsLimit = 10; 662 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 663 KEY_API_CALL_STATS_LIMIT, Long.toString(dumpsysStatsLimit), false); 664 ServiceAppSearchConfig appSearchConfig = 665 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 666 667 long newDumpsysStatsLimit = 20; 668 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 669 KEY_API_CALL_STATS_LIMIT, Long.toString(newDumpsysStatsLimit), false); 670 671 assertThat(appSearchConfig.getCachedApiCallStatsLimit()).isEqualTo(newDumpsysStatsLimit); 672 } 673 674 @Test testCustomizedValue_denylist()675 public void testCustomizedValue_denylist() { 676 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 677 KEY_DENYLIST, "pkg=foo&db=bar&apis=localSetSchema,localGetSchema", false); 678 679 ServiceAppSearchConfig appSearchConfig = 680 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 681 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 682 CallStats.CALL_TYPE_SET_SCHEMA)).isTrue(); 683 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 684 CallStats.CALL_TYPE_GET_SCHEMA)).isTrue(); 685 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 686 CallStats.CALL_TYPE_INITIALIZE)).isFalse(); 687 } 688 689 @Test testCustomizedValueOverride_denylist()690 public void testCustomizedValueOverride_denylist() { 691 ServiceAppSearchConfig appSearchConfig = 692 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 693 694 // By default, denylist should be empty 695 for (Integer apiType : CallStats.getAllApiCallTypes()) { 696 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 697 apiType)).isFalse(); 698 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackage("foo", apiType)) 699 .isFalse(); 700 } 701 702 // Overriding with the flag creates a new denylist 703 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 704 KEY_DENYLIST, "pkg=foo&db=bar&apis=initialize", false); 705 706 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 707 CallStats.CALL_TYPE_INITIALIZE)).isTrue(); 708 709 // Overriding with an empty flag sets an empty denylist 710 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, KEY_DENYLIST, "", false); 711 712 for (Integer apiType : CallStats.getAllApiCallTypes()) { 713 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackageDatabase("foo", "bar", 714 apiType)).isFalse(); 715 assertThat(appSearchConfig.getCachedDenylist().checkDeniedPackage("foo", apiType)) 716 .isFalse(); 717 } 718 } 719 720 @Test testCustomizedValue_icingOptions()721 public void testCustomizedValue_icingOptions() { 722 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 723 KEY_ICING_MAX_TOKEN_LENGTH, Integer.toString(15), false); 724 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 725 KEY_ICING_INDEX_MERGE_SIZE, Integer.toString(1000), false); 726 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 727 KEY_ICING_DOCUMENT_STORE_NAMESPACE_ID_FINGERPRINT, Boolean.toString(true), false); 728 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 729 KEY_ICING_OPTIMIZE_REBUILD_INDEX_THRESHOLD, Float.toString(0.5f), false); 730 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 731 KEY_ICING_COMPRESSION_LEVEL, Integer.toString(5), false); 732 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 733 KEY_ICING_USE_READ_ONLY_SEARCH, Boolean.toString(false), false); 734 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 735 KEY_ICING_USE_PRE_MAPPING_WITH_FILE_BACKED_VECTOR, Boolean.toString(true), false); 736 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 737 KEY_ICING_USE_PERSISTENT_HASHMAP, Boolean.toString(true), false); 738 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 739 KEY_ICING_MAX_PAGE_BYTES_LIMIT, Integer.toString(1001), false); 740 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 741 KEY_ICING_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD, Integer.toString(1002), false); 742 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 743 KEY_ICING_LITE_INDEX_SORT_AT_INDEXING, Boolean.toString(true), false); 744 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 745 KEY_ICING_LITE_INDEX_SORT_SIZE, Integer.toString(1003), false); 746 747 ServiceAppSearchConfig appSearchConfig = 748 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 749 assertThat(appSearchConfig.getMaxTokenLength()).isEqualTo(15); 750 assertThat(appSearchConfig.getIndexMergeSize()).isEqualTo(1000); 751 assertThat(appSearchConfig.getDocumentStoreNamespaceIdFingerprint()).isEqualTo(true); 752 assertThat(appSearchConfig.getOptimizeRebuildIndexThreshold()).isEqualTo(0.5f); 753 assertThat(appSearchConfig.getCompressionLevel()).isEqualTo(5); 754 assertThat(appSearchConfig.getUseReadOnlySearch()).isEqualTo(false); 755 assertThat(appSearchConfig.getUsePreMappingWithFileBackedVector()).isEqualTo(true); 756 assertThat(appSearchConfig.getUsePersistentHashMap()).isEqualTo(true); 757 assertThat(appSearchConfig.getMaxPageBytesLimit()).isEqualTo(1001); 758 assertThat(appSearchConfig.getIntegerIndexBucketSplitThreshold()).isEqualTo(1002); 759 assertThat(appSearchConfig.getLiteIndexSortAtIndexing()).isEqualTo(true); 760 assertThat(appSearchConfig.getLiteIndexSortSize()).isEqualTo(1003); 761 } 762 763 @Test testCustomizedValueOverride_icingOptions()764 public void testCustomizedValueOverride_icingOptions() { 765 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 766 KEY_ICING_MAX_TOKEN_LENGTH, Integer.toString(15), false); 767 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 768 KEY_ICING_INDEX_MERGE_SIZE, Integer.toString(1000), false); 769 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 770 KEY_ICING_DOCUMENT_STORE_NAMESPACE_ID_FINGERPRINT, Boolean.toString(true), false); 771 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 772 KEY_ICING_OPTIMIZE_REBUILD_INDEX_THRESHOLD, Float.toString(0.5f), false); 773 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 774 KEY_ICING_COMPRESSION_LEVEL, Integer.toString(5), false); 775 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 776 KEY_ICING_USE_READ_ONLY_SEARCH, Boolean.toString(false), false); 777 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 778 KEY_ICING_USE_PRE_MAPPING_WITH_FILE_BACKED_VECTOR, Boolean.toString(true), false); 779 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 780 KEY_ICING_USE_PERSISTENT_HASHMAP, Boolean.toString(true), false); 781 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 782 KEY_ICING_MAX_PAGE_BYTES_LIMIT, Integer.toString(1001), false); 783 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 784 KEY_ICING_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD, Integer.toString(1002), false); 785 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 786 KEY_ICING_LITE_INDEX_SORT_AT_INDEXING, Boolean.toString(true), false); 787 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 788 KEY_ICING_LITE_INDEX_SORT_SIZE, Integer.toString(1003), false); 789 790 ServiceAppSearchConfig appSearchConfig = 791 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 792 793 // Override 794 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 795 KEY_ICING_MAX_TOKEN_LENGTH, Integer.toString(25), false); 796 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 797 KEY_ICING_INDEX_MERGE_SIZE, Integer.toString(2000), false); 798 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 799 KEY_ICING_DOCUMENT_STORE_NAMESPACE_ID_FINGERPRINT, Boolean.toString(false), false); 800 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 801 KEY_ICING_OPTIMIZE_REBUILD_INDEX_THRESHOLD, Float.toString(0.9f), false); 802 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 803 KEY_ICING_COMPRESSION_LEVEL, Integer.toString(9), false); 804 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 805 KEY_ICING_USE_READ_ONLY_SEARCH, Boolean.toString(true), false); 806 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 807 KEY_ICING_USE_PRE_MAPPING_WITH_FILE_BACKED_VECTOR, Boolean.toString(false), false); 808 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 809 KEY_ICING_USE_PERSISTENT_HASHMAP, Boolean.toString(false), false); 810 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 811 KEY_ICING_MAX_PAGE_BYTES_LIMIT, Integer.toString(1002), false); 812 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 813 KEY_ICING_INTEGER_INDEX_BUCKET_SPLIT_THRESHOLD, Integer.toString(1003), false); 814 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 815 KEY_ICING_LITE_INDEX_SORT_AT_INDEXING, Boolean.toString(false), false); 816 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 817 KEY_ICING_LITE_INDEX_SORT_SIZE, Integer.toString(1004), false); 818 819 assertThat(appSearchConfig.getMaxTokenLength()).isEqualTo(25); 820 assertThat(appSearchConfig.getIndexMergeSize()).isEqualTo(2000); 821 assertThat(appSearchConfig.getDocumentStoreNamespaceIdFingerprint()).isEqualTo(false); 822 assertThat(appSearchConfig.getOptimizeRebuildIndexThreshold()).isEqualTo(0.9f); 823 assertThat(appSearchConfig.getCompressionLevel()).isEqualTo(9); 824 assertThat(appSearchConfig.getUseReadOnlySearch()).isEqualTo(true); 825 assertThat(appSearchConfig.getUsePreMappingWithFileBackedVector()).isEqualTo(false); 826 assertThat(appSearchConfig.getUsePersistentHashMap()).isEqualTo(false); 827 assertThat(appSearchConfig.getMaxPageBytesLimit()).isEqualTo(1002); 828 assertThat(appSearchConfig.getIntegerIndexBucketSplitThreshold()).isEqualTo(1003); 829 assertThat(appSearchConfig.getLiteIndexSortAtIndexing()).isEqualTo(false); 830 assertThat(appSearchConfig.getLiteIndexSortSize()).isEqualTo(1004); 831 } 832 833 @Test testCustomizedValueOverride_rateLimitConfig()834 public void testCustomizedValueOverride_rateLimitConfig() { 835 ServiceAppSearchConfig appSearchConfig = 836 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 837 assertThat(appSearchConfig.getCachedRateLimitEnabled()).isEqualTo( 838 DEFAULT_RATE_LIMIT_ENABLED); 839 AppSearchRateLimitConfig rateLimitConfig = appSearchConfig.getCachedRateLimitConfig(); 840 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo( 841 DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY); 842 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 843 (int) (DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 844 * DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY)); 845 846 // Don't update rateLimitConfig when rateLimitEnabled=false. 847 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 848 KEY_RATE_LIMIT_ENABLED, Boolean.toString(false), false); 849 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 850 KEY_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, Integer.toString(12345), false); 851 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 852 KEY_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 853 Float.toString(0.78f), 854 false); 855 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 856 KEY_RATE_LIMIT_API_COSTS, 857 "localPutDocuments:5;localGetDocuments:11;localSetSchema:99", 858 false); 859 860 assertThat(appSearchConfig.getCachedRateLimitEnabled()).isFalse(); 861 // RateLimitConfig still retains original value 862 rateLimitConfig = appSearchConfig.getCachedRateLimitConfig(); 863 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo( 864 DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY); 865 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 866 (int) (DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 867 * DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY)); 868 869 // RateLimitConfig should update once rate limiting is enabled 870 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 871 KEY_RATE_LIMIT_ENABLED, Boolean.toString(true), false); 872 873 assertThat(appSearchConfig.getCachedRateLimitEnabled()).isTrue(); 874 rateLimitConfig = appSearchConfig.getCachedRateLimitConfig(); 875 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(12345); 876 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 877 (int) (12345 * 0.78)); 878 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(5); 879 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 880 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 881 // Unset API costs still equal the default 882 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo( 883 AppSearchRateLimitConfig.DEFAULT_API_COST); 884 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo( 885 AppSearchRateLimitConfig.DEFAULT_API_COST); 886 } 887 888 @Test testCustomizedValue_joins()889 public void testCustomizedValue_joins() { 890 DeviceConfig.setProperty( 891 DeviceConfig.NAMESPACE_APPSEARCH, 892 KEY_USE_NEW_QUALIFIED_ID_JOIN_INDEX, 893 Boolean.toString(true), 894 false); 895 896 ServiceAppSearchConfig appSearchConfig = 897 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 898 899 assertThat(appSearchConfig.getUseNewQualifiedIdJoinIndex()).isEqualTo(true); 900 } 901 902 @Test testCustomizedValueOverride_joins()903 public void testCustomizedValueOverride_joins() { 904 DeviceConfig.setProperty( 905 DeviceConfig.NAMESPACE_APPSEARCH, 906 KEY_USE_NEW_QUALIFIED_ID_JOIN_INDEX, 907 Boolean.toString(true), 908 false); 909 910 ServiceAppSearchConfig appSearchConfig = 911 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 912 913 // Override 914 DeviceConfig.setProperty( 915 DeviceConfig.NAMESPACE_APPSEARCH, 916 KEY_USE_NEW_QUALIFIED_ID_JOIN_INDEX, 917 Boolean.toString(false), 918 false); 919 920 assertThat(appSearchConfig.getUseNewQualifiedIdJoinIndex()).isEqualTo(false); 921 } 922 923 @Test testCustomizedValueOverride_fullyPersistJobInterval()924 public void testCustomizedValueOverride_fullyPersistJobInterval() { 925 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 926 KEY_FULLY_PERSIST_JOB_INTERVAL, 927 Integer.toString(2003), 928 /*makeDefault=*/ false); 929 930 ServiceAppSearchConfig appSearchConfig = 931 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 932 assertThat(appSearchConfig.getCachedFullyPersistJobIntervalMillis()).isEqualTo(2003); 933 934 // Override 935 DeviceConfig.setProperty(DeviceConfig.NAMESPACE_APPSEARCH, 936 KEY_FULLY_PERSIST_JOB_INTERVAL, 937 Integer.toString(1777), 938 /*makeDefault=*/ false); 939 940 assertThat(appSearchConfig.getCachedFullyPersistJobIntervalMillis()).isEqualTo(1777); 941 } 942 943 @Test testCustomizedValueOverride_blobStore()944 public void testCustomizedValueOverride_blobStore() { 945 DeviceConfig.setProperty( 946 DeviceConfig.NAMESPACE_APPSEARCH, 947 KEY_MAX_OPEN_BLOB_COUNT, 948 Integer.toString(2003), 949 /* makeDefault= */ false); 950 DeviceConfig.setProperty( 951 DeviceConfig.NAMESPACE_APPSEARCH, 952 KEY_ORPHAN_BLOB_TIME_TO_LIVE_MS, 953 Integer.toString(2004), 954 /* makeDefault= */ false); 955 956 ServiceAppSearchConfig appSearchConfig = 957 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 958 assertThat(appSearchConfig.getMaxOpenBlobCount()).isEqualTo(2003); 959 assertThat(appSearchConfig.getOrphanBlobTimeToLiveMs()).isEqualTo(2004); 960 961 // Override 962 DeviceConfig.setProperty( 963 DeviceConfig.NAMESPACE_APPSEARCH, 964 KEY_MAX_OPEN_BLOB_COUNT, 965 Integer.toString(1777), 966 /* makeDefault= */ false); 967 DeviceConfig.setProperty( 968 DeviceConfig.NAMESPACE_APPSEARCH, 969 KEY_ORPHAN_BLOB_TIME_TO_LIVE_MS, 970 Integer.toString(1778), 971 /* makeDefault= */ false); 972 973 assertThat(appSearchConfig.getMaxOpenBlobCount()).isEqualTo(1777); 974 assertThat(appSearchConfig.getOrphanBlobTimeToLiveMs()).isEqualTo(1778); 975 } 976 977 @Test 978 @RequiresFlagsDisabled(Flags.FLAG_ENABLE_RECOVERY_PROOF_PERSISTENCE) testGetLightweightPersistType_defaultValue_returnsLite()979 public void testGetLightweightPersistType_defaultValue_returnsLite() { 980 ServiceAppSearchConfig appSearchConfig = 981 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 982 assertThat(appSearchConfig.getLightweightPersistType()) 983 .isEqualTo(PersistType.Code.LITE); 984 } 985 986 @Test 987 @RequiresFlagsEnabled(Flags.FLAG_ENABLE_RECOVERY_PROOF_PERSISTENCE) testGetLightweightPersistType_defaultValue_returnsRecoveryProof()988 public void testGetLightweightPersistType_defaultValue_returnsRecoveryProof() { 989 ServiceAppSearchConfig appSearchConfig = 990 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 991 assertThat(appSearchConfig.getLightweightPersistType()) 992 .isEqualTo(PersistType.Code.RECOVERY_PROOF); 993 } 994 995 @Test testGetLightweightPersistType_valueOverride_returnsOverrideValue()996 public void testGetLightweightPersistType_valueOverride_returnsOverrideValue() { 997 DeviceConfig.setProperty( 998 DeviceConfig.NAMESPACE_APPSEARCH, 999 KEY_LIGHTWEIGHT_PERSIST_TYPE, 1000 Integer.toString(PersistType.Code.FULL.getNumber()), 1001 /* makeDefault= */ false); 1002 1003 ServiceAppSearchConfig appSearchConfig = 1004 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 1005 assertThat(appSearchConfig.getLightweightPersistType()) 1006 .isEqualTo(PersistType.Code.FULL); 1007 } 1008 1009 @Test testGetLightweightPersistType_invalidValueOverride_doesntReturnOverrideValue()1010 public void testGetLightweightPersistType_invalidValueOverride_doesntReturnOverrideValue() { 1011 // Override value to FULL so that we have a predictable value. 1012 DeviceConfig.setProperty( 1013 DeviceConfig.NAMESPACE_APPSEARCH, 1014 KEY_LIGHTWEIGHT_PERSIST_TYPE, 1015 Integer.toString(PersistType.Code.FULL.getNumber()), 1016 /* makeDefault= */ false); 1017 1018 ServiceAppSearchConfig appSearchConfig = 1019 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 1020 assertThat(appSearchConfig.getLightweightPersistType()) 1021 .isEqualTo(PersistType.Code.FULL); 1022 1023 // Now try to override it with a value that is outside of the range of PersistType.Code. 1024 DeviceConfig.setProperty( 1025 DeviceConfig.NAMESPACE_APPSEARCH, 1026 KEY_LIGHTWEIGHT_PERSIST_TYPE, 1027 Integer.toString(123), 1028 /* makeDefault= */ false); 1029 1030 assertThat(appSearchConfig.getLightweightPersistType()) 1031 .isEqualTo(PersistType.Code.FULL); 1032 } 1033 1034 @Test testNotUsable_afterClose()1035 public void testNotUsable_afterClose() { 1036 ServiceAppSearchConfig appSearchConfig = 1037 FrameworkServiceAppSearchConfig.create(DIRECT_EXECUTOR); 1038 1039 appSearchConfig.close(); 1040 1041 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1042 IllegalStateException.class, 1043 () -> appSearchConfig.getCachedMinTimeIntervalBetweenSamplesMillis()); 1044 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1045 IllegalStateException.class, 1046 () -> appSearchConfig.getCachedSamplingIntervalDefault()); 1047 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1048 IllegalStateException.class, 1049 () -> appSearchConfig.getCachedSamplingIntervalForBatchCallStats()); 1050 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1051 IllegalStateException.class, 1052 () -> appSearchConfig.getCachedSamplingIntervalForPutDocumentStats()); 1053 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1054 IllegalStateException.class, 1055 () -> appSearchConfig.getCachedSamplingIntervalForInitializeStats()); 1056 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1057 IllegalStateException.class, 1058 () -> appSearchConfig.getCachedSamplingIntervalForSearchStats()); 1059 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1060 IllegalStateException.class, 1061 () -> appSearchConfig.getCachedSamplingIntervalForGlobalSearchStats()); 1062 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1063 IllegalStateException.class, 1064 () -> appSearchConfig.getCachedSamplingIntervalForOptimizeStats()); 1065 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1066 IllegalStateException.class, 1067 () -> appSearchConfig.getMaxDocumentSizeBytes()); 1068 Assert.assertThrows( 1069 "Trying to use a closed AppSearchConfig instance.", 1070 IllegalStateException.class, 1071 () -> appSearchConfig.getPerPackageDocumentCountLimit()); 1072 Assert.assertThrows( 1073 "Trying to use a closed AppSearchConfig instance.", 1074 IllegalStateException.class, 1075 () -> appSearchConfig.getDocumentCountLimitStartThreshold()); 1076 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1077 IllegalStateException.class, 1078 () -> appSearchConfig.getMaxSuggestionCount()); 1079 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1080 IllegalStateException.class, 1081 () -> appSearchConfig.getCachedBytesOptimizeThreshold()); 1082 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1083 IllegalStateException.class, 1084 () -> appSearchConfig.getCachedTimeOptimizeThresholdMs()); 1085 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1086 IllegalStateException.class, 1087 () -> appSearchConfig.getCachedDocCountOptimizeThreshold()); 1088 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1089 IllegalStateException.class, 1090 () -> appSearchConfig.getCachedApiCallStatsLimit()); 1091 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1092 IllegalStateException.class, 1093 () -> appSearchConfig.getCachedDenylist()); 1094 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1095 IllegalStateException.class, 1096 () -> appSearchConfig.getMaxTokenLength()); 1097 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1098 IllegalStateException.class, 1099 () -> appSearchConfig.getIndexMergeSize()); 1100 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1101 IllegalStateException.class, 1102 () -> appSearchConfig.getDocumentStoreNamespaceIdFingerprint()); 1103 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1104 IllegalStateException.class, 1105 () -> appSearchConfig.getOptimizeRebuildIndexThreshold()); 1106 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1107 IllegalStateException.class, 1108 () -> appSearchConfig.getCompressionLevel()); 1109 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1110 IllegalStateException.class, 1111 () -> appSearchConfig.getUseReadOnlySearch()); 1112 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1113 IllegalStateException.class, 1114 () -> appSearchConfig.getUsePreMappingWithFileBackedVector()); 1115 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1116 IllegalStateException.class, 1117 () -> appSearchConfig.getUsePersistentHashMap()); 1118 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1119 IllegalStateException.class, 1120 () -> appSearchConfig.getMaxPageBytesLimit()); 1121 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1122 IllegalStateException.class, 1123 () -> appSearchConfig.getCachedRateLimitEnabled()); 1124 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1125 IllegalStateException.class, 1126 () -> appSearchConfig.getCachedRateLimitConfig()); 1127 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1128 IllegalStateException.class, 1129 () -> appSearchConfig.getIntegerIndexBucketSplitThreshold()); 1130 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1131 IllegalStateException.class, 1132 () -> appSearchConfig.getLiteIndexSortAtIndexing()); 1133 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1134 IllegalStateException.class, 1135 () -> appSearchConfig.getLiteIndexSortSize()); 1136 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1137 IllegalStateException.class, 1138 () -> appSearchConfig.getUseNewQualifiedIdJoinIndex()); 1139 Assert.assertThrows("Trying to use a closed AppSearchConfig instance.", 1140 IllegalStateException.class, 1141 () -> appSearchConfig.getCachedFullyPersistJobIntervalMillis()); 1142 Assert.assertThrows( 1143 "Trying to use a closed AppSearchConfig instance.", 1144 IllegalStateException.class, 1145 () -> appSearchConfig.getMaxOpenBlobCount()); 1146 Assert.assertThrows( 1147 "Trying to use a closed AppSearchConfig instance.", 1148 IllegalStateException.class, 1149 () -> appSearchConfig.getOrphanBlobTimeToLiveMs()); 1150 } 1151 } 1152