package org.zstack.test.compute.vm;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.header.identity.SessionInventory;
import org.zstack.header.image.ImageInventory;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.header.vm.APIGetInterdependentL3NetworkImageReply;
import org.zstack.header.vm.APIGetInterdependentL3NetworksImagesMsg;
import org.zstack.header.zone.ZoneInventory;
import org.zstack.storage.primary.local.LocalStorageSimulatorConfig;
import org.zstack.storage.primary.local.LocalStorageSimulatorConfig.Capacity;
import org.zstack.test.*;
import org.zstack.test.deployer.Deployer;
import org.zstack.test.storage.backup.sftp.TestSftpBackupStorageDeleteImage2;
import org.zstack.utils.Utils;
import org.zstack.utils.data.SizeUnit;
import org.zstack.utils.logging.CLogger;
import static java.util.Arrays.asList;
public class TestGetInterdependentL3NetworksImages {
CLogger logger = Utils.getLogger(TestSftpBackupStorageDeleteImage2.class);
Deployer deployer;
Api api;
ComponentLoader loader;
CloudBus bus;
DatabaseFacade dbf;
SessionInventory session;
LocalStorageSimulatorConfig lconfig;
@Before
public void setUp() throws Exception {
DBUtil.reDeployDB();
WebBeanConstructor con = new WebBeanConstructor();
deployer = new Deployer("deployerXml/vm/TestGetInterdependentL3NetworksImages.xml", con);
deployer.addSpringConfig("KVMRelated.xml");
deployer.addSpringConfig("localStorageSimulator.xml");
deployer.addSpringConfig("localStorage.xml");
deployer.addSpringConfig("ceph.xml");
deployer.addSpringConfig("cephSimulator.xml");
deployer.addSpringConfig("smpPrimaryStorageSimulator.xml");
deployer.addSpringConfig("sharedMountPointPrimaryStorage.xml");
deployer.load();
loader = deployer.getComponentLoader();
lconfig = loader.getComponent(LocalStorageSimulatorConfig.class);
Capacity c = new Capacity();
c.total = c.avail = SizeUnit.GIGABYTE.toByte(1000);
lconfig.capacityMap.put("host1", c);
lconfig.capacityMap.put("host2", c);
lconfig.capacityMap.put("host3", c);
lconfig.capacityMap.put("host4", c);
deployer.build();
api = deployer.getApi();
bus = loader.getComponent(CloudBus.class);
dbf = loader.getComponent(DatabaseFacade.class);
session = api.loginAsAdmin();
}
@Test
public void test() throws ApiSenderException {
ZoneInventory zone = deployer.zones.get("Zone1");
ImageInventory imgOnSftp = deployer.images.get("TestImage");
ImageInventory imgOnCeph = deployer.images.get("TestImage1");
L3NetworkInventory l31 = deployer.l3Networks.get("TestL3Network1");
L3NetworkInventory l32 = deployer.l3Networks.get("TestL3Network2");
L3NetworkInventory l33 = deployer.l3Networks.get("TestL3Network3");
L3NetworkInventory l34 = deployer.l3Networks.get("TestL3Network4");
APIGetInterdependentL3NetworksImagesMsg msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setImageUuid(imgOnSftp.getUuid());
msg.setSession(api.getAdminSession());
ApiSender sender = api.getApiSender();
APIGetInterdependentL3NetworkImageReply reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(3, reply.getInventories().size());
// network 1, 2, 4
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
L3NetworkInventory l3 = (L3NetworkInventory) o;
return l3.getUuid().equals(l31.getUuid());
}).findAny().isPresent());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
L3NetworkInventory l3 = (L3NetworkInventory) o;
return l3.getUuid().equals(l32.getUuid());
}).findAny().isPresent());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
L3NetworkInventory l3 = (L3NetworkInventory) o;
return l3.getUuid().equals(l34.getUuid());
}).findAny().isPresent());
msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setImageUuid(imgOnCeph.getUuid());
msg.setSession(api.getAdminSession());
sender = api.getApiSender();
reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(2, reply.getInventories().size());
// only network 1, 3
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
L3NetworkInventory l3 = (L3NetworkInventory) o;
return l3.getUuid().equals(l33.getUuid());
}).findAny().isPresent());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
L3NetworkInventory l3 = (L3NetworkInventory) o;
return l3.getUuid().equals(l31.getUuid());
}).findAny().isPresent());
msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setL3NetworkUuids(asList(l31.getUuid()));
msg.setSession(api.getAdminSession());
sender = api.getApiSender();
reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(2, reply.getInventories().size());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
ImageInventory i = (ImageInventory) o;
return i.getUuid().equals(imgOnCeph.getUuid());
}).findAny().isPresent());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
ImageInventory i = (ImageInventory) o;
return i.getUuid().equals(imgOnSftp.getUuid());
}).findAny().isPresent());
msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setL3NetworkUuids(asList(l31.getUuid(), l32.getUuid()));
msg.setSession(api.getAdminSession());
sender = api.getApiSender();
reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(1, reply.getInventories().size());
Assert.assertTrue(reply.getInventories().stream().filter(o -> {
ImageInventory i = (ImageInventory) o;
return i.getUuid().equals(imgOnSftp.getUuid());
}).findAny().isPresent());
msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setL3NetworkUuids(asList(l31.getUuid(), l32.getUuid(), l33.getUuid(), l34.getUuid()));
msg.setSession(api.getAdminSession());
sender = api.getApiSender();
reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(0, reply.getInventories().size());
ImageInventory image2 = deployer.images.get("TestImage2");
L3NetworkInventory l3Network5 = deployer.l3Networks.get("TestL3Network5");
msg = new APIGetInterdependentL3NetworksImagesMsg();
msg.setZoneUuid(zone.getUuid());
msg.setImageUuid(image2.getUuid());
msg.setSession(api.getAdminSession());
sender = api.getApiSender();
reply = sender.call(msg, APIGetInterdependentL3NetworkImageReply.class);
Assert.assertEquals(1, reply.getInventories().size());
L3NetworkInventory l35 = (L3NetworkInventory) reply.getInventories().get(0);
Assert.assertEquals(l3Network5.getUuid(), l35.getUuid());
}
}