Updated Branches: refs/heads/vmsync ba9a9480b -> a8a09ba28
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/async/TestAsyncJobManager.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/async/TestAsyncJobManager.java b/server/test/com/cloud/async/TestAsyncJobManager.java index 3a58cc7..1b78557 100644 --- a/server/test/com/cloud/async/TestAsyncJobManager.java +++ b/server/test/com/cloud/async/TestAsyncJobManager.java @@ -16,13 +16,18 @@ // under the License. package com.cloud.async; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; + import javax.inject.Inject; import junit.framework.TestCase; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.PublishScope; -import org.apache.cloudstack.messagebus.SubjectConstants; +import org.apache.cloudstack.messagebus.TopicConstants; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,8 +35,10 @@ import org.mockito.Mockito; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import com.cloud.async.AsyncJobJournalVO; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobMonitor; +import com.cloud.async.dao.AsyncJobJournalDao; import com.cloud.cluster.ClusterManager; import com.cloud.utils.Predicate; import com.cloud.utils.component.ComponentContext; @@ -45,19 +52,63 @@ public class TestAsyncJobManager extends TestCase { @Inject ClusterManager clusterMgr; @Inject MessageBus messageBus; @Inject AsyncJobMonitor jobMonitor; + @Inject AsyncJobJournalDao journalDao; @Before public void setUp() { ComponentContext.initComponentsLifeCycle(); Mockito.when(clusterMgr.getManagementNodeId()).thenReturn(1L); - Transaction.open("dummy"); + Transaction.open("dummy"); + + // drop constraint check in order to do single table test + Statement stat = null; + try { + stat = Transaction.currentTxn().getConnection().createStatement(); + stat.execute("SET foreign_key_checks = 0;"); + } catch (SQLException e) { + } finally { + if(stat != null) { + try { + stat.close(); + } catch (SQLException e) { + } + } + } } @After public void tearDown() { Transaction.currentTxn().close(); - } + } + + @Test + public void testJobJournal() { + AsyncJobJournalVO journal = new AsyncJobJournalVO(); + journal.setJobId(1L); + journal.setJournalType(AsyncJob.JournalType.SUCCESS); + journal.setJournalText("Journal record 1"); + + journalDao.persist(journal); + + AsyncJobJournalVO journal2 = new AsyncJobJournalVO(); + journal2.setJobId(1L); + journal2.setJournalType(AsyncJob.JournalType.SUCCESS); + journal2.setJournalText("Journal record 2"); + + journalDao.persist(journal2); + + List<AsyncJobJournalVO> l = journalDao.getJobJournal(1L); + Assert.assertTrue(l.size() == 2); + journal = l.get(0); + Assert.assertTrue(journal.getJournalText().equals("Journal record 1")); + + journal2 = l.get(1); + Assert.assertTrue(journal2.getJournalText().equals("Journal record 2")); + + journalDao.expunge(journal.getId()); + journalDao.expunge(journal2.getId()); + } @Test public void testWaitAndCheck() { @@ -81,7 +132,7 @@ public class TestAsyncJobManager extends TestCase { asyncMgr.waitAndCheck(new String[] {"VM"}, 5000L, 10000L, new Predicate() { public boolean checkCondition() { System.out.println("Check condition to exit"); - messageBus.publish(null, SubjectConstants.JOB_HEARTBEAT, PublishScope.LOCAL, 1L); + messageBus.publish(null, TopicConstants.JOB_HEARTBEAT, PublishScope.LOCAL, 1L); return false; } }); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/vm/MockUserVmManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index dd8dd83..6e388c4 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -422,4 +422,12 @@ public class MockUserVmManagerImpl extends ManagerBase implements UserVmManager, // TODO Auto-generated method stub return null; } + + @Override + public void vmWorkStart(VmWork work) { + } + + @Override + public void vmWorkStop(VmWork work) { + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/vm/VirtualMachineManagerImplTest.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vm/VirtualMachineManagerImplTest.java b/server/test/com/cloud/vm/VirtualMachineManagerImplTest.java index 4f882d0..8e97788 100644 --- a/server/test/com/cloud/vm/VirtualMachineManagerImplTest.java +++ b/server/test/com/cloud/vm/VirtualMachineManagerImplTest.java @@ -116,7 +116,9 @@ public class VirtualMachineManagerImplTest { _vmMgr._capacityMgr = _capacityMgr; _vmMgr._hostDao = _hostDao; _vmMgr._nodeId = 1L; +/* _vmMgr._workDao = _workDao; +*/ _vmMgr._agentMgr = _agentMgr; when(_vmMock.getId()).thenReturn(314l); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java b/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java index 4216aff..5cef9c2 100644 --- a/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java +++ b/server/test/com/cloud/vm/VmWorkMockVirtualMachineManagerImpl.java @@ -30,6 +30,8 @@ import org.apache.cloudstack.framework.messagebus.PublishScope; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; +import com.cloud.async.AsyncJob.JournalType; +import com.cloud.async.AsyncJobExecutionContext; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.exception.AgentUnavailableException; @@ -190,6 +192,11 @@ public class VmWorkMockVirtualMachineManagerImpl implements VirtualMachineManage // TODO Auto-generated method stub return null; } + + public <T extends VMInstanceVO> VirtualMachineGuru<T> getVmGuru(T vm) { + // TODO Auto-generated method stub + return null; + } @Override public boolean stateTransitTo(VMInstanceVO vm, Event e, Long hostId) @@ -383,8 +390,10 @@ public class VmWorkMockVirtualMachineManagerImpl implements VirtualMachineManage return null; } - public Void doVmWorkStart(VmWork work) { - _msgBus.publish(null, "Done", PublishScope.GLOBAL, null); - return null; - } + @Override + public <T extends VMInstanceVO> T processVmStartWork(T vm, Map<VirtualMachineProfile.Param, Object> params, User caller, Account account, DeploymentPlan planToDeploy) + throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { + + return vm; + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/vm/VmWorkTest.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vm/VmWorkTest.java b/server/test/com/cloud/vm/VmWorkTest.java index 2c76fe6..75ba612 100644 --- a/server/test/com/cloud/vm/VmWorkTest.java +++ b/server/test/com/cloud/vm/VmWorkTest.java @@ -40,6 +40,9 @@ import com.cloud.cluster.ClusterManager; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeploymentPlan; import com.cloud.deploy.DeploymentPlanner.ExcludeList; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientStorageCapacityException; +import com.cloud.serializer.SerializerHelper; import com.cloud.utils.LogUtils; import com.cloud.utils.Predicate; import com.cloud.utils.component.ComponentContext; @@ -137,4 +140,16 @@ public class VmWorkTest extends TestCase { } }); } + + @Test + public void testExceptionSerialization() { + InsufficientCapacityException exception = new InsufficientStorageCapacityException("foo", VmWorkJobVO.class, 1L); + + String encodedString = SerializerHelper.toObjectSerializedString(exception); + System.out.println(encodedString); + + exception = (InsufficientCapacityException)SerializerHelper.fromObjectSerializedString(encodedString); + Assert.assertTrue(exception.getScope() == VmWorkJobVO.class); + Assert.assertTrue(exception.getMessage().equals("foo")); + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/server/test/com/cloud/vm/VmWorkTestConfiguration.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vm/VmWorkTestConfiguration.java b/server/test/com/cloud/vm/VmWorkTestConfiguration.java index f56e7be..2496dbe 100644 --- a/server/test/com/cloud/vm/VmWorkTestConfiguration.java +++ b/server/test/com/cloud/vm/VmWorkTestConfiguration.java @@ -25,6 +25,8 @@ import com.cloud.async.SyncQueueManager; import com.cloud.async.SyncQueueManagerImpl; import com.cloud.async.dao.AsyncJobDao; import com.cloud.async.dao.AsyncJobDaoImpl; +import com.cloud.async.dao.AsyncJobJournalDao; +import com.cloud.async.dao.AsyncJobJournalDaoImpl; import com.cloud.async.dao.SyncQueueDao; import com.cloud.async.dao.SyncQueueDaoImpl; import com.cloud.async.dao.SyncQueueItemDao; @@ -103,4 +105,9 @@ public class VmWorkTestConfiguration { public VmWorkJobDao vmworkJobDao() { return new VmWorkJobDaoImpl(); } + + @Bean + public AsyncJobJournalDao jobJournalDao() { + return new AsyncJobJournalDaoImpl(); + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a8a09ba2/setup/db/db/schema-410to420.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql index b0daaf5..c615c4f 100644 --- a/setup/db/db/schema-410to420.sql +++ b/setup/db/db/schema-410to420.sql @@ -411,7 +411,6 @@ ALTER TABLE `cloud`.`async_job` DROP COLUMN `job_cmd_originator`; ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_type`; ALTER TABLE `cloud`.`async_job` DROP COLUMN `callback_address`; -ALTER TABLE `cloud`.`async_job` ADD COLUMN `parent_id` bigint; ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_type` VARCHAR(32); ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_dispatcher` VARCHAR(64); ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_executing_msid` bigint; @@ -433,3 +432,13 @@ CREATE TABLE `cloud`.`vm_work_job` ( INDEX `i_vm_work_job__step`(`step`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `cloud`.`async_job_journal` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `job_id` bigint unsigned NOT NULL, + `journal_type` varchar(32), + `journal_text` varchar(1024) COMMENT 'journal descriptive informaton', + `journal_obj` varchar(1024) COMMENT 'journal strutural information, JSON encoded object', + `created` datetime NOT NULL COMMENT 'date created', + PRIMARY KEY (`id`), + CONSTRAINT `fk_async_job_journal__job_id` FOREIGN KEY (`job_id`) REFERENCES `async_job`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
