public void testGetNextCode() throws Exception {
    addSomeRecords();
    // HOTP, counter at 0, check getNextcode response.
    assertEquals("683298", otpProvider.getNextCode("*****@*****.**"));
    // counter updated to 1, check response has changed.
    assertEquals("891123", otpProvider.getNextCode("*****@*****.**"));

    // TOTP: HOTP with current time (seconds / 30) as the counter
    withTotpClockCurrentTimeSeconds(OtpProvider.DEFAULT_INTERVAL * 1);
    assertEquals("683298", otpProvider.getNextCode("*****@*****.**"));
    withTotpClockCurrentTimeSeconds(OtpProvider.DEFAULT_INTERVAL * 2);
    assertEquals("891123", otpProvider.getNextCode("*****@*****.**"));

    // Different TOTP account/secret
    withTotpClockCurrentTimeSeconds(OtpProvider.DEFAULT_INTERVAL * 1234567890L);
    assertEquals("817746", otpProvider.getNextCode("*****@*****.**"));
  }
 public void testGetNextCodeWithEmptyAccountName() throws Exception {
   accountDb.update("", SECRET, "", OtpType.HOTP, null);
   // HOTP, counter at 0, check getNextcode response.
   assertEquals("683298", otpProvider.getNextCode(""));
 }