From c8ee0e7c3024f8d72d6ba0a858c6a52c0956c1c0 Mon Sep 17 00:00:00 2001 From: Bryan Lima <42067040+BryanMLima@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:19:59 -0300 Subject: [PATCH] Fix Quota plugin state on QuotaSummaryResponse (#7257) --- .../response/QuotaResponseBuilderImpl.java | 3 +- .../QuotaResponseBuilderImplTest.java | 67 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java index a2c86cd15da..32b49a72ae4 100644 --- a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java +++ b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java @@ -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 { diff --git a/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java index 2c27b8ef8a5..a02afdaf45e 100644 --- a/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java +++ b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java @@ -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()); + } }