/*
* Copyright (c) 2008-2011 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.isilon;
import com.emc.storageos.db.client.URIUtil;
import com.emc.storageos.db.client.model.*;
import com.emc.storageos.isilon.restapi.IsilonApiFactory;
//import com.emc.storageos.simulators.impl.Main;
import com.emc.storageos.services.util.EnvConfig;
import com.emc.storageos.volumecontroller.FileDeviceInputOutput;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Test class for IsilonFileStorageDevice
*/
public class IsilonSimulatorTest {
private IsilonFileStorageDevice _isi;
private StorageSystem _device;
private StoragePool _pool;
private String ip = EnvConfig.get("sanity", "isilon.ip");
private String userName = EnvConfig.get("sanity", "isilon.username");
private String password = EnvConfig.get("sanity", "isilon.password");
private String portNumber = EnvConfig.get("sanity", "isilon.port");
private String client1 = EnvConfig.get("sanity", "isilon.client1");
private String client2 = EnvConfig.get("sanity", "isilon.client2");
private static final Logger _log = LoggerFactory.getLogger(IsilonFileStorageDeviceTest.class);
@Before
public void setUp() throws Exception {
// start up simulator server
// Main.main(new String[]{ "/" + getClass().getResource("/simulator-config.xml").getPath() } );
_isi = new IsilonFileStorageDevice();
IsilonApiFactory factory = new IsilonApiFactory();
factory.init();
_isi.setIsilonApiFactory(factory);
// storage device object for tests to use
_device = new StorageSystem();
_device.setSystemType("isilon");
_device.setIpAddress(ip);
_device.setPortNumber(Integer.parseInt(portNumber));
_device.setUsername(userName);
_device.setPassword(password);
_pool = new StoragePool();
}
private void testFileShares() throws Exception {
FileShare fs = new FileShare();
fs.setId(URIUtil.createId(FileShare.class));
fs.setLabel("test");
fs.setCapacity(102400L);
FileDeviceInputOutput args = new FileDeviceInputOutput();
args.addStoragePool(_pool);
args.addFSFileObject(fs);
Assert.assertTrue("doCreateFS failed", _isi.doCreateFS(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
// export
List<String> clients = new ArrayList<String>();
clients.add(client1);
clients.add(client2);
FileExport export = new FileExport(clients, "", "sys", "root", "nobody", "nfs");
Assert.assertTrue("doExport failed", _isi.doExport(_device, args, Arrays.asList(export))
.getCommandStatus().equals(Operation.Status.ready.name()));
Assert.assertTrue("doExport failed, export not added to FS", fs.getFsExports().keySet().size() == 1);
// unexport
Assert.assertTrue("doUnexport failed", _isi.doUnexport(_device, args, Arrays.asList(export))
.getCommandStatus().equals(Operation.Status.ready.name()));
Assert.assertTrue("doUnexport failed, export not deleted from FS", fs.getFsExports().keySet().isEmpty());
// delete
Assert.assertTrue("doDeleteFs failed", _isi.doDeleteFS(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
}
private void testSnapshots() throws Exception {
// create FS to use
FileShare fs = new FileShare();
fs.setId(URIUtil.createId(FileShare.class));
fs.setLabel("test");
fs.setCapacity(102400L);
FileDeviceInputOutput args = new FileDeviceInputOutput();
args.addStoragePool(_pool);
args.addFSFileObject(fs);
Assert.assertTrue("doCreateFS failed", _isi.doCreateFS(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
// create
Snapshot snap = new Snapshot();
snap.setId(URIUtil.createId(Snapshot.class));
snap.setLabel("test_snap");
args.addSnapshotFileObject(snap);
Assert.assertTrue("doCreateFS failed", _isi.doSnapshotFS(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
// export
List<String> clients = new ArrayList<String>();
clients.add(client1);
clients.add(client2);
FileExport export = new FileExport(clients, "", "sys", "root", "nobody", "nfs");
Assert.assertTrue("doExport failed", _isi.doExport(_device, args, Arrays.asList(export))
.getCommandStatus().equals(Operation.Status.ready.name()));
Assert.assertTrue("doExport failed, export not added to snapshot", snap.getFsExports().keySet().size() == 1);
// unexport
Assert.assertTrue("doUnexport failed", _isi.doUnexport(_device, args, Arrays.asList(export))
.getCommandStatus().equals(Operation.Status.ready.name()));
Assert.assertTrue("doExport failed, export not deleted from snapshot", snap.getFsExports().keySet().isEmpty());
// delete
Assert.assertTrue("doDeleteSnapshot failed", _isi.doDeleteSnapshot(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
Assert.assertTrue("doDeleteFs failed", _isi.doDeleteFS(_device, args)
.getCommandStatus().equals(Operation.Status.ready.name()));
}
@Test
public void testAll() throws Exception {
testFileShares();
testSnapshots();
}
}