Fix Quota plugin state on QuotaSummaryResponse (#7257)

This commit is contained in:
Bryan Lima 2023-02-22 06:19:59 -03:00 committed by GitHub
parent e61051e4fc
commit c8ee0e7c30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 1 deletions

View File

@ -173,7 +173,7 @@ public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
return new Pair<>(result, count);
}
private QuotaSummaryResponse getQuotaSummaryResponse(final Account account) {
protected QuotaSummaryResponse getQuotaSummaryResponse(final Account account) {
Calendar[] period = _statement.getCurrentStatementTime();
if (account != null) {
@ -192,6 +192,7 @@ public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
qr.setStartDate(period[0].getTime());
qr.setEndDate(period[1].getTime());
qr.setCurrency(QuotaConfig.QuotaCurrencySymbol.value());
qr.setQuotaEnabled(QuotaConfig.QuotaAccountEnabled.valueIn(account.getId()));
qr.setObjectName("summary");
return qr;
} else {

View File

@ -16,24 +16,32 @@
// under the License.
package org.apache.cloudstack.api.response;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.function.Consumer;
import com.cloud.domain.DomainVO;
import com.cloud.domain.dao.DomainDao;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd;
import org.apache.cloudstack.api.command.QuotaEmailTemplateUpdateCmd;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.quota.QuotaService;
import org.apache.cloudstack.quota.QuotaStatement;
import org.apache.cloudstack.quota.constant.QuotaConfig;
import org.apache.cloudstack.quota.constant.QuotaTypes;
import org.apache.cloudstack.quota.dao.QuotaBalanceDao;
import org.apache.cloudstack.quota.dao.QuotaCreditsDao;
import org.apache.cloudstack.quota.dao.QuotaEmailTemplatesDao;
import org.apache.cloudstack.quota.dao.QuotaTariffDao;
import org.apache.cloudstack.quota.dao.QuotaUsageDao;
import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
import org.apache.cloudstack.quota.vo.QuotaCreditsVO;
import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO;
@ -87,11 +95,38 @@ public class QuotaResponseBuilderImplTest extends TestCase {
@Mock
QuotaTariffVO quotaTariffVoMock;
@Mock
QuotaStatement quotaStatementMock;
@Mock
DomainDao domainDaoMock;
@Mock
QuotaUsageDao quotaUsageDaoMock;
@InjectMocks
QuotaResponseBuilderImpl quotaResponseBuilderSpy = Mockito.spy(QuotaResponseBuilderImpl.class);
Date date = new Date();
@Mock
Account accountMock;
@Mock
DomainVO domainVOMock;
private void overrideDefaultQuotaEnabledConfigValue(final Object value) throws IllegalAccessException, NoSuchFieldException {
Field f = ConfigKey.class.getDeclaredField("_defaultValue");
f.setAccessible(true);
f.set(QuotaConfig.QuotaAccountEnabled, value);
}
private Calendar[] createPeriodForQuotaSummary() {
final Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 0);
return new Calendar[] {calendar, calendar};
}
private QuotaTariffVO makeTariffTestData() {
QuotaTariffVO tariffVO = new QuotaTariffVO();
tariffVO.setUsageType(QuotaTypes.IP_ADDRESS);
@ -339,4 +374,36 @@ public class QuotaResponseBuilderImplTest extends TestCase {
Mockito.verify(quotaTariffVoMock).setRemoved(Mockito.any(Date.class));
}
@Test
public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsDisabledShouldReturnFalse() throws NoSuchFieldException, IllegalAccessException {
Calendar[] period = createPeriodForQuotaSummary();
overrideDefaultQuotaEnabledConfigValue("false");
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong());
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class));
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class));
QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
assertFalse(quotaSummaryResponse.getQuotaEnabled());
}
@Test
public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsEnabledShouldReturnTrue() throws NoSuchFieldException, IllegalAccessException {
Calendar[] period = createPeriodForQuotaSummary();
overrideDefaultQuotaEnabledConfigValue("true");
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong());
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class));
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class));
QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
assertTrue(quotaSummaryResponse.getQuotaEnabled());
}
}