This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new c8ee0e7c302 Fix Quota plugin state on QuotaSummaryResponse (#7257)
c8ee0e7c302 is described below
commit c8ee0e7c3024f8d72d6ba0a858c6a52c0956c1c0
Author: Bryan Lima <[email protected]>
AuthorDate: Wed Feb 22 06:19:59 2023 -0300
Fix Quota plugin state on QuotaSummaryResponse (#7257)
---
.../api/response/QuotaResponseBuilderImpl.java | 3 +-
.../api/response/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());
+ }
}