package com.cloud.gate.model; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Assert; import com.cloud.bridge.model.MHost; import com.cloud.bridge.model.MHostMount; import com.cloud.bridge.model.SBucket; import com.cloud.bridge.model.SHost; import com.cloud.bridge.model.SMeta; import com.cloud.bridge.model.SObject; import com.cloud.bridge.util.CloudSessionFactory; import com.cloud.bridge.util.QueryHelper; import com.cloud.gate.testcase.BaseTestCase; public class ModelTestCase extends BaseTestCase { protected final static Logger logger = Logger.getLogger(ModelTestCase.class); public void testSHost() { SHost host; // create the record Session session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = new SHost(); host.setHost("localhost"); host.setExportRoot("/"); host.setUserOnHost("root"); host.setUserPassword("password"); session.saveOrUpdate(host); txn.commit(); } finally { session.close(); } Assert.assertTrue(host.getId() != 0); // retrive the record session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = (SHost)session.get(SHost.class, (long)host.getId()); txn.commit(); Assert.assertTrue(host.getHost().equals("localhost")); Assert.assertTrue(host.getUserOnHost().equals("root")); Assert.assertTrue(host.getUserPassword().equals("password")); logger.info("Retrived record, host:" + host.getHost() + ", user: " + host.getUserOnHost() + ", password: " + host.getUserPassword()); } finally { session.close(); } // delete the record session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = (SHost)session.get(SHost.class, (long)host.getId()); session.delete(host); txn.commit(); } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = (SHost)session.get(SHost.class, (long)host.getId()); txn.commit(); Assert.assertTrue(host == null); } finally { session.close(); } } public void testSBucket() { SHost host; SBucket bucket; Session session; session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = new SHost(); host.setHost("localhost"); host.setUserOnHost("root"); host.setUserPassword("password"); host.setExportRoot("/"); bucket = new SBucket(); bucket.setName("Bucket"); bucket.setOwnerCanonicalId("OwnerId-dummy"); bucket.setCreateTime(new Date()); host.getBuckets().add(bucket); bucket.setShost(host); session.save(host); session.save(bucket); txn.commit(); } finally { session.close(); } long bucketId = bucket.getId(); // load bucket session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); bucket = (SBucket)session.get(SBucket.class, bucketId); txn.commit(); Assert.assertTrue(bucket.getShost().getHost().equals("localhost")); Assert.assertTrue(bucket.getName().equals("Bucket")); Assert.assertTrue(bucket.getOwnerCanonicalId().equals("OwnerId-dummy")); } finally { session.close(); } // delete the bucket session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); bucket = (SBucket)session.get(SBucket.class, bucketId); session.delete(bucket); host = (SHost)session.get(SHost.class, host.getId()); session.delete(host); txn.commit(); } finally { session.close(); } // verify the deletion session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); bucket = (SBucket)session.get(SBucket.class, bucketId); txn.commit(); Assert.assertTrue(bucket == null); } finally { session.close(); } } public void testSObject() { SHost host; SBucket bucket; Session session; SObject sobject; // setup session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); host = new SHost(); host.setHost("localhost"); host.setUserOnHost("root"); host.setUserPassword("password"); host.setExportRoot("/"); bucket = new SBucket(); bucket.setName("Bucket"); bucket.setOwnerCanonicalId("OwnerId-dummy"); bucket.setCreateTime(new Date()); bucket.setShost(host); host.getBuckets().add(bucket); sobject = new SObject(); sobject.setNameKey("ObjectNameKey"); sobject.setOwnerCanonicalId("OwnerId-dummy"); sobject.setCreateTime(new Date()); sobject.setBucket(bucket); bucket.getObjectsInBucket().add(sobject); session.save(host); session.save(bucket); session.save(sobject); txn.commit(); } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); sobject = (SObject)session.get(SObject.class, sobject.getId()); txn.commit(); Assert.assertTrue(sobject.getBucket().getName().equals("Bucket")); Assert.assertTrue(sobject.getNameKey().equals("ObjectNameKey")); Assert.assertTrue(sobject.getOwnerCanonicalId().equals("OwnerId-dummy")); } finally { session.close(); } // test delete cascade session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); bucket = (SBucket)session.get(SBucket.class, bucket.getId()); session.delete(bucket); host = (SHost)session.get(SHost.class, host.getId()); session.delete(host); txn.commit(); } finally { session.close(); } } public void testMeta() { Session session; session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); SMeta meta = new SMeta(); meta.setTarget("SObject"); meta.setTargetId(1); meta.setName("param1"); meta.setValue("value1"); session.save(meta); logger.info("Meta 1: " + meta.getId()); meta = new SMeta(); meta.setTarget("SObject"); meta.setTargetId(1); meta.setName("param2"); meta.setValue("value2"); session.save(meta); logger.info("Meta 2: " + meta.getId()); txn.commit(); } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); Query query = session.createQuery("from SMeta where target=? and targetId=?"); QueryHelper.bindParameters(query, new Object[] { "SObject", new Long(1) }); List<SMeta> l = QueryHelper.executeQuery(query); txn.commit(); for(SMeta meta: l) { logger.info("" + meta.getName() + "=" + meta.getValue()); } } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); Query query = session.createQuery("delete from SMeta where target=?"); QueryHelper.bindParameters(query, new Object[] {"SObject"}); query.executeUpdate(); txn.commit(); } finally { session.close(); } } public void testHosts() { Session session; SHost shost; MHost mhost; MHostMount hostMount; session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); shost = new SHost(); shost.setHost("Storage host1"); shost.setUserOnHost("root"); shost.setUserPassword("password"); shost.setExportRoot("/"); session.save(shost); mhost = new MHost(); mhost.setHostKey("1"); mhost.setHost("management host1"); mhost.setVersion("v1"); session.save(mhost); hostMount = new MHostMount(); hostMount.setMhost(mhost); hostMount.setShost(shost); hostMount.setMountPath("/mnt"); session.save(hostMount); txn.commit(); } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); mhost = (MHost)session.createQuery("from MHost where hostKey=?"). setLong(0, new Long(1)).uniqueResult(); if(mhost != null) { Iterator it = mhost.getMounts().iterator(); while(it.hasNext()) { MHostMount mount = (MHostMount)it.next(); Assert.assertTrue(mount.getMountPath().equals("/mnt")); logger.info(mount.getMountPath()); } } txn.commit(); } finally { session.close(); } session = CloudSessionFactory.getInstance().openSession(); try { Transaction txn = session.beginTransaction(); mhost = (MHost)session.createQuery("from MHost where hostKey=?"). setLong(0, new Long(1)).uniqueResult(); if(mhost != null) session.delete(mhost); shost = (SHost)session.createQuery("from SHost where host=?"). setString(0, "Storage host1").uniqueResult(); if(shost != null) session.delete(shost); txn.commit(); } finally { session.close(); } } }