Guest User

Untitled

a guest
Feb 23rd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. @Component
  2. public class BloomFilterManager {
  3.  
  4. private int expectedInsertions=500000000;
  5.  
  6. private double ffp=0.01;
  7.  
  8. private BloomFilter<String> bloomFilter;
  9.  
  10. public BloomFilterManager() {
  11. this.bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), expectedInsertions, ffp);
  12. }
  13.  
  14. public void populate(List<Invoice> invoices) {
  15. invoices.stream().map(Invoice::getId).forEach(i -> bloomFilter.put(i));
  16. }
  17.  
  18. public BloomFilter<String> getBloomFilter(){
  19. return bloomFilter;
  20. }
  21. }
  22.  
  23. @Service
  24. public class InvoiceService implements IInvoiceService {
  25.  
  26. @Autowired
  27. private BloomFilterManager bloomFilterManager;
  28.  
  29. @Autowired
  30. private InvoiceRepository invoiceRepository;
  31.  
  32. @Override
  33. public Invoice.PaymentStatus retrievePaymentStatus(String invoiceId) {
  34. if (!bloomFilterManager.getBloomFilter().mightContain(invoiceId))
  35. return null;
  36.  
  37. return invoiceRepository.findOne(invoiceId).getPaymentStatus();
  38. }
  39. }
  40.  
  41. @RestController
  42. @RequestMapping("/api/invoice")
  43. public class InvoiceController {
  44.  
  45. @Autowired
  46. private InvoiceService invoiceService;
  47.  
  48. @GetMapping(path = "/{invoiceId}/status")
  49. @ResponseStatus(HttpStatus.OK)
  50. public PaymentStatus retrievePaymentStatus(@PathVariable String invoiceId) {
  51. PaymentStatus paymentStatus = invoiceService.retrievePaymentStatus(invoiceId);
  52. if (paymentStatus == null) {
  53. throw new InvoiceNotFoundException();
  54. }
  55. return paymentStatus;
  56. }
  57. }
  58.  
  59. @RunWith(SpringRunner.class)
  60. @DataJpaTest
  61. public class InvoiceServiceTest {
  62.  
  63. @TestConfiguration
  64. static class InvoiceServiceTestContextConfiguration {
  65. @Bean
  66. public InvoiceService invoiceService() {
  67. return new InvoiceService();
  68. }
  69.  
  70. @Bean
  71. public BloomFilterManager bloomFilterManager() {
  72. return new BloomFilterManager();
  73. }
  74. }
  75.  
  76. @Autowired
  77. private BloomFilterManager bloomFilterManager;
  78.  
  79. @Autowired
  80. private InvoiceService invoiceService;
  81.  
  82. @Autowired
  83. private InvoiceRepository invoiceRepository;
  84.  
  85. @Test
  86. public void retrievePaymentStatusReturnsPaidStatus() {
  87. Faker faker = new Faker();
  88.  
  89. Invoice invoice = invoiceRepository.save(new Invoice(
  90. faker.number().randomNumber(),
  91. faker.lorem().word(),
  92. faker.number().randomDigit(),
  93. new BigDecimal(Math.random()),
  94. Invoice.PaymentStatus.PAID,
  95. faker.date().between(new Date(), DateUtils.addDays(new Date(), 13))
  96. ));
  97.  
  98. bloomFilterManager.getBloomFilter().put(invoice.getId());
  99.  
  100. Invoice.PaymentStatus actualPaymentStatus = invoiceService.retrievePaymentStatus(invoice.getId());
  101.  
  102. assertEquals(Invoice.PaymentStatus.PAID, actualPaymentStatus);
  103. }
  104.  
  105. @Test
  106. public void retrievePaymentStatusReturnsNull() {
  107. Invoice.PaymentStatus actualPaymentStatus = invoiceService.retrievePaymentStatus("");
  108.  
  109. assertEquals(null, actualPaymentStatus);
  110. }
  111.  
  112. }
  113.  
  114. when(bloomFilterManager.getBloomFilter().mightContaint(anyString())).therReturn(true);
Add Comment
Please, Sign In to add comment