use of com.vladmihalcea.mongo.model.Product in project vladmihalcea.wordpress.com by vladmihalcea.
the class ProductRepositoryIT method testFindAndInsert.
@Test
public void testFindAndInsert() {
Long randomId = new Random().nextLong();
assertNull(productRepository.findOne(randomId));
Product product = productRepository.findAndInsert(randomId);
Assert.assertEquals(product.getId(), productRepository.findOne(randomId).getId());
}
use of com.vladmihalcea.mongo.model.Product in project vladmihalcea.wordpress.com by vladmihalcea.
the class ProductRepositoryIT method testRetries.
@Test
public void testRetries() throws InterruptedException {
Product product = new Product();
product.setId(123L);
product.setName("Tv");
productRepository.save(product);
Product savedProduct = productRepository.findOne(123L);
assertEquals(savedProduct, product);
final int threadsNumber = 10;
final AtomicInteger atomicInteger = new AtomicInteger();
final CountDownLatch startLatch = new CountDownLatch(threadsNumber + 1);
final CountDownLatch endLatch = new CountDownLatch(threadsNumber + 1);
for (; atomicInteger.get() < threadsNumber; atomicInteger.incrementAndGet()) {
final long index = (long) atomicInteger.get() * threadsNumber;
LOGGER.info("Scheduling thread index {}", index);
Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
try {
startLatch.countDown();
startLatch.await();
productService.updateName(123L, UUID.randomUUID().toString());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (Exception e) {
LOGGER.error("Exception thrown!", e);
} finally {
endLatch.countDown();
}
}
});
testThread.start();
}
startLatch.countDown();
LOGGER.info("Waiting for threads to be done");
endLatch.countDown();
endLatch.await();
LOGGER.info("Threads are done");
}
use of com.vladmihalcea.mongo.model.Product in project vladmihalcea.wordpress.com by vladmihalcea.
the class ProductServiceImpl method updateName.
@Override
@Retry(times = 10, on = org.springframework.dao.OptimisticLockingFailureException.class)
public Product updateName(Long id, String name) {
Product product = productRepository.findOne(id);
product.setName(name);
LOGGER.info("Updating product {} name to {}", product, name);
return productRepository.save(product);
}
use of com.vladmihalcea.mongo.model.Product in project vladmihalcea.wordpress.com by vladmihalcea.
the class ProductRepositoryIT method testSave.
@Test
public void testSave() {
Product product = new Product();
product.setId(123L);
product.setName("Tv");
product.setQuantity(BigInteger.TEN);
product.setDiscount(BigDecimal.valueOf(12.34));
productRepository.save(product);
Product savedProduct = productRepository.findOne(123L);
assertEquals(savedProduct, product);
assertEquals(savedProduct.hashCode(), product.hashCode());
assertEquals(Long.valueOf(0), product.getVersion());
assertEquals("Tv", product.getName());
savedProduct.setName("Dvd");
savedProduct = productRepository.save(savedProduct);
assertEquals(Long.valueOf(1), savedProduct.getVersion());
savedProduct.setVersion(0L);
try {
productRepository.save(savedProduct);
fail("Expected OptimisticLockingFailureException");
} catch (OptimisticLockingFailureException e) {
}
productRepository.delete(product);
}
use of com.vladmihalcea.mongo.model.Product in project vladmihalcea.wordpress.com by vladmihalcea.
the class ProductRepositoryIT method testMigration.
@Test
public void testMigration() {
Product tv = productRepository.findOne(1L);
assertEquals("TV", tv.getName());
assertEquals(Long.valueOf(2), tv.getVersion());
assertEquals(BigDecimal.valueOf(189.99), tv.getPrice());
}
Aggregations