// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.ovm3.resources; import javax.naming.ConfigurationException; import org.apache.cloudstack.storage.command.CopyCmdAnswer; import org.apache.cloudstack.storage.command.CopyCommand; import org.apache.cloudstack.storage.command.CreateObjectCommand; import org.apache.cloudstack.storage.command.DeleteCommand; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.to.SnapshotObjectTO; import org.apache.cloudstack.storage.to.TemplateObjectTO; import org.apache.cloudstack.storage.to.VolumeObjectTO; import org.junit.Test; import com.cloud.agent.api.Answer; import com.cloud.agent.api.storage.CopyVolumeCommand; import com.cloud.agent.api.to.DiskTO; import com.cloud.agent.api.to.NfsTO; import com.cloud.hypervisor.ovm3.objects.ConnectionTest; import com.cloud.hypervisor.ovm3.objects.LinuxTest; import com.cloud.hypervisor.ovm3.objects.OvmObject; import com.cloud.hypervisor.ovm3.objects.StoragePluginTest; import com.cloud.hypervisor.ovm3.objects.XenTest; import com.cloud.hypervisor.ovm3.objects.XmlTestResultTest; import com.cloud.hypervisor.ovm3.resources.helpers.Ovm3Configuration; import com.cloud.hypervisor.ovm3.resources.helpers.Ovm3ConfigurationTest; import com.cloud.hypervisor.ovm3.support.Ovm3SupportTest; import com.cloud.storage.Volume; import com.cloud.vm.DiskProfile; public class Ovm3StorageProcessorTest { ConnectionTest con = new ConnectionTest(); OvmObject ovmObject = new OvmObject(); XmlTestResultTest results = new XmlTestResultTest(); Ovm3ConfigurationTest configTest = new Ovm3ConfigurationTest(); Ovm3HypervisorResource hypervisor = new Ovm3HypervisorResource(); Ovm3SupportTest support = new Ovm3SupportTest(); LinuxTest linux = new LinuxTest(); XenTest xen = new XenTest(); StoragePluginTest storageplugin = new StoragePluginTest(); private ConnectionTest prepare() throws ConfigurationException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); con = support.prepConnectionResults(); hypervisor.setConnection(con); results.basicBooleanTest(hypervisor.configure(config.getAgentName(), configTest.getParams())); return con; } /* these could all actually be condensed to a DiskTO */ private TemplateObjectTO template(final String uuid, final String dsuuid, final String storeUrl, final String path) { TemplateObjectTO template = new TemplateObjectTO(); NfsTO nfsDataStore = new NfsTO(); nfsDataStore.setUuid(dsuuid); nfsDataStore.setUrl(storeUrl); template.setDataStore(nfsDataStore); template.setPath(path); template.setUuid(uuid); return template; } private VolumeObjectTO volume(final String uuid, final String dsuuid, final String storeUrl, final String path) { VolumeObjectTO volume = new VolumeObjectTO(); NfsTO nfsDataStore = new NfsTO(); nfsDataStore.setUuid(dsuuid); nfsDataStore.setUrl(storeUrl); volume.setDataStore(nfsDataStore); volume.setPath(path); volume.setUuid(uuid); return volume; } private SnapshotObjectTO snapshot(final String uuid, final String dsuuid, final String storeUrl, final String path) { SnapshotObjectTO volume = new SnapshotObjectTO(); NfsTO nfsDataStore = new NfsTO(); nfsDataStore.setUuid(dsuuid); nfsDataStore.setUrl(storeUrl); volume.setDataStore(nfsDataStore); volume.setPath(path); // volume.setUuid(uuid); return volume; } private DiskTO disk(final String uuid, final String dsuuid, final String storeUrl, final String path, Volume.Type type) { DiskTO disk = new DiskTO(); disk.setType(type); disk.setPath(""); TemplateObjectTO template = template(uuid, dsuuid, storeUrl, path); disk.setData(template); return disk; } /** * Copy template from primary to primary volume * * @throws ConfigurationException */ @Test public void copyCommandTemplateToVolumeTest() throws ConfigurationException { con = prepare(); String voluuid = ovmObject.newUuid(); TemplateObjectTO src = template(ovmObject.newUuid(), ovmObject.newUuid(), linux.getRepoId(), linux.getTemplatesDir()); VolumeObjectTO dest = volume(voluuid, ovmObject.newUuid(), linux.getRepoId(), linux.getVirtualDisksDir()); CopyCommand copy = new CopyCommand(src, dest, 0, true); CopyCmdAnswer ra = (CopyCmdAnswer) hypervisor.executeRequest(copy); VolumeObjectTO vol = (VolumeObjectTO) ra.getNewData(); results.basicStringTest(vol.getUuid(), voluuid); results.basicStringTest(vol.getPath(), voluuid); results.basicBooleanTest(ra.getResult()); } /** * Copy template from secondary to primary template * * @throws ConfigurationException */ @Test public void copyCommandTemplateToTemplateTest() throws ConfigurationException { con = prepare(); con.setMethodResponse("storage_plugin_mount", results.simpleResponseWrapWrapper(storageplugin .getNfsFileSystemInfo())); /* * because the template requires a reference to the name for the uuid... * -sigh- */ String templateid = ovmObject.newUuid(); String targetid = ovmObject.newUuid(); String templatedir = "template/tmpl/1/11" + templateid + ".raw"; String storeUrl = "nfs://" + linux.getRemoteHost() + "/" + linux.getRemoteDir(); TemplateObjectTO src = template(templateid, linux.getRepoId(), storeUrl, templatedir); TemplateObjectTO dest = template(targetid, linux.getRepoId(), linux.getRepoId(), linux.getTemplatesDir()); CopyCommand copy = new CopyCommand(src, dest, 0, true); CopyCmdAnswer ra = (CopyCmdAnswer) hypervisor.executeRequest(copy); TemplateObjectTO vol = (TemplateObjectTO) ra.getNewData(); results.basicStringTest(vol.getUuid(), targetid); results.basicStringTest(vol.getPath(), targetid); results.basicBooleanTest(ra.getResult()); } /** * Copy template from secondary to primary template * * @throws ConfigurationException */ @Test public void copyCommandBogusTest() throws ConfigurationException { con = prepare(); VolumeObjectTO src = volume(ovmObject.newUuid(), ovmObject.newUuid(), ovmObject.newUuid(linux.getRemote()), linux.getRemote()); VolumeObjectTO dest = volume(ovmObject.newUuid(), ovmObject.newUuid(), linux.getRepoId(), linux.getVirtualDisksDir()); CopyCommand copy = new CopyCommand(src, dest, 0, false); Answer ra = hypervisor.executeRequest(copy); results.basicBooleanTest(ra.getResult(), false); } /** * Delete an object * * @throws ConfigurationException */ @Test public void deleteCommandTest() throws ConfigurationException { con = prepare(); VolumeObjectTO vol = volume(ovmObject.newUuid(), ovmObject.newUuid(), linux.getRepoId(), linux.getVirtualDisksDir()); DeleteCommand delete = new DeleteCommand(vol); Answer ra = hypervisor.executeRequest(delete); results.basicBooleanTest(ra.getResult()); TemplateObjectTO template = template(ovmObject.newUuid(), ovmObject.newUuid(), ovmObject.newUuid(linux.getRemote()), linux.getRemote()); delete = new DeleteCommand(template); ra = hypervisor.executeRequest(delete); results.basicBooleanTest(ra.getResult(), false); SnapshotObjectTO snap = snapshot(ovmObject.newUuid(), ovmObject.newUuid(), ovmObject.newUuid(linux.getRemote()), linux.getRemote()); delete = new DeleteCommand(snap); ra = hypervisor.executeRequest(delete); results.basicBooleanTest(ra.getResult(), false); } public DiskProfile diskProfile() { DiskProfile dp = new DiskProfile(1L, Volume.Type.ROOT, xen.getVmRootDiskName(), 1, storageplugin.getFileSize(), new String[0], false, false, 1L); return dp; } /* * unused ? * * @Test * public void createCommandTest() throws ConfigurationException { * con = prepare(); * DiskProfile disk = diskProfile(); * String templateUrl = null; * StoragePoolVO poolio = new StoragePoolVO(); * poolio.setPath(linux.getTemplatesDir()); * poolio.setHostAddress(linux.getRemoteHost()); * * CreateCommand create = new CreateCommand(disk, templateUrl, poolio , * false); * Answer ra = hypervisor.executeRequest(create); * results.basicBooleanTest(ra.getResult()); * } */ @Test public void createTemplateObjectCommandTest() throws ConfigurationException { con = prepare(); String tempuuid = ovmObject.newUuid(); TemplateObjectTO template = template(tempuuid, ovmObject.newUuid(), ovmObject.newUuid(linux.getRemote()), linux.getRemote()); template.setSize(storageplugin.getFileSize()); String response = storageplugin.getFileCreateXml().replace( storageplugin.getFileName(), tempuuid + ".raw"); response = response.replace(storageplugin.getPoolUuid(), ovmObject.deDash(linux.getRepoId())); con.setMethodResponse("storage_plugin_create", results.simpleResponseWrapWrapper(response)); CreateObjectCommand create = new CreateObjectCommand(template); Answer ra = hypervisor.executeRequest(create); results.basicBooleanTest(ra.getResult(), false); } @Test public void createVolumeObjectCommandTest() throws ConfigurationException { con = prepare(); String voluuid = ovmObject.newUuid(); VolumeObjectTO vol = volume(voluuid, linux.getRepoId(), "", linux.getVirtualDisksDir()); vol.setSize(storageplugin.getFileSize()); String response = storageplugin.getFileCreateXml().replace( storageplugin.getFileName(), voluuid + ".raw"); response = response.replace(storageplugin.getPoolUuid(), ovmObject.deDash(linux.getRepoId())); con.setMethodResponse("storage_plugin_create", results.simpleResponseWrapWrapper(response)); CreateObjectCommand create = new CreateObjectCommand(vol); Answer ra = hypervisor.executeRequest(create); results.basicBooleanTest(ra.getResult()); } @Test public void createSnapshotObjectCommandTest() throws ConfigurationException { con = prepare(); String snapuuid = ovmObject.newUuid(); SnapshotObjectTO snap = snapshot(snapuuid, linux.getRepoId(), "", linux.getVirtualDisksDir()); String response = storageplugin.getFileCreateXml().replace( storageplugin.getFileName(), snapuuid + ".raw"); response = response.replace(storageplugin.getPoolUuid(), ovmObject.deDash(linux.getRepoId())); con.setMethodResponse("storage_plugin_create", results.simpleResponseWrapWrapper(response)); CreateObjectCommand create = new CreateObjectCommand(snap); Answer ra = hypervisor.executeRequest(create); results.basicBooleanTest(ra.getResult(), false); } /* * used ? * * @Test * public void isoAttachTest() throws ConfigurationException { * con = prepare(); * con.setMethodResponse("storage_plugin_mount", * results.simpleResponseWrapWrapper(storageplugin.getNfsFileSystemInfo())); * String diskid = ovmObject.newUuid(); * String storeUrl = "nfs://" + linux.getRemoteHost() + "/" + * linux.getIsoDir(); * DiskTO disk = disk(diskid, ovmObject.newUuid(), storeUrl, "bla", * Volume.Type.ISO); * AttachCommand at = new AttachCommand((DiskTO) disk, xen.getVmName()); * Answer ra = storage.attachIso(at); * System.out.println(ra); * } */ @Test public void isoDettachTest() throws ConfigurationException { con = prepare(); } @Test public void copyVolumeCommandTest() throws ConfigurationException { con = prepare(); String src = linux.getVirtualDisksDir() + ovmObject.newUuid() + ".raw"; String dst = linux.getVirtualDisksDir() + ovmObject.newUuid() + ".raw"; StoragePoolVO poolio = new StoragePoolVO(); CopyVolumeCommand copy = new CopyVolumeCommand(0, src, poolio, dst, true, 0, false); Answer ra = hypervisor.executeRequest(copy); results.basicBooleanTest(ra.getResult()); copy = new CopyVolumeCommand(0, src, poolio, dst, false, 0, false); ra = hypervisor.executeRequest(copy); results.basicBooleanTest(ra.getResult()); } /* * unused ? * * @Test * public void destroyCommandTest() throws ConfigurationException { * con = prepare(); * DestroyCommand destroy = new DestroyCommand(support.pool, * (Volume) volume(xen.getVmRootDiskUuid(), linux.getRepoId(), "", * linux.getVirtualDisksDir()), * xen.getVmName()); * } */ }