/*******************************************************************************
* Copyright (c) 2015 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.openshift.internal.restclient.model.v1;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.jboss.dmr.ModelNode;
import org.junit.Before;
import org.junit.Test;
import com.openshift.internal.restclient.model.properties.ResourcePropertiesRegistry;
import com.openshift.internal.restclient.model.volume.PersistentVolume;
import com.openshift.internal.restclient.model.volume.property.HostPathVolumeProperties;
import com.openshift.internal.restclient.model.volume.property.NfsVolumeProperties;
import com.openshift.restclient.IClient;
import com.openshift.restclient.ResourceKind;
import com.openshift.restclient.model.volume.IPersistentVolume;
import com.openshift.restclient.model.volume.property.IHostPathVolumeProperties;
import com.openshift.restclient.model.volume.property.INfsVolumeProperties;
import com.openshift.restclient.utils.MemoryUnit;
import com.openshift.restclient.utils.Samples;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public class PersistentVolumeTest {
private static final String VERSION = "v1";
private static final Samples sample = Samples.V1_PERSISTENT_VOLUME;
private IPersistentVolume pv;
private IClient client;
@Before
public void setUp() {
client = mock(IClient.class);
ModelNode node = ModelNode.fromJSONString(sample.getContentAsString());
pv = new PersistentVolume(node, client, ResourcePropertiesRegistry.getInstance().get(VERSION, ResourceKind.PERSISTENT_VOLUME));
}
@Test
public void testGetCapacityString() {
pv.setCapacity(13L, MemoryUnit.Pi);
long capacity = pv.getCapacity("Ki");
assertEquals(14293651161088L, capacity);
capacity = pv.getCapacity("Ti");
assertEquals(13312L, capacity);
capacity = pv.getCapacity("Pi");
assertEquals(13L, capacity);
}
@Test
public void testGetCapacity() {
pv.setCapacity(13L, MemoryUnit.Pi);
long capacity = pv.getCapacity();
assertEquals(14636698788954112L, capacity);
}
@Test
public void testSetCapacity() {
pv.setCapacity(1L, MemoryUnit.Ki);
long capacity = pv.getCapacity();
assertEquals(1024L, capacity);
pv.setCapacity(31L, MemoryUnit.Ti);
capacity = pv.getCapacity(MemoryUnit.Ti);
assertEquals(31L, capacity);
}
@Test(expected = ArithmeticException.class)
public void testSetCapacityOverflow() {
/*
* 2^4 * 2 ^60 = 2^64, LONG_MAX is only 2^64-1
*/
pv.setCapacity(16L, MemoryUnit.Ei);
pv.getCapacity();
}
@Test
public void testGetCapacityUnit() {
pv.setCapacity(1L, MemoryUnit.Ki);
MemoryUnit unit = pv.getCapacityUnit();
assertEquals(MemoryUnit.Ki, unit);
pv.setCapacity(1L, MemoryUnit.Pi);
unit = pv.getCapacityUnit();
assertEquals(MemoryUnit.Pi, unit);
}
@Test
public void testAccessModes() {
pv.setAccessModes("ReadWriteOnce");
Set<String> modes = pv.getAccessModes();
assertTrue(modes.contains("ReadWriteOnce"));
pv.setAccessModes("ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany");
modes = pv.getAccessModes();
Set<String> expected = new HashSet<>();
expected.addAll(Arrays.asList("ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany"));
assertTrue(modes.containsAll(expected));
}
@Test
public void testReclaimPolicy() {
pv.setReclaimPolicy("Recycle");
String policy = pv.getReclaimPolicy();
assertEquals(policy, "Recycle");
}
@Test
public void testGetPersistentVolumeProperties() {
pv.getPersistentVolumeProperties();
}
@Test
public void testNFSVolume() {
INfsVolumeProperties volume = new NfsVolumeProperties("10.10.10.10", "/tmp/dir", true);
pv.setPersistentVolumeProperties(volume);
volume = (INfsVolumeProperties) pv.getPersistentVolumeProperties();
assertEquals("/tmp/dir", volume.getPath());
assertEquals("10.10.10.10", volume.getServer());
assertEquals(true, volume.isReadOnly());
}
@Test
public void testHostPathVolume() {
IHostPathVolumeProperties volume = new HostPathVolumeProperties("/tmp/dir");
pv.setPersistentVolumeProperties(volume);
volume = (IHostPathVolumeProperties) pv.getPersistentVolumeProperties();
assertEquals("/tmp/dir", volume.getPath());
}
}