@Override public ExpiringCode retrieveCode(String code, String zoneId) { cleanExpiredEntries(); if (code == null) { throw new NullPointerException(); } try { ExpiringCode expiringCode = jdbcTemplate.queryForObject(selectAllFields, rowMapper, code, zoneId); if (expiringCode != null) { jdbcTemplate.update(delete, code, zoneId); } if (expiringCode.getExpiresAt().getTime() < timeService.getCurrentTimeMillis()) { expiringCode = null; } return expiringCode; } catch (EmptyResultDataAccessException x) { return null; } }
@Override public ExpiringCode generateCode(String data, Timestamp expiresAt, String intent, String zoneId) { cleanExpiredEntries(); if (data == null || expiresAt == null) { throw new NullPointerException(); } if (expiresAt.getTime() < timeService.getCurrentTimeMillis()) { throw new IllegalArgumentException(); } int count = 0; while (count < 3) { count++; String code = generator.generate(); try { int update = jdbcTemplate.update(insert, code, expiresAt.getTime(), data, intent, zoneId); if (update == 1) { ExpiringCode expiringCode = new ExpiringCode(code, expiresAt, data, intent); return expiringCode; } else { logger.warn("Unable to store expiring code:" + code); } } catch (DataIntegrityViolationException x) { if (count == 3) { throw x; } } } return null; }
@Test(expected = EmptyResultDataAccessException.class) public void testExpirationCleaner() throws Exception { when(timeService.getCurrentTimeMillis()).thenReturn(System.currentTimeMillis()); if (JdbcExpiringCodeStore.class == expiringCodeStoreClass) { jdbcTemplate.update(JdbcExpiringCodeStore.insert, "test", System.currentTimeMillis() - 1000, "{}", null, IdentityZoneHolder.get().getId()); ((JdbcExpiringCodeStore) expiringCodeStore).cleanExpiredEntries(); jdbcTemplate.queryForObject(JdbcExpiringCodeStore.selectAllFields, new JdbcExpiringCodeStore.JdbcExpiringCodeMapper(), "test", IdentityZoneHolder.get().getId()); } else { throw new EmptyResultDataAccessException(1); } } }