Best Python code snippet using tempest_python
multiscan_enhancement_2i.py
Source:multiscan_enhancement_2i.py
...30 scan_contents.append([{"Seek": [30]}])31 scan_contents.append([{"Seek": ["Kala", 30]}])32 scan_contents.append([{"Seek": ["Zack"]}])33 scan_contents.append([{"Seek": [None]}])34 multiscan_content = self._update_multiscan_content(1)35 for bucket in self.buckets:36 id_map = self.create_index_using_rest(bucket, query_definition)37 for scan_content in scan_contents:38 multiscan_content["scans"] = json.dumps(scan_content)39 multiscan_result = \40 self.rest.multiscan_for_gsi_index_with_rest(41 id_map["id"], json.dumps(multiscan_content))42 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(43 id_map["id"], json.dumps(multiscan_content))44 check = self._verify_items_indexed_for_two_field_index(45 bucket, id_map["id"],46 ["name"], scan_content, multiscan_result, multiscan_count_result)47 if not check:48 failed_scans.append(scan_content)49 msg = "Failed Scans: {0}".format(failed_scans)50 self.assertEqual(len(failed_scans), 0, msg)51 def test_simple_index_multiple_seek(self):52 failed_scans = []53 query_definition = QueryDefinition(54 index_name="name_index", index_fields=["name"],55 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %56 "name > \"Adara\" AND "57 "name < \"Winta\" ORDER BY _id"),58 groups=["simple"], index_where_clause=" name IS NOT NULL ")59 scan_contents = []60 scan_contents.append([{"Seek": None}, {"Seek": None}])61 scan_contents.append([{"Seek": None}, {"Seek": ["Kala"]}])62 scan_contents.append([{"Seek": None}, {"Seek": ["Kala", 30]}])63 scan_contents.append([{"Seek": None}, {"Seek": ["Winta"]}])64 scan_contents.append([{"Seek": None}, {"Seek": ["Zack"]}])65 scan_contents.append([{"Seek": None}, {"Seek": [None]}])66 scan_contents.append([{"Seek": ["Kala"]},{"Seek": None}])67 scan_contents.append([{"Seek": ["Kala"]},{"Seek": ["Kala"]}])68 scan_contents.append([{"Seek": ["Kala"]},{"Seek": ["Kala", 30]}])69 scan_contents.append([{"Seek": ["Kala"]},{"Seek": ["Winta"]}])70 scan_contents.append([{"Seek": ["Kala"]},{"Seek": ["Zack"]}])71 scan_contents.append([{"Seek": ["Kala"]},{"Seek": [None]}])72 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": None}])73 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": ["Kala"]}])74 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": ["Kala", 30]}])75 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": ["Winta"]}])76 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": ["Zack"]}])77 scan_contents.append([{"Seek": ["Kala", 30]}, {"Seek": [None]}])78 scan_contents.append([{"Seek": ["Winta"]}, {"Seek": ["Kala"]}])79 scan_contents.append([{"Seek": ["Winta"]}, {"Seek": ["Kala", 30]}])80 scan_contents.append([{"Seek": ["Winta"]}, {"Seek": ["Winta"]}])81 scan_contents.append([{"Seek": ["Winta"]}, {"Seek": ["Zack"]}])82 scan_contents.append([{"Seek": ["Winta"]}, {"Seek": [None]}])83 scan_contents.append([{"Seek": [None]}, {"Seek": None}])84 scan_contents.append([{"Seek": [None]}, {"Seek": ["Kala"]}])85 scan_contents.append([{"Seek": [None]}, {"Seek": ["Kala", 30]}])86 scan_contents.append([{"Seek": [None]}, {"Seek": ["Winta"]}])87 scan_contents.append([{"Seek": [None]}, {"Seek": ["Zack"]}])88 scan_contents.append([{"Seek": [None]}, {"Seek": [None]}])89 scan_contents.append([{"Seek": ["Adara"]}, {"Seek": ["Winta"]}])90 multiscan_content = self._update_multiscan_content(1)91 for bucket in self.buckets:92 id_map = self.create_index_using_rest(bucket, query_definition)93 for scan_content in scan_contents:94 multiscan_content["scans"] = json.dumps(scan_content)95 multiscan_result = \96 self.rest.multiscan_for_gsi_index_with_rest(97 id_map["id"], json.dumps(multiscan_content))98 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(99 id_map["id"], json.dumps(multiscan_content))100 check = self._verify_items_indexed_for_two_field_index(101 bucket, id_map["id"],102 ["name"], scan_content, multiscan_result, multiscan_count_result)103 if not check:104 failed_scans.append(copy.deepcopy(scan_content))105 msg = "Failed Scans: {0}".format(failed_scans)106 self.assertEqual(len(failed_scans), 0, msg)107 def test_simple_index_filter(self):108 failed_scans = []109 query_definition = QueryDefinition(110 index_name="name_index", index_fields=["name"],111 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %112 "name > \"Adara\" AND "113 "name < \"Winta\" ORDER BY _id"),114 groups=["simple"], index_where_clause=" name IS NOT NULL ")115 scan_contents = []116 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Winta"}]}])117 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Winta"}]}])118 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"}]}])119 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"}]}])120 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"}]}])121 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Kala"}]}])122 scan_contents.append([{"Filter":[{"Low":"Kala", "High": NULL_STRING}]}])123 scan_contents.append([{"Filter":[{"Low":"Winta", "High": NULL_STRING}]}])124 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Adara"}]}])125 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High": NULL_STRING}]}])126 scan_contents.append([{"Filter":[{"Low":None, "High":"Callia"}]}])127 scan_contents.append([{"Filter":[{"Low":"Kala", "High": None}]}])128 scan_contents.append([{"Filter":[{"Low":"Kala", "High": 30}]}])129 scan_contents.append([{"Filter":[{"Low": 30, "High": "Kala"}]}])130 #TODO: Missing Scenarios131 #scan_contents.append([{"Low": MISSING, "High":"Kala"}])132 #scan_contents.append([{"Low": "Kala", "High": MISSING}])133 #scan_contents.append([{"Low": MISSING, "High": MISSING}])134 multiscan_content = self._update_multiscan_content(1)135 for bucket in self.buckets:136 id_map = self.create_index_using_rest(bucket, query_definition)137 for scan_content in scan_contents:138 for name_inclusion in range(4):139 scan_content[0]["Filter"][0]["Inclusion"] = name_inclusion140 multiscan_content["scans"] = json.dumps(scan_content)141 multiscan_result = \142 self.rest.multiscan_for_gsi_index_with_rest(143 id_map["id"], json.dumps(multiscan_content))144 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(145 id_map["id"], json.dumps(multiscan_content))146 check = self._verify_items_indexed_for_two_field_index(147 bucket, id_map["id"],148 ["name"], scan_content, multiscan_result, multiscan_count_result)149 if not check:150 failed_scans.append(copy.deepcopy(scan_content))151 msg = "Failed Scans: {0}".format(failed_scans)152 self.assertEqual(len(failed_scans), 0, msg)153 def test_simple_index_multiple_filter_spans(self):154 failed_scans = []155 query_definition = QueryDefinition(156 index_name="name_index", index_fields=["name"],157 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %158 "name > \"Adara\" AND "159 "name < \"Winta\" ORDER BY _id"),160 groups=["simple"], index_where_clause=" name IS NOT NULL ")161 scan_contents = []162 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Callia"}]},163 {"Filter":[{"Low": "Kala", "High": "Winta"}]}])164 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Callia"}]},165 {"Filter":[{"Low": "Callia", "High": "Winta"}]}])166 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Callia"}]},167 {"Filter":[{"Low": "Callia", "High": "Callia"}]}])168 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Kala"}]},169 {"Filter":[{"Low": "Callia", "High": "Winta"}]}])170 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Winta"}]},171 {"Filter":[{"Low": "Callia", "High": "Kala"}]}])172 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Callia"}]},173 {"Filter":[{"Low": "Kala", "High": "Winta"}]}])174 scan_contents.append([{"Filter":[{"Low":"Adara", "High": NULL_STRING}]},175 {"Filter":[{"Low": "Callia", "High": "Winta"}]}])176 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Callia"}]},177 {"Filter":[{"Low": NULL_STRING, "High": "Winta"}]}])178 scan_contents.append([{"Filter":[{"Low":"Adara", "High":"Callia"}]},179 {"Filter":[{"Low": "Callia", "High": NULL_STRING}]}])180 multiscan_content = self._update_multiscan_content(1)181 for bucket in self.buckets:182 id_map = self.create_index_using_rest(bucket, query_definition)183 for scan_content in scan_contents:184 for name_inclusion_first in range(4):185 for name_inclusion_second in range(4):186 scan_content[0]["Filter"][0]["Inclusion"] = name_inclusion_first187 scan_content[1]["Filter"][0]["Inclusion"] = name_inclusion_second188 multiscan_content["scans"] = json.dumps(scan_content)189 multiscan_result = \190 self.rest.multiscan_for_gsi_index_with_rest(191 id_map["id"], json.dumps(multiscan_content))192 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(193 id_map["id"], json.dumps(multiscan_content))194 check = self._verify_items_indexed_for_two_field_index(195 bucket, id_map["id"],196 ["name"], scan_content, multiscan_result, multiscan_count_result)197 if not check:198 failed_scans.append(copy.deepcopy(scan_content))199 msg = "Failed Scans: {0}".format(failed_scans)200 self.assertEqual(len(failed_scans), 0, msg)201 def test_two_field_composite_index_seek(self):202 failed_scans = []203 query_definition = QueryDefinition(204 index_name="name_index", index_fields=["name", "age"],205 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %206 "name < \"Winta\""207 "AND age > 0 AND age "208 "< 100 ORDER BY _id"),209 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")210 scan_contents = []211 scan_contents.append([{"Seek": ["Kacila", 58]}])212 scan_contents.append([{"Seek": None}])213 scan_contents.append([{"Seek": [None, 30]}])214 scan_contents.append([{"Seek": [None, None]}])215 scan_contents.append([{"Seek": ["Kacila"]}])216 scan_contents.append([{"Seek": ["Kacila", None]}])217 scan_contents.append([{"Seek": [58, "Kacila"]}])218 scan_contents.append([{"Seek": [NULL_STRING, 58]}])219 scan_contents.append([{"Seek": ["Kacila", NULL_STRING]}])220 scan_contents.append([{"Seek": [NULL_STRING, NULL_STRING]}])221 scan_contents.append([{"Seek": ["Kacila", 58, "Bangalore"]}])222 #TODO Missing Elements223 #scan_contents.append({"Seek": ["Kacila", MISSING]})224 #scan_contents.append({"Seek": [MISSING, 58]})225 #scan_contents.append({"Seek": [MISSING, MISSING]})226 multiscan_content = self._update_multiscan_content()227 for bucket in self.buckets:228 id_map = self.create_index_using_rest(bucket, query_definition)229 for scan_content in scan_contents:230 multiscan_content["scans"] = json.dumps(scan_content)231 multiscan_result = self.rest.multiscan_for_gsi_index_with_rest(232 id_map["id"], json.dumps(multiscan_content))233 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(234 id_map["id"], json.dumps(multiscan_content))235 check = self._verify_items_indexed_for_two_field_index(236 bucket, id_map["id"],237 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)238 if not check:239 failed_scans.append(copy.deepcopy(scan_content))240 msg = "Failed Scans: {0}".format(failed_scans)241 self.assertEqual(len(failed_scans), 0, msg)242 def test_two_field_composite_index_basic_filter(self):243 failed_scans = []244 query_definition = QueryDefinition(245 index_name="two_field_composite_name_age", index_fields=["name", "age"],246 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %247 "name > \"Callia\" AND "248 "name < \"Kala\""249 "AND age > 0 AND age "250 "< 100 ORDER BY _id"),251 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")252 scan_contents = []253 scan_contents.append([{"Seek": None, "Filter":[{"Low":"Callia", "High":"Kala"},254 {"Low":40, "High":70}]}])255 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},256 {"Low":40, "High":70}]}])257 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},258 {"Low":40, "High":70}]}])259 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},260 {"Low":40, "High":70}]}])261 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},262 {"Low":40, "High":40}]}])263 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},264 {"Low":40, "High":40}]}])265 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},266 {"Low":40, "High":40}]}])267 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},268 {"Low":70, "High":40}]}])269 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},270 {"Low":70, "High":40}]}])271 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},272 {"Low":70, "High":40}]}])273 multiscan_content = self._update_multiscan_content()274 for bucket in self.buckets:275 id_map = self.create_index_using_rest(bucket, query_definition)276 for scan_content in scan_contents:277 for name_inclusion in range(4):278 for age_inclusion in range(4):279 scan_content[0]["Filter"][0]["Inclusion"] = \280 name_inclusion281 scan_content[0]["Filter"][1]["Inclusion"] = \282 age_inclusion283 multiscan_content["scans"] = json.dumps(scan_content)284 multiscan_result = \285 self.rest.multiscan_for_gsi_index_with_rest(286 id_map["id"], json.dumps(multiscan_content))287 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(288 id_map["id"], json.dumps(multiscan_content))289 check = self._verify_items_indexed_for_two_field_index(290 bucket, id_map["id"],291 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)292 if not check:293 failed_scans.append(copy.deepcopy(scan_content))294 msg = "Failed Scans: {0}".format(failed_scans)295 self.assertEqual(len(failed_scans), 0, msg)296 def test_two_field_composite_index_unbounded_filter(self):297 failed_scans = []298 query_definition = QueryDefinition(299 index_name="two_field_composite_name_age",300 index_fields=["name", "age"],301 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %302 "name > \"Adara\" AND "303 "name < \"Winta\""304 "AND age > 0 AND age "305 "< 100 ORDER BY _id"),306 groups=["two_field_index"],307 index_where_clause=" name IS NOT NULL ")308 scan_contents = []309 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Winta"},310 {"Low":30, "High":50}]}])311 scan_contents.append([{"Filter":[{"Low":"Kala", "High": NULL_STRING},312 {"Low":30, "High":50}]}])313 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High": NULL_STRING},314 {"Low":30, "High":50}]}])315 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},316 {"Low": NULL_STRING, "High":50}]}])317 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},318 {"Low":30, "High": NULL_STRING}]}])319 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},320 {"Low": NULL_STRING, "High": NULL_STRING}]}])321 scan_contents.append([{"Filter":[{"Low":"Kala", "High": NULL_STRING},322 {"Low":30, "High": NULL_STRING}]}])323 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Winta"},324 {"Low": NULL_STRING, "High":50}]}])325 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Winta"},326 {"Low":30, "High": NULL_STRING}]}])327 scan_contents.append([{"Filter":[{"Low":"Kala", "High": NULL_STRING},328 {"Low": NULL_STRING, "High":50}]}])329 scan_contents.append([{"Filter":[{"Low":"Kala", "High": NULL_STRING},330 {"Low":NULL_STRING, "High": NULL_STRING}]}])331 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Winta"},332 {"Low": NULL_STRING, "High": NULL_STRING}]}])333 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High": NULL_STRING},334 {"Low": 30, "High": NULL_STRING}]}])335 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High": NULL_STRING},336 {"Low": NULL_STRING, "High": 50}]}])337 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High": NULL_STRING},338 {"Low": NULL_STRING, "High": NULL_STRING}]}])339 for bucket in self.buckets:340 id_map = self.create_index_using_rest(bucket, query_definition)341 multiscan_content = self._update_multiscan_content()342 for scan_content in scan_contents:343 for name_inclusion in range(4):344 for age_inclusion in range(4):345 scan_content[0]["Filter"][0]["Inclusion"] = \346 name_inclusion347 scan_content[0]["Filter"][1]["Inclusion"] = \348 age_inclusion349 multiscan_content["scans"] = json.dumps(scan_content)350 multiscan_result = \351 self.rest.multiscan_for_gsi_index_with_rest(352 id_map["id"], json.dumps(multiscan_content))353 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(354 id_map["id"], json.dumps(multiscan_content))355 check = self._verify_items_indexed_for_two_field_index(356 bucket, id_map["id"],357 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)358 if not check:359 failed_scans.append(copy.deepcopy(scan_content))360 msg = "Failed Scans: {0}".format(failed_scans)361 self.assertEqual(len(failed_scans), 0, msg)362 def test_two_field_composite_index_null_filter(self):363 failed_scans = []364 query_definition = QueryDefinition(365 index_name="two_field_composite_name_age",366 index_fields=["name", "age"],367 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %368 "name > \"Adara\" AND "369 "name < \"Winta\""370 "AND age > 0 AND age "371 "< 100 ORDER BY _id"),372 groups=["two_field_index"],373 index_where_clause=" name IS NOT NULL ")374 scan_contents = []375 scan_contents.append([{"Filter":[{"Low": None, "High":"Winta"},376 {"Low":30, "High":50}]}])377 scan_contents.append([{"Filter":[{"Low":"Kala", "High": None},378 {"Low":30, "High":50}]}])379 scan_contents.append([{"Filter":[{"Low": None, "High": None},380 {"Low":30, "High":50}]}])381 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},382 {"Low": None, "High":50}]}])383 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},384 {"Low":30, "High": None}]}])385 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Winta"},386 {"Low": None, "High": None}]}])387 scan_contents.append([{"Filter":[{"Low":"Kala", "High": None},388 {"Low":30, "High": None}]}])389 scan_contents.append([{"Filter":[{"Low": None, "High":"Winta"},390 {"Low": None, "High":50}]}])391 scan_contents.append([{"Filter":[{"Low": None, "High":"Winta"},392 {"Low":30, "High": None}]}])393 scan_contents.append([{"Filter":[{"Low":"Kala", "High": None},394 {"Low": None, "High":50}]}])395 scan_contents.append([{"Filter":[{"Low":"Kala", "High": None},396 {"Low":None, "High": None}]}])397 scan_contents.append([{"Filter":[{"Low": None, "High":"Winta"},398 {"Low": None, "High": None}]}])399 scan_contents.append([{"Filter":[{"Low": None, "High": None},400 {"Low": 30, "High": None}]}])401 scan_contents.append([{"Filter":[{"Low": None, "High": None},402 {"Low": None, "High": 50}]}])403 scan_contents.append([{"Filter":[{"Low": None, "High": None},404 {"Low": None, "High": None}]}])405 for bucket in self.buckets:406 id_map = self.create_index_using_rest(bucket, query_definition)407 multiscan_content = self._update_multiscan_content()408 for scan_content in scan_contents:409 for name_inclusion in range(4):410 for age_inclusion in range(4):411 scan_content[0]["Filter"][0]["Inclusion"] = \412 name_inclusion413 scan_content[0]["Filter"][1]["Inclusion"] = \414 age_inclusion415 multiscan_content["scans"] = json.dumps(scan_content)416 multiscan_result = \417 self.rest.multiscan_for_gsi_index_with_rest(418 id_map["id"], json.dumps(multiscan_content))419 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(420 id_map["id"], json.dumps(multiscan_content))421 check = self._verify_items_indexed_for_two_field_index(422 bucket, id_map["id"],423 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)424 if not check:425 failed_scans.append(copy.deepcopy(scan_content))426 msg = "Failed Scans: {0}".format(failed_scans)427 self.assertEqual(len(failed_scans), 0, msg)428 def test_two_field_composite_index_filter_empty_results(self):429 failed_scans = []430 query_definition = QueryDefinition(431 index_name="two_field_composite_name_age", index_fields=["name", "age"],432 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %433 "name > \"Callia\" AND "434 "name < \"Kala\""435 "AND age > 0 AND age "436 "< 100 ORDER BY _id"),437 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")438 scan_contents = []439 scan_contents.append([{"Seek": None, "Filter":[{"Low":"Callia", "High":"Kala"},440 {"Low":40, "High":70}]}])441 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},442 {"Low":40, "High":70}]}])443 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},444 {"Low":40, "High":70}]}])445 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},446 {"Low":40, "High":70}]}])447 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},448 {"Low":40, "High":40}]}])449 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},450 {"Low":40, "High":40}]}])451 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},452 {"Low":40, "High":40}]}])453 scan_contents.append([{"Filter":[{"Low":"Callia", "High":"Kala"},454 {"Low":70, "High":40}]}])455 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Kala"},456 {"Low":70, "High":40}]}])457 scan_contents.append([{"Filter":[{"Low":"Kala", "High":"Callia"},458 {"Low":70, "High":40}]}])459 multiscan_content = self._update_multiscan_content()460 for bucket in self.buckets:461 id_map = self.create_index_using_rest(bucket, query_definition)462 for scan_content in scan_contents:463 for name_inclusion in range(4):464 for age_inclusion in range(4):465 scan_content[0]["Filter"][0]["Inclusion"] = \466 name_inclusion467 scan_content[0]["Filter"][1]["Inclusion"] = \468 age_inclusion469 multiscan_content["scans"] = json.dumps(scan_content)470 multiscan_result = \471 self.rest.multiscan_for_gsi_index_with_rest(472 id_map["id"], json.dumps(multiscan_content))473 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(474 id_map["id"], json.dumps(multiscan_content))475 check = self._verify_items_indexed_for_two_field_index(476 bucket, id_map["id"],477 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)478 if not check:479 failed_scans.append(copy.deepcopy(scan_content))480 msg = "Failed Scans: {0}".format(failed_scans)481 self.assertEqual(len(failed_scans), 0, msg)482 def test_name_age_composite_index_seek_filter(self):483 failed_scans = []484 query_definition = QueryDefinition(485 index_name="two_field_composite_name_age", index_fields=["name", "age"],486 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %487 "name > \"Adara\" AND "488 "name < \"Winta\""489 "AND age > 0 AND age "490 "< 100 ORDER BY _id"),491 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")492 scan_content = [{"Seek": ["Kimberly", 58],493 "Filter":[{"Low":"A", "High":"Z"},494 {"Low":50, "High":50}]}]495 multiscan_content = {}496 projection = {"EntryKeys":[1], "PrimaryKey":False}497 multiscan_content["projection"] = json.dumps(projection)498 multiscan_content["distinct"] = False499 multiscan_content["reverse"] = False500 multiscan_content["offset"] = 0501 multiscan_content["limit"] = 10000502 multiscan_content["stale"] = "false"503 for bucket in self.buckets:504 id_map = self.create_index_using_rest(bucket, query_definition)505 for name_inclusion in range(4):506 for age_inclusion in range(4):507 scan_content[0]["Filter"][0]["Inclusion"] = \508 name_inclusion509 scan_content[0]["Filter"][1]["Inclusion"] = \510 age_inclusion511 multiscan_content["scans"] = json.dumps(scan_content)512 multiscan_result = \513 self.rest.multiscan_for_gsi_index_with_rest(514 id_map["id"], json.dumps(multiscan_content))515 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(516 id_map["id"], json.dumps(multiscan_content))517 check = self._verify_items_indexed_for_two_field_index(518 bucket, id_map["id"],519 ["name"], scan_content, multiscan_result, multiscan_count_result)520 if not check:521 failed_scans.append(copy.deepcopy(scan_content))522 msg = "Failed Scans: {0}".format(failed_scans)523 self.assertEqual(len(failed_scans), 0, msg)524 def test_name_age_composite_index_empty_second_filter(self):525 failed_scans = []526 query_definition = QueryDefinition(527 index_name="two_field_composite_name_age",528 index_fields=["name", "age"],529 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %530 "name > \"Adara\" AND "531 "name < \"Winta\""532 "AND age > 0 AND age "533 "< 100 ORDER BY _id"),534 groups=["two_field_index"],535 index_where_clause=" name IS NOT NULL ")536 scan_content = [{"Filter":[{"Low": "M", "High": "Z"}, {}]}]537 for bucket in self.buckets:538 id_map = self.create_index_using_rest(bucket, query_definition)539 multiscan_content = self._update_multiscan_content()540 for name_inclusion in range(4):541 scan_content[0]["Filter"][0]["Inclusion"] = \542 name_inclusion543 multiscan_content["scans"] = json.dumps(scan_content)544 log.info(multiscan_content)545 multiscan_result = \546 self.rest.multiscan_for_gsi_index_with_rest(547 id_map["id"], json.dumps(multiscan_content))548 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(549 id_map["id"], json.dumps(multiscan_content))550 check = self._verify_items_indexed_for_two_field_index(551 bucket, id_map["id"], ["name"], scan_content, multiscan_result, multiscan_count_result)552 if not check:553 failed_scans.append(copy.deepcopy(scan_content))554 msg = "Failed Scans: {0}".format(failed_scans)555 self.assertEqual(len(failed_scans), 0, msg)556 def test_name_age_distinct_array_composite_index(self):557 failed_scans = []558 query_definition = QueryDefinition(559 index_name="two_field_composite_travel_history_age",560 index_fields=["DISTINCT ARRAY t FOR t in TO_ARRAY(`travel_history`) END", "age"],561 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")562 scan_contents = []563 #Basic Scan564 scan_contents.append([{"Seek": None,565 "Filter":[{"Low":"India", "High":"US"},566 {"Low":30, "High":60}]}])567 for bucket in self.buckets:568 id_map = self.create_index_using_rest(bucket, query_definition)569 for scan_content in scan_contents:570 multiscan_content = self._update_multiscan_content()571 for name_inclusion in range(4):572 for age_inclusion in range(4):573 scan_content[0]["Filter"][0]["Inclusion"] = \574 name_inclusion575 scan_content[0]["Filter"][1]["Inclusion"] = \576 age_inclusion577 multiscan_content["scans"] = json.dumps(scan_content)578 multiscan_result = \579 self.rest.multiscan_for_gsi_index_with_rest(580 id_map["id"], json.dumps(multiscan_content))581 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(582 id_map["id"], json.dumps(multiscan_content))583 check = self._verify_items_indexed_for_two_field_index(584 bucket, id_map["id"],585 ["name"], scan_content, multiscan_result, multiscan_count_result)586 if not check:587 failed_scans.append(copy.deepcopy(scan_content))588 msg = "Failed Scans: {0}".format(failed_scans)589 self.assertEqual(len(failed_scans), 0, msg)590 def test_name_age_all_array_composite_index(self):591 failed_scans = []592 query_definition = QueryDefinition(593 index_name="two_field_composite_travel_history_age",594 index_fields=["ALL ARRAY t FOR t in TO_ARRAY(`travel_history`) END", "age"],595 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")596 #Basic Scan597 scan_content = [{"Seek": None,598 "Filter":[{"Low":"India", "High":"US"},599 {"Low":30, "High":60}]}]600 for bucket in self.buckets:601 id_map = self.create_index_using_rest(bucket, query_definition)602 multiscan_content = self._update_multiscan_content()603 for name_inclusion in range(4):604 for age_inclusion in range(4):605 scan_content[0]["Filter"][0]["Inclusion"] = \606 name_inclusion607 scan_content[0]["Filter"][1]["Inclusion"] = \608 age_inclusion609 multiscan_content["scans"] = json.dumps(scan_content)610 multiscan_result = \611 self.rest.multiscan_for_gsi_index_with_rest(612 id_map["id"], json.dumps(multiscan_content))613 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(614 id_map["id"], json.dumps(multiscan_content))615 check = self._verify_items_indexed_for_two_field_index(616 bucket, id_map["id"],617 ["name"], scan_content, multiscan_result, multiscan_count_result)618 if not check:619 failed_scans.append(copy.deepcopy(scan_content))620 msg = "Failed Scans: {0}".format(failed_scans)621 self.assertEqual(len(failed_scans), 0, msg)622 def test_name_age_premium_customer_composite_index(self):623 failed_scans = []624 query_definition = QueryDefinition(625 index_name="three_field_composite_name_age",626 index_fields=["name", "age", "premium_customer"],627 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")628 #Basic Scan629 scan_content = [{"Seek": None,630 "Filter":[{"Low":"India", "High":"US"},631 {"Low":30, "High":60},632 {"Low": False, "High": True}]}]633 for bucket in self.buckets:634 id_map = self.create_index_using_rest(bucket, query_definition)635 multiscan_content = self._update_multiscan_content(index_fields=3)636 for name_inclusion in range(4):637 for age_inclusion in range(4):638 for cust_inclustion in range(4):639 scan_content[0]["Filter"][0]["Inclusion"] = \640 name_inclusion641 scan_content[0]["Filter"][1]["Inclusion"] = \642 age_inclusion643 scan_content[0]["Filter"][2]["Inclusion"] = \644 cust_inclustion645 multiscan_content["scans"] = json.dumps(scan_content)646 multiscan_result = \647 self.rest.multiscan_for_gsi_index_with_rest(648 id_map["id"], json.dumps(multiscan_content))649 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(650 id_map["id"], json.dumps(multiscan_content))651 check = self._verify_items_indexed_for_two_field_index(652 bucket, id_map["id"],653 ["name"], scan_content, multiscan_result, multiscan_count_result)654 if not check:655 failed_scans.append(copy.deepcopy(scan_content))656 msg = "Failed Scans: {0}".format(failed_scans)657 self.assertEqual(len(failed_scans), 0, msg)658 def test_two_field_composite_index_multiple_nonoverlapping_scans(self):659 failed_scans = []660 query_definition = QueryDefinition(661 index_name="two_field_composite_name_age", index_fields=["name", "age"],662 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %663 "name > \"Adara\" AND "664 "name < \"Winta\""665 "AND age > 0 AND age "666 "< 100 ORDER BY _id"),667 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")668 scan_contents = []669 scan_contents.append([{"Seek": None,670 "Filter":[{"Low": "Adara", "High":"Jerica"},671 {"Low":10, "High":100}]},672 {"Seek": None,673 "Filter":[{"Low":"Kacila", "High":"Winta"},674 {"Low":10, "High":100}]}])675 #non-overlapping second filters676 scan_contents.append([{"Seek": None,677 "Filter":[{"Low": "Adara", "High":"Winta"},678 {"Low":10, "High":50}]},679 {"Seek": None,680 "Filter":[{"Low":"Adara", "High":"Winta"},681 {"Low":51, "High":100}]}])682 #non-overlapping both Scans683 scan_contents.append([{"Seek": None,684 "Filter":[{"Low": "Adara", "High":"Jerica"},685 {"Low":10, "High":50}]},686 {"Seek": None,687 "Filter":[{"Low":"Kacila", "High":"Winta"},688 {"Low":51, "High":100}]}])689 # Boundary first Filters690 scan_contents.append([{"Filter":[{"Low": "Adara", "High":"Jerica"},691 {"Low":10, "High":100}]},692 {"Filter":[{"Low":"Jerica", "High":"Winta"},693 {"Low":10, "High":100}]}])694 # Boundary Second Filters695 scan_contents.append([{"Filter":[{"Low": "Adara", "High":"Winta"},696 {"Low":10, "High":50}]},697 {"Filter":[{"Low":"Adara", "High":"Winta"},698 {"Low":50, "High":100}]}])699 # Boundary Both Filters700 scan_contents.append([{"Filter":[{"Low": "Adara", "High":"Winta"},701 {"Low":10, "High":50}]},702 {"Filter":[{"Low":"Adara", "High":"Winta"},703 {"Low":50, "High":100}]}])704 # Unbounded First filter of first scan705 scan_contents.append([{"Filter":[{"Low": NULL_STRING, "High":"Jerica"},706 {"Low":10, "High":40}]},707 {"Filter":[{"Low":"Kala", "High":"Winta"},708 {"Low":50, "High":100}]}])709 # Unbounded Second filter of first scan710 scan_contents.append([{"Filter":[{"Low": "Adara", "High": NULL_STRING},711 {"Low":10, "High":40}]},712 {"Filter":[{"Low":"Kala", "High":"Winta"},713 {"Low":50, "High":100}]}])714 # Unbounded First filter of Second scan715 scan_contents.append([{"Filter":[{"Low": "Adara", "High": "Jerica"},716 {"Low":10, "High":40}]},717 {"Filter":[{"Low": NULL_STRING, "High":"Winta"},718 {"Low":50, "High":100}]}])719 # Unbounded Second filter of Second scan720 scan_contents.append([{"Filter":[{"Low": "Adara", "High": "Jerica"},721 {"Low":10, "High":40}]},722 {"Filter":[{"Low":"Kala", "High": NULL_STRING},723 {"Low":50, "High":100}]}])724 #non-overlapping both Scans Reversed725 scan_contents.append([{"Filter":[{"Low":"Kacila", "High":"Winta"},726 {"Low":51, "High":100}]},727 {"Filter":[{"Low": "Adara", "High":"Jerica"},728 {"Low":10, "High":50}]}])729 multiscan_content = self._update_multiscan_content()730 for bucket in self.buckets:731 id_map = self.create_index_using_rest(bucket, query_definition)732 for scan_content in scan_contents:733 for first_name_inclusion in range(4):734 for first_age_inclusion in range(4):735 for second_name_inclusion in range(4):736 for second_age_inclusion in range(4):737 if "Filter" in scan_content[0].keys():738 scan_content[0]["Filter"][0]["Inclusion"] = \739 first_name_inclusion740 scan_content[0]["Filter"][1]["Inclusion"] = \741 first_age_inclusion742 if "Filter" in scan_content[1].keys():743 scan_content[1]["Filter"][0]["Inclusion"] = \744 second_name_inclusion745 scan_content[1]["Filter"][1]["Inclusion"] = \746 second_age_inclusion747 multiscan_content["scans"] = json.dumps(scan_content)748 multiscan_result = \749 self.rest.multiscan_for_gsi_index_with_rest(750 id_map["id"], json.dumps(multiscan_content))751 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(752 id_map["id"], json.dumps(multiscan_content))753 check = self._verify_items_indexed_for_two_field_index(754 bucket, id_map["id"],755 ["name","age"], scan_content, multiscan_result, multiscan_count_result)756 if not check:757 failed_scans.append(copy.deepcopy(scan_content))758 msg = "Failed Scans: {0}".format(failed_scans)759 self.assertEqual(len(failed_scans), 0, msg)760 def test_two_field_composite_index_multiple_overlapping_scans(self):761 failed_scans = []762 query_definition = QueryDefinition(763 index_name="two_field_composite_name_age", index_fields=["name", "age"],764 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %765 "name > \"Adara\" AND "766 "name < \"Winta\""767 "AND age > 0 AND age "768 "< 100 ORDER BY _id"),769 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")770 scan_contents = []771 #Overlapping first Scans772 scan_contents.append([{"Seek": None,773 "Filter":[{"Low": "Adara", "High":"Jerica"},774 {"Low":10, "High":50}]},775 {"Seek": None,776 "Filter":[{"Low":"Jerica", "High":"Winta"},777 {"Low":50, "High":100}]}])778 #Second is subset of first - first filter779 scan_contents.append([{"Seek": None,780 "Filter":[{"Low": "Adara", "High":"Winta"},781 {"Low":10, "High":100}]},782 {"Seek": None,783 "Filter":[{"Low":"Jerica", "High":"Kacila"},784 {"Low":10, "High":100}]}])785 #overlapping second Scans786 scan_contents.append([{"Seek": None,787 "Filter":[{"Low": "Adara", "High":"Winta"},788 {"Low":10, "High":50}]},789 {"Seek": None,790 "Filter":[{"Low":"Adara", "High":"Winta"},791 {"Low":40, "High":100}]}])792 #Second is subset of first - second filter793 scan_contents.append([{"Seek": None,794 "Filter":[{"Low": "Adara", "High":"Winta"},795 {"Low":10, "High":100}]},796 {"Seek": None,797 "Filter":[{"Low":"Adara", "High":"Winta"},798 {"Low":40, "High":60}]}])799 #Overlapping both Scans800 scan_contents.append([{"Seek": None,801 "Filter":[{"Low": "Adara", "High":"Kacila"},802 {"Low":10, "High":50}]},803 {"Seek": None,804 "Filter":[{"Low":"Jerica", "High":"Winta"},805 {"Low":40, "High":100}]}])806 #Second is subset of first - both filter807 scan_contents.append([{"Seek": None,808 "Filter":[{"Low": "Adara", "High":"Winta"},809 {"Low":10, "High":70}]},810 {"Seek": None,811 "Filter":[{"Low":"Jerica", "High":"Kacila"},812 {"Low":40, "High":60}]}])813 #Seek First Scan814 scan_contents.append([{"Seek": ["Kacila", 40]},815 {"Seek": None,816 "Filter":[{"Low":"Jerica", "High":"Winta"},817 {"Low":40, "High":100}]}])818 #Seek Second Scan819 scan_contents.append([{"Seek": None,820 "Filter":[{"Low": "Adara", "High":"Kacila"},821 {"Low":10, "High":50}]},822 {"Seek": ["Jerica", 40]}])823 #Seek First And Second Scan824 scan_contents.append([{"Seek": ["Kacila", 40]},825 {"Seek": ["Jerica", 40]}])826 multiscan_content = self._update_multiscan_content()827 for bucket in self.buckets:828 id_map = self.create_index_using_rest(bucket, query_definition)829 for scan_content in scan_contents:830 for first_name_inclusion in range(4):831 for first_age_inclusion in range(4):832 for second_name_inclusion in range(4):833 for second_age_inclusion in range(4):834 if "Filter" in scan_content[0].keys():835 scan_content[0]["Filter"][0]["Inclusion"] = \836 first_name_inclusion837 scan_content[0]["Filter"][1]["Inclusion"] = \838 first_age_inclusion839 if "Filter" in scan_content[1].keys():840 scan_content[1]["Filter"][0]["Inclusion"] = \841 second_name_inclusion842 scan_content[1]["Filter"][1]["Inclusion"] = \843 second_age_inclusion844 multiscan_content["scans"] = json.dumps(scan_content)845 multiscan_result = \846 self.rest.multiscan_for_gsi_index_with_rest(847 id_map["id"], json.dumps(multiscan_content))848 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(849 id_map["id"], json.dumps(multiscan_content))850 check = self._verify_items_indexed_for_two_field_index(851 bucket, id_map["id"],852 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)853 if not check:854 failed_scans.append(copy.deepcopy(scan_content))855 msg = "Failed Scans: {0}".format(failed_scans)856 self.assertEqual(len(failed_scans), 0, msg)857 def test_two_field_composite_index_three_scans(self):858 failed_scans = []859 query_definition = QueryDefinition(860 index_name="two_field_composite_name_age", index_fields=["name", "age"],861 query_template=RANGE_SCAN_TEMPLATE.format(emit_fields, " %s " %862 "name > \"Adara\" AND "863 "name < \"Winta\""864 "AND age > 0 AND age "865 "< 100 ORDER BY _id"),866 groups=["two_field_index"], index_where_clause=" name IS NOT NULL ")867 scan_contents = []868 # Three Non-Overlapping first Filters869 scan_contents.append([{"Filter": [{"Low": "Adara", "High":"Callia"},870 {"Low":10, "High":100}]},871 {"Filter": [{"Low":"Fantine", "High":"Kacila"},872 {"Low":10, "High":100}]},873 {"Filter": [{"Low": "Perdita", "High": "Winta"},874 {"Low":10, "High":100}]}])875 # Three Non-Overlapping second Filters876 scan_contents.append([{"Filter": [{"Low": "Adara", "High":"Winta"},877 {"Low":10, "High":30}]},878 {"Filter": [{"Low": "Adara", "High":"Winta"},879 {"Low":40, "High":50}]},880 {"Filter": [{"Low": "Adara", "High":"Winta"},881 {"Low":60, "High":80}]}])882 # Three Non-Overlapping second Filters883 scan_contents.append([{"Filter": [{"Low": "Adara", "High":"Callia"},884 {"Low":10, "High":30}]},885 {"Filter": [{"Low": "Fantine", "High":"Kacila"},886 {"Low":40, "High":50}]},887 {"Filter": [{"Low": "Perdita", "High":"Winta"},888 {"Low":60, "High":80}]}])889 multiscan_content = self._update_multiscan_content()890 for bucket in self.buckets:891 id_map = self.create_index_using_rest(bucket, query_definition)892 for scan_content in scan_contents:893 for first_name_inclusion in range(4):894 for first_age_inclusion in range(4):895 for second_name_inclusion in range(4):896 for second_age_inclusion in range(4):897 for third_name_inclusion in range(4):898 for third_age_inclusion in range(4):899 if "Filter" in scan_content[0].keys():900 scan_content[0]["Filter"][0]["Inclusion"] = \901 first_name_inclusion902 scan_content[0]["Filter"][1]["Inclusion"] = \903 first_age_inclusion904 if "Filter" in scan_content[1].keys():905 scan_content[1]["Filter"][0]["Inclusion"] = \906 second_name_inclusion907 scan_content[1]["Filter"][1]["Inclusion"] = \908 second_age_inclusion909 if "Filter" in scan_content[2].keys():910 scan_content[2]["Filter"][0]["Inclusion"] = \911 third_name_inclusion912 scan_content[2]["Filter"][1]["Inclusion"] = \913 third_age_inclusion914 multiscan_content["scans"] = json.dumps(scan_content)915 multiscan_result = \916 self.rest.multiscan_for_gsi_index_with_rest(917 id_map["id"], json.dumps(multiscan_content))918 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(919 id_map["id"], json.dumps(multiscan_content))920 check = self._verify_items_indexed_for_two_field_index(921 bucket, id_map["id"],922 ["name", "age"], scan_content, multiscan_result, multiscan_count_result)923 if not check:924 failed_scans.append(copy.deepcopy(scan_content))925 msg = "Failed Scans: {0}".format(failed_scans)926 self.assertEqual(len(failed_scans), 0, msg)927 def _update_multiscan_content(self, index_fields=2):928 multiscan_content = {}929 projection = {"EntryKeys": range(index_fields), "PrimaryKey": True}930 multiscan_content["projection"] = json.dumps(projection)931 multiscan_content["distinct"] = False932 multiscan_content["reverse"] = False933 multiscan_content["offset"] = 0934 multiscan_content["limit"] = 10000935 multiscan_content["stale"] = "false"936 return multiscan_content937 def _verify_items_indexed_for_two_field_index(self, bucket, index_id, index_fields,938 scan_content, multiscan_result, multiscan_count_result=None):939 err_message = "There are more ranges than number"940 if isinstance(multiscan_result, dict):941 if err_message in multiscan_result.values():...
asc_desc_collations.py
Source:asc_desc_collations.py
...41 for bucket in self.buckets:42 for query_definition, scan_content in dict.iteritems():43 for desc_value in desc_values:44 id_map = self.create_index_using_rest(bucket, query_definition, desc=desc_value)45 multiscan_content = self._update_multiscan_content(index_fields=1)46 for inclusion in range(4):47 scan_content[0]["Filter"][0]["Inclusion"] = \48 inclusion49 multiscan_content["scans"] = json.dumps(scan_content)50 multiscan_result = \51 self.rest.multiscan_for_gsi_index_with_rest(52 id_map["id"], json.dumps(multiscan_content))53 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(54 id_map["id"], json.dumps(multiscan_content))55 print multiscan_result56 check = self._verify_items_indexed_for_two_field_index(57 bucket, id_map["id"],58 ["name"], scan_content, multiscan_result, desc_value, multiscan_count_result, )59 if not check:60 failed_scans.append(copy.deepcopy(scan_content))61 self.drop_index(bucket, query_definition)62 msg = "Failed Scans: {0}".format(failed_scans)63 self.assertEqual(len(failed_scans), 0, msg)64 def test_three_array_indexes_on_different_fields_with_asc_desc_combinations(self):65 failed_scans = []66 query_definition1 = QueryDefinition(67 index_name="index_array_field1",68 index_fields=["ALL ARRAY t FOR t in TO_ARRAY(`travel_history`) END"],69 groups=["array"], index_where_clause=" name IS NOT NULL ")70 scan_content1 = [{"Seek": None,71 "Filter": [{"Low": "India", "High": "US"}]}]72 query_definition2 = QueryDefinition(73 index_name="index_field2",74 index_fields=["age"],75 groups=["simple"], index_where_clause=" age IS NOT NULL ")76 scan_content2 = [{"Seek": None,77 "Filter": [{"Low": 20, "High": 60}]}]78 dict = {query_definition1: scan_content1, query_definition2: scan_content2}79 desc_values = [[True], [False]]80 for bucket in self.buckets:81 for query_definition, scan_content in dict.iteritems():82 for desc_value in desc_values:83 id_map = self.create_index_using_rest(bucket, query_definition, desc=desc_value)84 multiscan_content = self._update_multiscan_content(index_fields=1)85 for inclusion in range(4):86 scan_content[0]["Filter"][0]["Inclusion"] = \87 inclusion88 multiscan_content["scans"] = json.dumps(scan_content)89 multiscan_result = \90 self.rest.multiscan_for_gsi_index_with_rest(91 id_map["id"], json.dumps(multiscan_content))92 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(93 id_map["id"], json.dumps(multiscan_content))94 print multiscan_result95 check = self._verify_items_indexed_for_two_field_index(96 bucket, id_map["id"],97 ["name"], scan_content, multiscan_result, desc_value, multiscan_count_result, )98 if not check:99 failed_scans.append(copy.deepcopy(scan_content))100 self.drop_index(bucket, query_definition)101 msg = "Failed Scans: {0}".format(failed_scans)102 self.assertEqual(len(failed_scans), 0, msg)103 def test_composite_with_asc_desc_combinations(self):104 failed_scans = []105 query_definition = QueryDefinition(106 index_name="three_field_composite_name_age",107 index_fields=["name", "age", "premium_customer"],108 groups=["three_field_index"], index_where_clause=" name IS NOT NULL ")109 # Basic Scan110 scan_content = [{"Seek": None,111 "Filter": [{"Low": "Adara", "High": "Winta"},112 {"Low": 20, "High": 60},113 {"Low": False, "High": True}]}]114 desc_values = [[False, False, False], [False, False, True], [False, True, False], [True, False, False],115 [True, True, False], [True, False, True], [False, True, True], [True, True, True]]116 for bucket in self.buckets:117 for desc_value in desc_values:118 id_map = self.create_index_using_rest(bucket, query_definition, desc=desc_value)119 multiscan_content = self._update_multiscan_content(index_fields=3)120 for name_inclusion in range(4):121 for age_inclusion in range(4):122 for cust_inclustion in range(4):123 scan_content[0]["Filter"][0]["Inclusion"] = \124 name_inclusion125 scan_content[0]["Filter"][1]["Inclusion"] = \126 age_inclusion127 scan_content[0]["Filter"][2]["Inclusion"] = \128 cust_inclustion129 multiscan_content["scans"] = json.dumps(scan_content)130 multiscan_result = \131 self.rest.multiscan_for_gsi_index_with_rest(132 id_map["id"], json.dumps(multiscan_content))133 multiscan_count_result = self.rest.multiscan_count_for_gsi_index_with_rest(134 id_map["id"], json.dumps(multiscan_content))135 log.info("Collation order : {0}".format(desc_value))136 check = self._verify_items_indexed_for_two_field_index(137 bucket, id_map["id"],138 ["name"], scan_content, multiscan_result, desc_value, multiscan_count_result, )139 if not check:140 failed_scans.append(copy.deepcopy(scan_content))141 self.drop_index(bucket, query_definition)142 msg = "Failed Scans: {0}".format(failed_scans)143 self.assertEqual(len(failed_scans), 0, msg)144 def _verify_items_indexed_for_two_field_index(self, bucket, index_id, index_fields,145 scan_content, multiscan_result, desc, multiscan_count_result=None):146 err_message = "There are more ranges than number"147 if isinstance(multiscan_result, dict):148 if err_message in multiscan_result.values():149 multiscan_result = ''150 expected_results = []151 body = {"stale": "False"}152 for content in scan_content:153 doc_list = self.rest.full_table_scan_gsi_index_with_rest(index_id, body)154 seek = content.get("Seek", None)155 filters = content.get("Filter", None)156 if seek:157 temp_doc_list = copy.deepcopy(doc_list)158 for doc in temp_doc_list:159 if doc["key"] != seek:160 doc_list.remove(doc)161 elif filters:162 for i in range(len(filters)):163 temp_doc_list = copy.deepcopy(doc_list)164 f_low = filters[i].get("Low", None)165 f_high = filters[i].get("High", None)166 f_inclusion = filters[i].get("Inclusion", 3)167 for doc in temp_doc_list:168 doc_field = doc["key"][i]169 if f_low and f_low != NULL_STRING:170 if doc_field < f_low:171 doc_list.remove(doc)172 continue173 if f_high and f_high != NULL_STRING:174 if doc_field > f_high:175 doc_list.remove(doc)176 continue177 if f_inclusion == 0:178 if doc_field == f_low or doc_field == f_high:179 doc_list.remove(doc)180 continue181 if f_inclusion == 1:182 if doc_field == f_high:183 doc_list.remove(doc)184 continue185 if f_inclusion == 2:186 if doc_field == f_low:187 doc_list.remove(doc)188 continue189 if expected_results:190 for doc in doc_list:191 if not doc in expected_results:192 expected_results.append(doc)193 else:194 expected_results = doc_list195 if len(expected_results) != len(multiscan_result):196 print multiscan_count_result197 print len(expected_results)198 print expected_results199 print len(multiscan_result)200 log.info("No. of items mismatch :- expected = {0} and actual = {1}".format(201 len(expected_results), len(multiscan_result)))202 return False203 if multiscan_count_result is not None:204 if len(expected_results) != multiscan_count_result:205 log.info("No. of items mismatch from multiscan count:- expected = {0} and actual = {1}".format(206 len(expected_results), multiscan_count_result))207 return False208 if expected_results != multiscan_result:209 if len(expected_results) != 0 and multiscan_result:210 log.info("The number of rows match but the results mismatch, please check")211 return False212 temp_doc_list = []213 for tr in multiscan_result:214 temp_doc_val = str(tr["key"])215 " ".join(temp_doc_val)216 temp_doc_list.append(temp_doc_val)217 log.info("Collated list : {0}".format(temp_doc_list))218 # In case of composite index, the results are ordered by the leading key219 # and if the first key is same, then subsequent keys are considered for ordering.220 sorted_arr = sorted(temp_doc_list, reverse=desc[0])221 # check for idempotency222 if sorted_arr != temp_doc_list:223 self.fail(224 "results of mutiscan is not sorted based on the collation order specified: {0} \n {1}".format(225 sorted_arr, temp_doc_list))226 return True227 def _update_multiscan_content(self, index_fields=2):228 multiscan_content = {}229 projection = {"EntryKeys": range(index_fields), "PrimaryKey": True}230 multiscan_content["projection"] = json.dumps(projection)231 multiscan_content["distinct"] = False232 multiscan_content["reverse"] = False233 multiscan_content["offset"] = 0234 multiscan_content["limit"] = 10000235 multiscan_content["stale"] = "false"...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!