use of com.commercetools.sync.benchmark.BenchmarkUtils.NUMBER_OF_RESOURCE_UNDER_TEST in project commercetools-sync-java by commercetools.
the class ProductSyncBenchmark method sync_ExistingProducts_ShouldUpdateProducts.
@Test
void sync_ExistingProducts_ShouldUpdateProducts() throws IOException {
final List<ProductDraft> productDrafts = buildProductDrafts(NUMBER_OF_RESOURCE_UNDER_TEST);
// Create drafts to target project with different descriptions
CompletableFuture.allOf(productDrafts.stream().map(ProductDraftBuilder::of).map(builder -> builder.description(ofEnglish("oldDescription"))).map(builder -> builder.productType(productType.toReference())).map(ProductDraftBuilder::build).map(draft -> CTP_TARGET_CLIENT.execute(ProductCreateCommand.of(draft))).map(CompletionStage::toCompletableFuture).toArray(CompletableFuture[]::new)).join();
// Sync new drafts
final ProductSync productSync = new ProductSync(syncOptions);
final long beforeSyncTime = System.currentTimeMillis();
final ProductSyncStatistics syncStatistics = executeBlocking(productSync.sync(productDrafts));
final long totalTime = System.currentTimeMillis() - beforeSyncTime;
// assert on threshold (based on history of benchmarks; highest was ~19 seconds)
// double of the highest benchmark
final int threshold = 38000;
assertThat(totalTime).withFailMessage(format(THRESHOLD_EXCEEDED_ERROR, totalTime, threshold)).isLessThan(threshold);
// Assert actual state of CTP project (number of updated products)
final CompletableFuture<Integer> totalNumberOfUpdatedProducts = CTP_TARGET_CLIENT.execute(ProductQuery.of().withPredicates(p -> p.masterData().staged().description().locale(ENGLISH).is("newDescription"))).thenApply(PagedQueryResult::getTotal).thenApply(Long::intValue).toCompletableFuture();
executeBlocking(totalNumberOfUpdatedProducts);
assertThat(totalNumberOfUpdatedProducts).isCompletedWithValue(NUMBER_OF_RESOURCE_UNDER_TEST);
// Assert actual state of CTP project (total number of existing products)
final CompletableFuture<Integer> totalNumberOfProducts = CTP_TARGET_CLIENT.execute(ProductProjectionQuery.ofStaged()).thenApply(PagedQueryResult::getTotal).thenApply(Long::intValue).toCompletableFuture();
executeBlocking(totalNumberOfProducts);
assertThat(totalNumberOfProducts).isCompletedWithValue(NUMBER_OF_RESOURCE_UNDER_TEST);
// Assert statistics
assertThat(syncStatistics).hasValues(NUMBER_OF_RESOURCE_UNDER_TEST, 0, NUMBER_OF_RESOURCE_UNDER_TEST, 0);
assertThat(errorCallBackExceptions).isEmpty();
assertThat(errorCallBackMessages).isEmpty();
assertThat(warningCallBackMessages).isEmpty();
saveNewResult(PRODUCT_SYNC, UPDATES_ONLY, totalTime);
}
use of com.commercetools.sync.benchmark.BenchmarkUtils.NUMBER_OF_RESOURCE_UNDER_TEST in project commercetools-sync-java by commercetools.
the class ProductSyncBenchmark method sync_WithSomeExistingProducts_ShouldSyncProducts.
@Test
void sync_WithSomeExistingProducts_ShouldSyncProducts() throws IOException {
final List<ProductDraft> productDrafts = buildProductDrafts(NUMBER_OF_RESOURCE_UNDER_TEST);
final int halfNumberOfDrafts = productDrafts.size() / 2;
final List<ProductDraft> firstHalf = productDrafts.subList(0, halfNumberOfDrafts);
// Create first half of drafts to target project with different description
CompletableFuture.allOf(firstHalf.stream().map(ProductDraftBuilder::of).map(builder -> builder.description(ofEnglish("oldDescription"))).map(builder -> builder.productType(productType.toReference())).map(ProductDraftBuilder::build).map(draft -> CTP_TARGET_CLIENT.execute(ProductCreateCommand.of(draft))).map(CompletionStage::toCompletableFuture).toArray(CompletableFuture[]::new)).join();
// Sync new drafts
final ProductSync productSync = new ProductSync(syncOptions);
final long beforeSyncTime = System.currentTimeMillis();
final ProductSyncStatistics syncStatistics = executeBlocking(productSync.sync(productDrafts));
final long totalTime = System.currentTimeMillis() - beforeSyncTime;
// assert on threshold (based on history of benchmarks; highest was ~19 seconds)
// double of the highest benchmark
final int threshold = 38000;
assertThat(totalTime).withFailMessage(format(THRESHOLD_EXCEEDED_ERROR, totalTime, threshold)).isLessThan(threshold);
// Assert actual state of CTP project (number of updated products)
final CompletableFuture<Integer> totalNumberOfUpdatedProducts = CTP_TARGET_CLIENT.execute(ProductQuery.of().withPredicates(p -> p.masterData().staged().description().locale(ENGLISH).is("oldDescription"))).thenApply(PagedQueryResult::getTotal).thenApply(Long::intValue).toCompletableFuture();
executeBlocking(totalNumberOfUpdatedProducts);
assertThat(totalNumberOfUpdatedProducts).isCompletedWithValue(0);
// Assert actual state of CTP project (total number of existing products)
final CompletableFuture<Integer> totalNumberOfProducts = CTP_TARGET_CLIENT.execute(ProductQuery.of()).thenApply(PagedQueryResult::getTotal).thenApply(Long::intValue).toCompletableFuture();
executeBlocking(totalNumberOfProducts);
assertThat(totalNumberOfProducts).isCompletedWithValue(NUMBER_OF_RESOURCE_UNDER_TEST);
// Assert statistics
assertThat(syncStatistics).hasValues(NUMBER_OF_RESOURCE_UNDER_TEST, halfNumberOfDrafts, halfNumberOfDrafts, 0);
assertThat(errorCallBackExceptions).isEmpty();
assertThat(errorCallBackMessages).isEmpty();
assertThat(warningCallBackMessages).isEmpty();
saveNewResult(PRODUCT_SYNC, CREATES_AND_UPDATES, totalTime);
}
Aggregations