Skip to content

Commit c8ee0e7

Browse files
authored
Fix Quota plugin state on QuotaSummaryResponse (apache#7257)
1 parent e61051e commit c8ee0e7

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public Pair<List<QuotaSummaryResponse>, Integer> createQuotaSummaryResponse(Bool
173173
return new Pair<>(result, count);
174174
}
175175

176-
private QuotaSummaryResponse getQuotaSummaryResponse(final Account account) {
176+
protected QuotaSummaryResponse getQuotaSummaryResponse(final Account account) {
177177
Calendar[] period = _statement.getCurrentStatementTime();
178178

179179
if (account != null) {
@@ -192,6 +192,7 @@ private QuotaSummaryResponse getQuotaSummaryResponse(final Account account) {
192192
qr.setStartDate(period[0].getTime());
193193
qr.setEndDate(period[1].getTime());
194194
qr.setCurrency(QuotaConfig.QuotaCurrencySymbol.value());
195+
qr.setQuotaEnabled(QuotaConfig.QuotaAccountEnabled.valueIn(account.getId()));
195196
qr.setObjectName("summary");
196197
return qr;
197198
} else {

plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,32 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.response;
1818

19+
import java.lang.reflect.Field;
1920
import java.math.BigDecimal;
2021
import java.time.LocalDate;
2122
import java.time.LocalDateTime;
2223
import java.time.ZoneId;
2324
import java.util.ArrayList;
25+
import java.util.Calendar;
2426
import java.util.Date;
2527
import java.util.List;
2628
import java.util.function.Consumer;
2729

30+
import com.cloud.domain.DomainVO;
31+
import com.cloud.domain.dao.DomainDao;
2832
import org.apache.cloudstack.api.ServerApiException;
2933
import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd;
3034
import org.apache.cloudstack.api.command.QuotaEmailTemplateUpdateCmd;
35+
import org.apache.cloudstack.framework.config.ConfigKey;
3136
import org.apache.cloudstack.quota.QuotaService;
37+
import org.apache.cloudstack.quota.QuotaStatement;
38+
import org.apache.cloudstack.quota.constant.QuotaConfig;
3239
import org.apache.cloudstack.quota.constant.QuotaTypes;
3340
import org.apache.cloudstack.quota.dao.QuotaBalanceDao;
3441
import org.apache.cloudstack.quota.dao.QuotaCreditsDao;
3542
import org.apache.cloudstack.quota.dao.QuotaEmailTemplatesDao;
3643
import org.apache.cloudstack.quota.dao.QuotaTariffDao;
44+
import org.apache.cloudstack.quota.dao.QuotaUsageDao;
3745
import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
3846
import org.apache.cloudstack.quota.vo.QuotaCreditsVO;
3947
import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO;
@@ -87,11 +95,38 @@ public class QuotaResponseBuilderImplTest extends TestCase {
8795
@Mock
8896
QuotaTariffVO quotaTariffVoMock;
8997

98+
@Mock
99+
QuotaStatement quotaStatementMock;
100+
101+
@Mock
102+
DomainDao domainDaoMock;
103+
104+
@Mock
105+
QuotaUsageDao quotaUsageDaoMock;
106+
90107
@InjectMocks
91108
QuotaResponseBuilderImpl quotaResponseBuilderSpy = Mockito.spy(QuotaResponseBuilderImpl.class);
92109

93110
Date date = new Date();
94111

112+
@Mock
113+
Account accountMock;
114+
115+
@Mock
116+
DomainVO domainVOMock;
117+
118+
private void overrideDefaultQuotaEnabledConfigValue(final Object value) throws IllegalAccessException, NoSuchFieldException {
119+
Field f = ConfigKey.class.getDeclaredField("_defaultValue");
120+
f.setAccessible(true);
121+
f.set(QuotaConfig.QuotaAccountEnabled, value);
122+
}
123+
124+
private Calendar[] createPeriodForQuotaSummary() {
125+
final Calendar calendar = Calendar.getInstance();
126+
calendar.set(Calendar.HOUR, 0);
127+
return new Calendar[] {calendar, calendar};
128+
}
129+
95130
private QuotaTariffVO makeTariffTestData() {
96131
QuotaTariffVO tariffVO = new QuotaTariffVO();
97132
tariffVO.setUsageType(QuotaTypes.IP_ADDRESS);
@@ -339,4 +374,36 @@ public void deleteQuotaTariffTestUpdateRemoved() {
339374

340375
Mockito.verify(quotaTariffVoMock).setRemoved(Mockito.any(Date.class));
341376
}
377+
378+
@Test
379+
public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsDisabledShouldReturnFalse() throws NoSuchFieldException, IllegalAccessException {
380+
Calendar[] period = createPeriodForQuotaSummary();
381+
overrideDefaultQuotaEnabledConfigValue("false");
382+
383+
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong());
384+
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
385+
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
386+
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class));
387+
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class));
388+
389+
QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
390+
391+
assertFalse(quotaSummaryResponse.getQuotaEnabled());
392+
}
393+
394+
@Test
395+
public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsEnabledShouldReturnTrue() throws NoSuchFieldException, IllegalAccessException {
396+
Calendar[] period = createPeriodForQuotaSummary();
397+
overrideDefaultQuotaEnabledConfigValue("true");
398+
399+
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong());
400+
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
401+
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
402+
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class));
403+
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class));
404+
405+
QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
406+
407+
assertTrue(quotaSummaryResponse.getQuotaEnabled());
408+
}
342409
}

0 commit comments

Comments
 (0)