package org.zstack.test.core.scheduler;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.core.scheduler.SchedulerConstant;
import org.zstack.header.core.scheduler.SchedulerVO;
import org.zstack.header.identity.AccountInventory;
import org.zstack.header.identity.QuotaInventory;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.header.vm.VmInstanceInventory;
import org.zstack.test.Api;
import org.zstack.test.ApiSenderException;
import org.zstack.test.DBUtil;
import org.zstack.test.deployer.Deployer;
import org.zstack.test.identity.IdentityCreator;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created by root on 8/23/16.
*/
public class TestSchedulerQuota {
Deployer deployer;
Api api;
ComponentLoader loader;
CloudBus bus;
DatabaseFacade dbf;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void setUp() throws Exception {
DBUtil.reDeployDB();
deployer = new Deployer("deployerXml/vm/TestCreateVm.xml");
deployer.build();
api = deployer.getApi();
loader = deployer.getComponentLoader();
bus = loader.getComponent(CloudBus.class);
dbf = loader.getComponent(DatabaseFacade.class);
}
@Test
public void test() throws ApiSenderException, InterruptedException {
VmInstanceInventory inv = api.listVmInstances(null).get(0);
IdentityCreator identityCreator = new IdentityCreator(api);
api.createAccount("Test", "Test");
AccountInventory test = identityCreator.useAccount("test");
api.shareResource(api.listL3Network(null).stream().map(L3NetworkInventory::getUuid).collect(Collectors.toList()),
Arrays.<String>asList(test.getUuid()),
true);
api.changeResourceOwner(inv.getUuid(), test.getUuid());
api.updateQuota(test.getUuid(), SchedulerConstant.QUOTA_SCHEDULER_NUM, 0);
QuotaInventory schedulerQuotaInv = api.getQuota(SchedulerConstant.QUOTA_SCHEDULER_NUM, test.getUuid(), null);
Assert.assertEquals(0, schedulerQuotaInv.getValue());
thrown.expect(ApiSenderException.class);
thrown.expectMessage(SchedulerConstant.QUOTA_SCHEDULER_NUM);
{
// create start vm scheduler, will not take effect at start due to vm status is running
Date date = new Date();
String type = "simple";
Long startDate = date.getTime() / 1000;
Integer interval = 5;
String uuid = inv.getUuid();
Integer repeatCount = 10;
api.startVmInstanceScheduler(uuid, type, startDate, interval, repeatCount, identityCreator.getAccountSession());
}
// check scheduler num
List<SchedulerVO> vos = dbf.listAll(SchedulerVO.class);
Assert.assertEquals(0, vos.size());
}
}