CLOUDSTACK-8592: adding more test, fine tuning 0 quota conditions.

This commit is contained in:
Abhinandan Prateek 2015-11-04 11:23:13 +05:30
parent 3102dbc59f
commit 625406b48f
3 changed files with 101 additions and 19 deletions

View File

@ -140,7 +140,6 @@ public class QuotaAlertManagerImpl extends ManagerBase implements QuotaAlertMana
@Override
public void checkAndSendQuotaAlertEmails() {
s_logger.info("Running checkAndSendQuotaAlertEmails");
List<DeferredQuotaEmail> deferredQuotaEmailList = new ArrayList<DeferredQuotaEmail>();
final BigDecimal zeroBalance = new BigDecimal(0);
for (final QuotaAccountVO quotaAccount : _quotaAcc.listAllQuotaAccount()) {
@ -153,20 +152,22 @@ public class QuotaAlertManagerImpl extends ManagerBase implements QuotaAlertMana
if (accountBalance != null) {
AccountVO account = _accountDao.findById(quotaAccount.getId());
if (s_logger.isDebugEnabled()) {
s_logger.debug("Check id " + account.getId() + " bal=" + accountBalance + " alertDate" + alertDate + " current date" + new Date());
s_logger.debug("checkAndSendQuotaAlertEmails: Check id=" + account.getId() + " bal=" + accountBalance + ", alertDate=" + alertDate + ", lockable=" + lockable);
}
if (accountBalance.compareTo(zeroBalance) < 0) {
if (_lockAccountEnforcement && (lockable == 1)) {
if (account.getType() == Account.ACCOUNT_TYPE_NORMAL) {
s_logger.info("Locking account " + account.getAccountName() + " due to quota exhasuted.");
s_logger.info("Locking account " + account.getAccountName() + " due to quota < 0.");
lockAccount(account.getId());
}
}
if (alertDate == null || (balanceDate.after(alertDate) && getDifferenceDays(alertDate, new Date()) > 1)) {
s_logger.info("Sending alert " + account.getAccountName() + " due to quota < 0.");
deferredQuotaEmailList.add(new DeferredQuotaEmail(account, quotaAccount, QuotaConfig.QuotaEmailTemplateTypes.QUOTA_EMPTY));
}
} else if (accountBalance.compareTo(thresholdBalance) < 0) {
} else if (accountBalance.compareTo(thresholdBalance) <= 0) {
if (alertDate == null || (balanceDate.after(alertDate) && getDifferenceDays(alertDate, new Date()) > 1)) {
s_logger.info("Sending alert " + account.getAccountName() + " due to quota below threshold.");
deferredQuotaEmailList.add(new DeferredQuotaEmail(account, quotaAccount, QuotaConfig.QuotaEmailTemplateTypes.QUOTA_LOW));
}
}
@ -175,7 +176,7 @@ public class QuotaAlertManagerImpl extends ManagerBase implements QuotaAlertMana
for (DeferredQuotaEmail emailToBeSent : deferredQuotaEmailList) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Attempting to send quota alert email to users of account: " + emailToBeSent.getAccount().getAccountName());
s_logger.debug("checkAndSendQuotaAlertEmails: Attempting to send quota alert email to users of account: " + emailToBeSent.getAccount().getAccountName());
}
sendQuotaAlert(emailToBeSent);
}

View File

@ -151,7 +151,7 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
switch (period) {
case BIMONTHLY:
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, 0);
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR, 0);
@ -162,7 +162,7 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
lastDateOfPreviousPeriod = (Calendar)aCalendar.clone();
return new Calendar[] {firstDateOfPreviousPeriod, lastDateOfPreviousPeriod};
} else if (day_of_month > 15 && (day_of_month - 15) < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, -1);
aCalendar.set(Calendar.DATE, 16);
aCalendar.set(Calendar.HOUR, 0);
@ -176,7 +176,7 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
return null;
case MONTHLY:
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, -1);
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR, 0);
@ -190,16 +190,16 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
return null;
case QUATERLY:
// statements are sent in Jan=1, Apr 4, Jul 7, Oct 10
if (month_of_year == 1 || month_of_year == 4 || month_of_year == 7 || month_of_year == 10) {
if (month_of_year == Calendar.JANUARY || month_of_year == Calendar.APRIL || month_of_year == Calendar.JULY || month_of_year == Calendar.OCTOBER) {
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, -3);
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR, 0);
aCalendar.set(Calendar.MINUTE, 0);
aCalendar.set(Calendar.SECOND, 0);
firstDateOfPreviousPeriod = (Calendar)aCalendar.clone();
aCalendar.add(Calendar.MONTH, -1);
aCalendar.add(Calendar.MONTH, 2);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
lastDateOfPreviousPeriod = (Calendar)aCalendar.clone();
return new Calendar[] {firstDateOfPreviousPeriod, lastDateOfPreviousPeriod};
@ -208,16 +208,16 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
return null;
case HALFYEARLY:
// statements are sent in Jan=1, Jul 7,
if (month_of_year == 1 || month_of_year == 7) {
if (month_of_year == Calendar.JANUARY || month_of_year == Calendar.JULY) {
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, -6);
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR, 0);
aCalendar.set(Calendar.MINUTE, 0);
aCalendar.set(Calendar.SECOND, 0);
firstDateOfPreviousPeriod = (Calendar)aCalendar.clone();
aCalendar.add(Calendar.MONTH, -1);
aCalendar.add(Calendar.MONTH, 5);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
lastDateOfPreviousPeriod = (Calendar)aCalendar.clone();
return new Calendar[] {firstDateOfPreviousPeriod, lastDateOfPreviousPeriod};
@ -226,16 +226,16 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
return null;
case YEARLY:
// statements are sent in Jan=1
if (month_of_year == 1) {
if (month_of_year == Calendar.JANUARY ) {
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
Calendar aCalendar = Calendar.getInstance();
Calendar aCalendar = (Calendar)today.clone();
aCalendar.add(Calendar.MONTH, -12);
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR, 0);
aCalendar.set(Calendar.MINUTE, 0);
aCalendar.set(Calendar.SECOND, 0);
firstDateOfPreviousPeriod = (Calendar)aCalendar.clone();
aCalendar.add(Calendar.MONTH, -1);
aCalendar.add(Calendar.MONTH, 11);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
lastDateOfPreviousPeriod = (Calendar)aCalendar.clone();
return new Calendar[] {firstDateOfPreviousPeriod, lastDateOfPreviousPeriod};

View File

@ -87,7 +87,7 @@ public class QuotaStatementTest extends TestCase {
}
@Test
public void testStatementPeriod() {
public void testStatementPeriodBIMONTHLY() {
Calendar date = Calendar.getInstance();
//BIMONTHLY - first statement of month
@ -104,6 +104,7 @@ public class QuotaStatementTest extends TestCase {
assertTrue(period[1].toString(), period[1].get(Calendar.DATE) == 15);
//BIMONTHLY - second statement of month
date = Calendar.getInstance();
date.set(Calendar.DATE, QuotaStatementImpl.s_LAST_STATEMENT_SENT_DAYS + 16);
period = quotaStatement.statementTime(date, STATEMENT_PERIODS.BIMONTHLY);
assertTrue(period == null);
@ -122,9 +123,17 @@ public class QuotaStatementTest extends TestCase {
assertTrue(period[1].toString(), period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE));
}
@Test
public void testStatementPeriodMONTHLY() {
Calendar date = Calendar.getInstance();
Calendar aCalendar = Calendar.getInstance();
//MONTHLY
date = Calendar.getInstance();
date.set(Calendar.DATE, QuotaStatementImpl.s_LAST_STATEMENT_SENT_DAYS + 1);
period = quotaStatement.statementTime(date, STATEMENT_PERIODS.MONTHLY);
Calendar period[] = quotaStatement.statementTime(date, STATEMENT_PERIODS.MONTHLY);
assertTrue(period == null);
//1 of this month
@ -143,6 +152,78 @@ public class QuotaStatementTest extends TestCase {
}
@Test
public void testStatementPeriodQUATERLY() {
Calendar date = Calendar.getInstance();
Calendar aCalendar = Calendar.getInstance();
//QUATERLY
date = Calendar.getInstance();
date.set(Calendar.MONTH, Calendar.JANUARY); // 1 Jan
date.set(Calendar.DATE, 1);
Calendar period[] = quotaStatement.statementTime(date, STATEMENT_PERIODS.QUATERLY);
assertTrue(period != null);
assertTrue("period[0].before(period[1])" + period[0].toString(), period[0].before(period[1]));
assertTrue("period[0].get(Calendar.DATE) == 1" + period[0].toString(), period[0].get(Calendar.DATE) == 1);
assertTrue("period[0].get(Calendar.MONTH) == Calendar.OCTOBER" + period[0].toString(), period[0].get(Calendar.MONTH) == Calendar.OCTOBER); //october
//get last day of the previous month
aCalendar = Calendar.getInstance();
aCalendar.set(Calendar.MONTH, Calendar.DECEMBER);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
assertTrue(" period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE)" + period[1].toString(), period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE));
assertTrue("period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH)" + period[1].toString(), period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH));
}
@Test
public void testStatementPeriodHALFYEARLY() {
Calendar date = Calendar.getInstance();
Calendar aCalendar = Calendar.getInstance();
//QUATERLY
date = Calendar.getInstance();
date.set(Calendar.MONTH, Calendar.JANUARY); // 1 Jan
date.set(Calendar.DATE, 1);
Calendar period[] = quotaStatement.statementTime(date, STATEMENT_PERIODS.HALFYEARLY);
assertTrue(period != null);
assertTrue("period[0].before(period[1])" + period[0].toString(), period[0].before(period[1]));
assertTrue("period[0].get(Calendar.DATE) == 1" + period[0].toString(), period[0].get(Calendar.DATE) == 1);
assertTrue("period[0].get(Calendar.MONTH) == Calendar.JULY" + period[0].toString(), period[0].get(Calendar.MONTH) == Calendar.JULY); //july
//get last day of the previous month
aCalendar = Calendar.getInstance();
aCalendar.set(Calendar.MONTH, Calendar.DECEMBER);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
assertTrue(" period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE)" + period[1].toString(), period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE));
assertTrue("period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH)" + period[1].toString(), period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH));
}
@Test
public void testStatementPeriodYEARLY() {
Calendar date = Calendar.getInstance();
Calendar aCalendar = Calendar.getInstance();
//QUATERLY
date = Calendar.getInstance();
date.set(Calendar.MONTH, Calendar.JANUARY); // 1 Jan
date.set(Calendar.DATE, 1);
Calendar period[] = quotaStatement.statementTime(date, STATEMENT_PERIODS.YEARLY);
assertTrue("period != null", period != null);
assertTrue("period[0].before(period[1])" + period[0].toString(), period[0].before(period[1]));
assertTrue("period[0].get(Calendar.DATE) == 1" + period[0].toString(), period[0].get(Calendar.DATE) == 1);
assertTrue("period[0].get(Calendar.MONTH) == Calendar.JANUARY" + period[0].toString(), period[0].get(Calendar.MONTH) == Calendar.JANUARY); //january
//get last day of the previous month
aCalendar = Calendar.getInstance();
aCalendar.set(Calendar.MONTH, Calendar.DECEMBER);
aCalendar.set(Calendar.DATE, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) + 1);
assertTrue(" period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE)" + period[1].toString(), period[1].get(Calendar.DATE) == aCalendar.get(Calendar.DATE));
assertTrue("period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH)" + period[1].toString(), period[1].get(Calendar.MONTH) == aCalendar.get(Calendar.MONTH));
}
@Test
public void testSendStatement() {
AccountVO accountVO = new AccountVO();