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.server.appsearch; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import com.android.server.appsearch.external.localstorage.stats.CallStats; 22 23 import org.junit.Test; 24 25 public class AppSearchRateLimitConfigTest { 26 @Test testDefaultRateLimitConfig()27 public void testDefaultRateLimitConfig() { 28 AppSearchRateLimitConfig rateLimitConfig = AppSearchRateLimitConfig.create( 29 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 30 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 31 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 32 33 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo( 34 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY); 35 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 36 (int) (AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 37 * AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY)); 38 // Verify that API costs are set to default of 1 39 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 40 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 41 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 42 assertThat(rateLimitConfig.getApiCost( 43 CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH)).isEqualTo(1); 44 } 45 46 @Test testCustomRateLimitConfig()47 public void testCustomRateLimitConfig() { 48 AppSearchRateLimitConfig rateLimitConfig = 49 AppSearchRateLimitConfig.create(1000, 0.8f, 50 "localPutDocuments:5;localGetDocuments:11;localSetSchema:99"); 51 52 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 53 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 54 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(5); 55 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 56 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 57 // Unset API costs = 1 by default 58 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 59 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 60 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 61 assertThat(rateLimitConfig.getApiCost( 62 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 63 } 64 65 @Test testRateLimitConfigRebuild_noChanges()66 public void testRateLimitConfigRebuild_noChanges() { 67 AppSearchRateLimitConfig rateLimitConfig1 = AppSearchRateLimitConfig.create( 68 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 69 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 70 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 71 AppSearchRateLimitConfig rateLimitConfig2 = rateLimitConfig1.rebuildIfNecessary( 72 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 73 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 74 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 75 assertThat(rateLimitConfig2).isEqualTo(rateLimitConfig1); 76 } 77 78 @Test testRateLimitConfigRebuild_changeTotalCapacity()79 public void testRateLimitConfigRebuild_changeTotalCapacity() { 80 AppSearchRateLimitConfig rateLimitConfig = AppSearchRateLimitConfig.create( 81 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 82 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 83 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 84 rateLimitConfig = rateLimitConfig.rebuildIfNecessary(1000, 85 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 86 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 87 88 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 89 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 90 (int) (AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 91 * 1000)); 92 // API costs = 1 by default 93 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 94 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 95 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 96 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 97 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 98 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 99 assertThat(rateLimitConfig.getApiCost( 100 CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH)).isEqualTo(1); 101 } 102 103 @Test testRateLimitConfigRebuild_changePerPackagePercentage()104 public void testRateLimitConfigRebuild_changePerPackagePercentage() { 105 AppSearchRateLimitConfig rateLimitConfig = AppSearchRateLimitConfig.create(10000, 106 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 107 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 108 rateLimitConfig = rateLimitConfig.rebuildIfNecessary(10000, 0.5f, 109 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 110 111 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(10000); 112 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 113 (int) (0.5 * 10000)); 114 // API costs = 1 by default 115 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 116 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 117 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 118 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 119 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 120 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 121 assertThat(rateLimitConfig.getApiCost( 122 CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH)).isEqualTo(1); 123 } 124 125 @Test testRateLimitConfigRebuild_changeApiCosts()126 public void testRateLimitConfigRebuild_changeApiCosts() { 127 AppSearchRateLimitConfig rateLimitConfig = AppSearchRateLimitConfig.create( 128 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 129 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 130 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 131 rateLimitConfig = rateLimitConfig.rebuildIfNecessary( 132 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 133 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 134 "localPutDocuments:5;localGetDocuments:11;localSetSchema:99"); 135 136 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo( 137 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY); 138 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo( 139 (int) (AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE 140 * AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY)); 141 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(5); 142 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 143 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 144 // Unset API costs = 1 by default 145 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 146 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 147 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 148 assertThat(rateLimitConfig.getApiCost( 149 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 150 } 151 152 @Test testRateLimitConfigRebuild_allConfigsChanged()153 public void testRateLimitConfigRebuild_allConfigsChanged() { 154 AppSearchRateLimitConfig rateLimitConfig = AppSearchRateLimitConfig.create( 155 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_TOTAL_CAPACITY, 156 AppSearchConfig.DEFAULT_RATE_LIMIT_TASK_QUEUE_PER_PACKAGE_CAPACITY_PERCENTAGE, 157 AppSearchConfig.DEFAULT_RATE_LIMIT_API_COSTS_STRING); 158 rateLimitConfig = rateLimitConfig.rebuildIfNecessary(1000, 0.8f, 159 "localPutDocuments:5;localGetDocuments:11;localSetSchema:99"); 160 161 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 162 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 163 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(5); 164 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 165 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 166 // Unset API costs = 1 by default 167 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 168 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 169 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 170 assertThat(rateLimitConfig.getApiCost( 171 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 172 } 173 174 @Test testApiCostStringCaseSensitive()175 public void testApiCostStringCaseSensitive() { 176 AppSearchRateLimitConfig rateLimitConfig = 177 AppSearchRateLimitConfig.create(1000, 0.8f, 178 "putdocuments:5;LOCALgEtDOcUmENts:11;SETSCHEMA:99"); 179 180 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 181 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 182 // Unable to set API costs since the API name is case-sensitive 183 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 184 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 185 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 186 // Unset API costs = 1 by default 187 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 188 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 189 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 190 assertThat(rateLimitConfig.getApiCost( 191 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 192 } 193 194 @Test testInvalidApiCostsString_unspecifiedApiCosts()195 public void testInvalidApiCostsString_unspecifiedApiCosts() { 196 AppSearchRateLimitConfig rateLimitConfig = 197 AppSearchRateLimitConfig.create(1000, 0.8f, 198 "localPutDocuments;localGetDocuments:;localSetSchema:99"); 199 200 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 201 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 202 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 203 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 204 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 205 // Unset API costs = 1 by default 206 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 207 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 208 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 209 assertThat(rateLimitConfig.getApiCost( 210 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 211 } 212 213 @Test testInvalidApiCostsString_nonIntegerApiCosts()214 public void testInvalidApiCostsString_nonIntegerApiCosts() { 215 AppSearchRateLimitConfig rateLimitConfig = 216 AppSearchRateLimitConfig.create(1000, 0.8f, 217 "localPutDocuments:0.5;localGetDocuments:11;localSetSchema:99"); 218 219 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 220 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 221 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 222 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 223 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 224 // Unset API costs = 1 by default 225 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 226 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 227 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 228 assertThat(rateLimitConfig.getApiCost( 229 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 230 231 rateLimitConfig = 232 AppSearchRateLimitConfig.create(1000, 0.8f, 233 "localPutDocuments:cost"); 234 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 235 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 236 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 237 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 238 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 239 // Unset API costs = 1 by default 240 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 241 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 242 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 243 assertThat(rateLimitConfig.getApiCost( 244 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 245 } 246 247 @Test testInvalidApiCostsString_negativeApiCostNotAllowed()248 public void testInvalidApiCostsString_negativeApiCostNotAllowed() { 249 AppSearchRateLimitConfig rateLimitConfig = 250 AppSearchRateLimitConfig.create(1000, 0.8f, 251 "localPutDocuments:-1;localGetDocuments:11;localSetSchema:99"); 252 253 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 254 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 255 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 256 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 257 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 258 // Unset API costs = 1 by default 259 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 260 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 261 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 262 assertThat(rateLimitConfig.getApiCost( 263 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 264 } 265 266 @Test testInvalidApiCostsString_emptyString()267 public void testInvalidApiCostsString_emptyString() { 268 AppSearchRateLimitConfig rateLimitConfig = 269 AppSearchRateLimitConfig.create(1000, 0.8f, ""); 270 271 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 272 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 273 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 274 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 275 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 276 // Unset API costs = 1 by default 277 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 278 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 279 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 280 assertThat(rateLimitConfig.getApiCost( 281 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 282 } 283 284 @Test testInvalidApiCostsString_emptySegments()285 public void testInvalidApiCostsString_emptySegments() { 286 AppSearchRateLimitConfig rateLimitConfig = 287 AppSearchRateLimitConfig.create(1000, 0.8f, ";localPutDocuments:10;"); 288 289 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 290 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 291 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(10); 292 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 293 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 294 // Unset API costs = 1 by default 295 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 296 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 297 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 298 assertThat(rateLimitConfig.getApiCost( 299 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 300 } 301 302 @Test testInvalidApiCostsString_wrongCostDelimiter()303 public void testInvalidApiCostsString_wrongCostDelimiter() { 304 AppSearchRateLimitConfig rateLimitConfig = 305 AppSearchRateLimitConfig.create(1000, 0.8f, "localPutDocuments;10"); 306 307 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 308 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 309 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 310 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 311 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 312 // Unset API costs = 1 by default 313 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 314 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 315 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 316 assertThat(rateLimitConfig.getApiCost( 317 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 318 } 319 320 @Test testInvalidApiCostsString_wrongEntryDelimiter()321 public void testInvalidApiCostsString_wrongEntryDelimiter() { 322 AppSearchRateLimitConfig rateLimitConfig = 323 AppSearchRateLimitConfig.create(1000, 0.8f, 324 "localPutDocuments:10:localGetDocuments:11:localSetSchema:99"); 325 326 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 327 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 328 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 329 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(1); 330 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(1); 331 // Unset API costs = 1 by default 332 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 333 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 334 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 335 assertThat(rateLimitConfig.getApiCost( 336 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 337 } 338 339 @Test testInvalidApiCostsString_invalidApiEntry()340 public void testInvalidApiCostsString_invalidApiEntry() { 341 AppSearchRateLimitConfig rateLimitConfig = 342 AppSearchRateLimitConfig.create(1000, 0.8f, 343 "foo:10;localGetDocuments:11;localSetSchema:99"); 344 345 assertThat(rateLimitConfig.getTaskQueueTotalCapacity()).isEqualTo(1000); 346 assertThat(rateLimitConfig.getTaskQueuePerPackageCapacity()).isEqualTo(800); 347 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_DOCUMENTS)).isEqualTo(11); 348 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SET_SCHEMA)).isEqualTo(99); 349 // Unset API costs = 1 by default 350 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_PUT_DOCUMENTS)).isEqualTo(1); 351 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_NAMESPACES)).isEqualTo(1); 352 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_SEARCH)).isEqualTo(1); 353 assertThat(rateLimitConfig.getApiCost(CallStats.CALL_TYPE_GET_STORAGE_INFO)).isEqualTo(1); 354 assertThat(rateLimitConfig.getApiCost( 355 CallStats.CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH)).isEqualTo(1); 356 } 357 }