/* * Copyright (c) 2010 Red Hat, Inc. * * Licensed 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 org.ovirt.engine.api.common.util; import java.net.URI; import javax.ws.rs.core.UriInfo; import org.junit.Assert; import org.junit.Test; import org.ovirt.engine.api.model.CdRom; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Event; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.File; import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.Network; import org.ovirt.engine.api.model.NIC; import org.ovirt.engine.api.model.Statistic; import org.ovirt.engine.api.model.Storage; import org.ovirt.engine.api.model.StorageDomain; import org.ovirt.engine.api.model.Tag; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.User; import org.ovirt.engine.api.model.VmPool; import org.ovirt.engine.api.model.VM; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; public class LinkHelperTest extends Assert { private static final String VM_ID = "awesome"; private static final String CLUSTER_ID = "alarming"; private static final String TEMPLATE_ID = "astonishing"; private static final String VM_POOL_ID = "beautiful"; private static final String STORAGE_DOMAIN_ID = "breathtaking"; private static final String HOST_ID = "magnificent"; private static final String DATA_CENTER_ID = "majestic"; private static final String NETWORK_ID = "stupendous"; private static final String TAG_ID = "outstanding"; private static final String FILE_ID = "faroutdude"; private static final String CDROM_ID = "wonderful"; private static final String DISK_ID = "fantastic"; private static final String NIC_ID = "super"; private static final String STORAGE_ID = "sensational"; private static final String USER_ID = "doublerainbowalltheway"; private static final String GROUP_ID = "bankruptnation"; private static final String EVENT_ID = "eventtest"; private static final String STATISTIC_ID = "bleedindeadly"; private static final String URI_ROOT = "http://localhost:8080"; private static final String BASE_PATH = "/restapi-definition-powershell"; private static final String VM_HREF = BASE_PATH + "/vms/" + VM_ID; private static final String CLUSTER_HREF = BASE_PATH + "/clusters/" + CLUSTER_ID; private static final String TEMPLATE_HREF = BASE_PATH + "/templates/" + TEMPLATE_ID; private static final String VM_POOL_HREF = BASE_PATH + "/vmpools/" + VM_POOL_ID; private static final String STORAGE_DOMAIN_HREF = BASE_PATH + "/storagedomains/" + STORAGE_DOMAIN_ID; private static final String ATTACHED_STORAGE_DOMAIN_HREF = BASE_PATH + "/datacenters/" + DATA_CENTER_ID + "/storagedomains/" + STORAGE_DOMAIN_ID; private static final String STORAGE_DOMAIN_VM_HREF = STORAGE_DOMAIN_HREF + "/vms/" + VM_ID; private static final String STORAGE_DOMAIN_TEMPLATE_HREF = STORAGE_DOMAIN_HREF + "/templates/" + TEMPLATE_ID; private static final String HOST_HREF = BASE_PATH + "/hosts/" + HOST_ID; private static final String DATA_CENTER_HREF = BASE_PATH + "/datacenters/" + DATA_CENTER_ID; private static final String NETWORK_HREF = BASE_PATH + "/networks/" + NETWORK_ID; private static final String TAG_HREF = BASE_PATH + "/tags/" + TAG_ID; private static final String VM_TAG_HREF = BASE_PATH + "/vms/" + VM_ID + "/tags/" + TAG_ID; private static final String HOST_TAG_HREF = BASE_PATH + "/hosts/" + HOST_ID + "/tags/" + TAG_ID; private static final String USER_TAG_HREF = BASE_PATH + "/users/" + USER_ID + "/tags/" + TAG_ID; private static final String CLUSTER_NETWORK_HREF = BASE_PATH + "/clusters/" + CLUSTER_ID + "/networks/" + NETWORK_ID; private static final String FILE_HREF = BASE_PATH + "/storagedomains/" + STORAGE_DOMAIN_ID + "/files/" + FILE_ID; private static final String CDROM_HREF = VM_HREF + "/cdroms/" + CDROM_ID; private static final String DISK_HREF = VM_HREF + "/disks/" + DISK_ID; private static final String NIC_HREF = VM_HREF + "/nics/" + NIC_ID; private static final String STORAGE_HREF = HOST_HREF + "/storage/" + STORAGE_ID; private static final String GROUP_HREF = BASE_PATH + "/groups/" + GROUP_ID; private static final String EVENT_HREF = BASE_PATH + "/events/" + EVENT_ID; private static final String STATISTIC_HREF = VM_HREF + "/statistics/" + STATISTIC_ID; @Test public void testEventLinks() throws Exception { Event event = new Event(); event.setId(EVENT_ID); LinkHelper.addLinks(setUpUriExpectations(), event); assertEquals(EVENT_HREF, event.getHref()); } @Test public void testVmLinks() throws Exception { doTestVmLinks(false); } @Test public void testVmLinksSuggestedParent() throws Exception { doTestVmLinks(true); } private void doTestVmLinks(boolean suggestParent) throws Exception { VM vm = new VM(); vm.setId(VM_ID); vm.setCluster(new Cluster()); vm.getCluster().setId(CLUSTER_ID); vm.setTemplate(new Template()); vm.getTemplate().setId(TEMPLATE_ID); vm.setVmPool(new VmPool()); vm.getVmPool().setId(VM_POOL_ID); if (suggestParent) { LinkHelper.addLinks(setUpUriExpectations(), vm, VM.class); } else { LinkHelper.addLinks(setUpUriExpectations(), vm); } assertEquals(VM_HREF, vm.getHref()); assertEquals(CLUSTER_HREF, vm.getCluster().getHref()); assertEquals(TEMPLATE_HREF, vm.getTemplate().getHref()); assertEquals(VM_POOL_HREF, vm.getVmPool().getHref()); } @Test public void testClusterLinks() throws Exception { Cluster cluster = new Cluster(); cluster.setId(CLUSTER_ID); cluster.setDataCenter(new DataCenter()); cluster.getDataCenter().setId(DATA_CENTER_ID); LinkHelper.addLinks(setUpUriExpectations(), cluster); assertEquals(CLUSTER_HREF, cluster.getHref()); assertEquals(DATA_CENTER_HREF, cluster.getDataCenter().getHref()); } @Test public void testHostLinks() throws Exception { Host host = new Host(); host.setId(HOST_ID); LinkHelper.addLinks(setUpUriExpectations(), host); assertEquals(HOST_HREF, host.getHref()); } @Test public void testStorageDomainLinks() throws Exception { StorageDomain storageDomain = new StorageDomain(); storageDomain.setId(STORAGE_DOMAIN_ID); storageDomain.setStorage(new Storage()); storageDomain.getStorage().setPath("foo"); LinkHelper.addLinks(setUpUriExpectations(), storageDomain); assertEquals(STORAGE_DOMAIN_HREF, storageDomain.getHref()); assertNull(storageDomain.getStorage().getHref()); } @Test public void testAttachedStorageDomainLinks() throws Exception { StorageDomain storageDomain = new StorageDomain(); storageDomain.setId(STORAGE_DOMAIN_ID); storageDomain.setDataCenter(new DataCenter()); storageDomain.getDataCenter().setId(DATA_CENTER_ID); LinkHelper.addLinks(setUpUriExpectations(), storageDomain); assertEquals(ATTACHED_STORAGE_DOMAIN_HREF, storageDomain.getHref()); } @Test public void testStorageDomainVmLinks() throws Exception { VM vm = new VM(); vm.setId(VM_ID); vm.setStorageDomain(new StorageDomain()); vm.getStorageDomain().setId(STORAGE_DOMAIN_ID); vm = LinkHelper.addLinks(setUpUriExpectations(), vm); assertEquals(STORAGE_DOMAIN_VM_HREF, vm.getHref()); assertEquals(STORAGE_DOMAIN_HREF, vm.getStorageDomain().getHref()); } @Test public void testStorageDomainTemplateLinks() throws Exception { Template template = new Template(); template.setId(TEMPLATE_ID); template.setStorageDomain(new StorageDomain()); template.getStorageDomain().setId(STORAGE_DOMAIN_ID); template = LinkHelper.addLinks(setUpUriExpectations(), template); assertEquals(STORAGE_DOMAIN_TEMPLATE_HREF, template.getHref()); assertEquals(STORAGE_DOMAIN_HREF, template.getStorageDomain().getHref()); } @Test public void testDataCenterLinks() throws Exception { DataCenter dataCenter = new DataCenter(); dataCenter.setId(DATA_CENTER_ID); LinkHelper.addLinks(setUpUriExpectations(), dataCenter); assertEquals(DATA_CENTER_HREF, dataCenter.getHref()); } @Test public void testNetworkLinks() throws Exception { Network network = new Network(); network.setId(NETWORK_ID); LinkHelper.addLinks(setUpUriExpectations(), network); assertEquals(NETWORK_HREF, network.getHref()); } @Test public void testClusterNetworkLinks() throws Exception { Network network = new Network(); network.setId(NETWORK_ID); network.setCluster(new Cluster()); network.getCluster().setId(CLUSTER_ID); LinkHelper.addLinks(setUpUriExpectations(), network); assertEquals(CLUSTER_NETWORK_HREF, network.getHref()); } @Test public void testTagLinks() throws Exception { Tag tag = new Tag(); tag.setId(TAG_ID); LinkHelper.addLinks(setUpUriExpectations(), tag); assertEquals(TAG_HREF, tag.getHref()); } @Test public void testVmTagLinks() throws Exception { Tag tag = new Tag(); tag.setId(TAG_ID); tag.setVm(new VM()); tag.getVm().setId(VM_ID); LinkHelper.addLinks(setUpUriExpectations(), tag); assertEquals(VM_TAG_HREF, tag.getHref()); } @Test public void testHostTagLinks() throws Exception { Tag tag = new Tag(); tag.setId(TAG_ID); tag.setHost(new Host()); tag.getHost().setId(HOST_ID); LinkHelper.addLinks(setUpUriExpectations(), tag); assertEquals(HOST_TAG_HREF, tag.getHref()); } @Test public void testUserTagLinks() throws Exception { Tag tag = new Tag(); tag.setId(TAG_ID); tag.setUser(new User()); tag.getUser().setId(USER_ID); LinkHelper.addLinks(setUpUriExpectations(), tag); assertEquals(USER_TAG_HREF, tag.getHref()); } @Test public void testFileLinks() throws Exception { File file = new File(); file.setId(FILE_ID); file.setStorageDomain(new StorageDomain()); file.getStorageDomain().setId(STORAGE_DOMAIN_ID); LinkHelper.addLinks(setUpUriExpectations(), file); assertEquals(FILE_HREF, file.getHref()); } @Test public void testCdRomLinks() throws Exception { CdRom cdrom = new CdRom(); cdrom.setId(CDROM_ID); cdrom.setVm(new VM()); cdrom.getVm().setId(VM_ID); LinkHelper.addLinks(setUpUriExpectations(), cdrom); assertEquals(CDROM_HREF, cdrom.getHref()); } @Test public void testDiskLinks() throws Exception { Disk disk = new Disk(); disk.setId(DISK_ID); disk.setVm(new VM()); disk.getVm().setId(VM_ID); LinkHelper.addLinks(setUpUriExpectations(), disk); assertEquals(DISK_HREF, disk.getHref()); } @Test public void testNicLinks() throws Exception { NIC nic = new NIC(); nic.setId(NIC_ID); nic.setVm(new VM()); nic.getVm().setId(VM_ID); LinkHelper.addLinks(setUpUriExpectations(), nic); assertEquals(NIC_HREF, nic.getHref()); } @Test public void testStorageLinks() throws Exception { Storage storage = new Storage(); storage.setId(STORAGE_ID); storage.setHost(new Host()); storage.getHost().setId(HOST_ID); LinkHelper.addLinks(setUpUriExpectations(), storage); assertEquals(STORAGE_HREF, storage.getHref()); assertEquals(HOST_HREF, storage.getHost().getHref()); } @Test public void testGroupLinks() throws Exception { Group group = new Group(); group.setId(GROUP_ID); LinkHelper.addLinks(setUpUriExpectations(), group); assertEquals(GROUP_HREF, group.getHref()); } @Test public void testStatisticLinks() throws Exception { Statistic statistic = new Statistic(); statistic.setId(STATISTIC_ID); statistic.setVm(new VM()); statistic.getVm().setId(VM_ID); LinkHelper.addLinks(setUpUriExpectations(), statistic); assertEquals(STATISTIC_HREF, statistic.getHref()); } @Test public void testCombine() throws Exception { assertEquals("/foo/bar", LinkHelper.combine("/foo", "bar")); assertEquals("/foo/bar", LinkHelper.combine("/foo/", "bar")); assertEquals("/foo/bar", LinkHelper.combine("/foo/", "/bar")); assertEquals("/foo/bar", LinkHelper.combine("/foo", "/bar")); } private UriInfo setUpUriExpectations() { UriInfo uriInfo = createMock(UriInfo.class); expect(uriInfo.getBaseUri()).andReturn(URI.create(URI_ROOT + BASE_PATH)).anyTimes(); replay(uriInfo); return uriInfo; } }