<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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.
-->
<mgmtvmsync>
<!-- 1. Deploy two VMs -->
<!-- 1.1 Deploy HA enabled VM -->
<command>
		    <name>deployVirtualMachine</name>  <!--deploy vm 1-->
            <testcase>deploy First VM test case</testcase>
            
         <parameters>
			<item getparam="true">
			    <name>diskofferingid</name>
				<param>globaldiskofferingid</param>
			</item>	
			<item getparam="true">
			    <name>serviceofferingid</name>
				<param>globalserviceofferingid</param>
			</item>
			<item getparam="true">
			    <name>templateid</name>
				<param>globaltemplateid</param>
			</item>
			<item getparam="true">
			    <name>zoneid</name>
				<param>globalzoneid</param>
			</item>	
			<item>
				<name>displayname</name>
				<value>FirstVM</value>
			</item>
			<item>
				<name>account</name>
				<value>admin</value>
			</item>
			<item>
				<name>domainid</name>
				<value>1</value>
			</item>
			<item>
				<name>group</name>
				<value>group1</value>
			</item>
			<item getparam="true">
				<name>networkids</name>
				<param>globalnetworkid</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>id</name>
				<param>vmid_1st</param>
			</item>
			<item setparam="true">
				<name>name</name>
				<param>vmname_1st</param>
			</item>
			<item setparam="true">
				<name>hostid</name>
				<param>hostid_1st</param>
			</item>
		</returnvalue>
</command>

<command>
		    <name>deployVirtualMachine</name>  <!--deploy vm 1-->
            <testcase>deploy Second VM test case</testcase>
            
         <parameters>
			<item getparam="true">
			    <name>diskofferingid</name>
				<param>globaldiskofferingid</param>
			</item>	
			<item getparam="true">
			    <name>serviceofferingid</name>
				<param>globalserviceofferingid</param>
			</item>
			<item getparam="true">
			    <name>templateid</name>
				<param>globaltemplateid</param>
			</item>
			<item getparam="true">
			    <name>zoneid</name>
				<param>globalzoneid</param>
			</item>	
			<item>
				<name>displayname</name>
				<value>SecondVM</value>
			</item>
			<item>
				<name>account</name>
				<value>admin</value>
			</item>
			<item>
				<name>domainid</name>
				<value>1</value>
			</item>
			<item>
				<name>group</name>
				<value>group1</value>
			</item>
			<item getparam="true">
				<name>networkids</name>
				<param>globalnetworkid</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>id</name>
				<param>vmid_2nd</param>
			</item>
			<item setparam="true">
				<name>name</name>
				<param>vmname_2nd</param>
			</item>
			<item setparam="true">
				<name>hostid</name>
				<param>hostid_2nd</param>
			</item>
		</returnvalue>
</command>

<!-- 2. Disable HA on the two VMs respectively -->
<!-- 2.1 Disable HA for First VM -->
<command>
		<name>updateVirtualMachine</name>
		<testcase>HA disable first virtual machine</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_1st</param>
			</item>
			<item>
				<name>displayname</name>
				<value>HAdisabledFirstVirtualMachine</value>
			</item>
			<item>
				<name>haenable</name>
				<value>false</value>
			</item>
		</parameters>
</command>

<!-- 2.2 Disable HA for Second VM -->
<command>
		<name>updateVirtualMachine</name>
		<testcase>HA disable second virtual machine</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_2nd</param>
			</item>
			<item>
				<name>displayname</name>
				<value>HAdisabledSecondVirtualMachine</value>
			</item>
			<item>
				<name>haenable</name>
				<value>false</value>
			</item>			
		</parameters>
</command>

<!-- 3. Obtain the Host IP addresses for the Hosts accommodating the VMs -->
<!-- 3.1 Obtains the Host IP address of the HA enabled VM's Host machine -->
<command>
		<name>listHosts</name>
		<testcase>Obtain IP address of ha disabled VM's Host Test Case</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>hostid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_1st</param>
			</item>
		</returnvalue>
	</command>
	
<!-- 3.2 Obtains the Host IP address of the HA disabled VM's Host machine -->

<command>
		<name>listHosts</name>
		<testcase>Obtain IP address of ha enabled VM's Host Test Case</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>hostid_2nd</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_2nd</param>
			</item>
		</returnvalue>
</command>

<!-- 4. Get VM instance name of the VMs from the db -->
	<command>
		<name>select instance_name from vm_instance</name>
		<mysql>true</mysql>
		<testcase>Obtaining the internal instance name for the ha disabled VM Test Case</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
			    <name>instance_name</name>
				<param>instance_name_1st</param>
			</item>
		</returnvalue>
	</command>	
	
	<command>
		<name>select instance_name from vm_instance</name>
		<mysql>true</mysql>
		<testcase>Obtaining the internal instance name for the ha enabled VM Test Case</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_2nd</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
			    <name>instance_name</name>
				<param>instance_name_2nd</param>
			</item>
		</returnvalue>
	</command>

<!-- 5. Stop the Management Server -->

<command>
		<name>ms.sh</name>
		<script>true</script>
		<testcase>Stopping management server</testcase>
		<parameters>
			<item getparam="true">
			    <name>h</name>
				<param>ms1</param>
			</item>
			<item>
			    <name>o</name>
				<value>stop</value>
			</item>
		</parameters>
</command>

	

<!-- 6. Kill the two VMs -->

<command>
	<name>killvm.sh</name>
	<testcase>Kill the First HA disabled VM</testcase>
	<script>true</script>
	
	<parameters>
		<item getparam="true">
			<name>n</name>
			<param>instance_name_1st</param>
		</item>
		
		<item getparam="true">
			<name>h</name>
			<param>ipaddress_1st</param>
		</item>
	</parameters>
</command>

<command>
	<name>killvm.sh</name>
	<testcase>Kill the Second HA disabled VM</testcase>
	<script>true</script>
	
	<parameters>
		<item getparam="true">
			<name>n</name>
			<param>instance_name_2nd</param>
		</item>
		
		<item getparam="true">
			<name>h</name>
			<param>ipaddress_2nd</param>
		</item>
	</parameters>
</command>

<!-- 7. Wait for some time for the management server to respond -->
	<command>
		<name>sleep.sh</name>
		<script>true</script>
		<testcase>Sleep for some time</testcase>
		<parameters>
			<item>
			    <name>s</name>
				<value>100</value>
			</item>
		</parameters>
	</command>	


<!-- 8. Start the Management Server -->

<command>
		<name>ms.sh</name>
		<script>true</script>
		<testcase>Starting management server</testcase>
		<parameters>
			<item getparam="true">
			    <name>h</name>
				<param>ms1</param>
			</item>
			<item>
			    <name>o</name>
				<value>start</value>
			</item>
		</parameters>
</command>

<!--9. Wait for some time for the management server to respond -->
	<command>
		<name>sleep.sh</name>
		<script>true</script>
		<testcase>Sleep for some time</testcase>
		<parameters>
			<item>
			    <name>s</name>
				<value>100</value>
			</item>
		</parameters>
	</command>	

<!-- 10. Check the Management Server Database for the states of the killed VMs -->

	<command>
		<name>listVirtualMachines</name>
		<testcase>Check the stopped status of First virtual machine with ha disabled</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item>
				<name>state</name>
				<value>Stopped</value>
			</item>			
		</returnvalue>
	</command>		
	
	<command>
		<name>listVirtualMachines</name>
		<testcase>Check the stopped status of Second virtual machine with ha disabled</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_2nd</param>
			</item>
		</parameters>
		<returnvalue>
			<item>
				<name>state</name>
				<value>Stopped</value>
			</item>
			
		</returnvalue>
	</command>

<!-- Clean up -->
<!-- 11. Destroy VMs-->
<command>
		<name>destroyVirtualMachine</name>
		<testcase>Destroy the First vm as a part of cleanup</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_1st</param>
			</item>
		</parameters>
</command>
	
<command>
		<name>destroyVirtualMachine</name>
		<testcase>Destroy the Second vm as a part of cleanup</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_2nd</param>
			</item>
		</parameters>
</command>


<!-- SECOND SCENARIO -->
<!-- 1. Deploy VM -->
<command>
		    <name>deployVirtualMachine</name>  <!--deploy vm 1-->
            <testcase>deploy VM test case</testcase>
            
         <parameters>
			<item getparam="true">
			    <name>diskofferingid</name>
				<param>globaldiskofferingid</param>
			</item>	
			<item getparam="true">
			    <name>serviceofferingid</name>
				<param>globalserviceofferingid</param>
			</item>
			<item getparam="true">
			    <name>templateid</name>
				<param>globaltemplateid</param>
			</item>
			<item getparam="true">
			    <name>zoneid</name>
				<param>globalzoneid</param>
			</item>	
			<item>
				<name>displayname</name>
				<value>FirstVM</value>
			</item>
			<item>
				<name>account</name>
				<value>admin</value>
			</item>
			<item>
				<name>domainid</name>
				<value>1</value>
			</item>
			<item>
				<name>group</name>
				<value>group1</value>
			</item>
			<item getparam="true">
				<name>networkids</name>
				<param>globalnetworkid</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>id</name>
				<param>vmid_1st</param>
			</item>
			<item setparam="true">
				<name>name</name>
				<param>vmname_1st</param>
			</item>
			<item setparam="true">
				<name>hostid</name>
				<param>hostid_1st</param>
			</item>
		</returnvalue>
</command>

<!-- 2. Obtains the Host IP address of the HA enabled VM's Host machine -->
<command>
		<name>listHosts</name>
		<testcase>Obtain IP address of the VM's Host Test Case</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>hostid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_1st</param>
			</item>
		</returnvalue>
	</command>
	

<!-- 3. Get VM instance name of the VMs from the db -->
	<command>
		<name>select instance_name from vm_instance</name>
		<mysql>true</mysql>
		<testcase>Obtaining the internal instance name for the VM Test Case</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
			    <name>instance_name</name>
				<param>instance_name_1st</param>
			</item>
		</returnvalue>
</command>
	
<!-- 4. Stop the Management Server -->
<command>
		<name>ms.sh</name>
		<script>true</script>
		<testcase>Stopping management server</testcase>
		<parameters>
			<item getparam="true">
			    <name>h</name>
				<param>ms1</param>
			</item>
			<item>
			    <name>o</name>
				<value>stop</value>
			</item>
		</parameters>
</command>

<!-- 5. Kill the VM -->

<command>
	<name>shutdown.sh</name>
	<testcase>Shut down the VM Test Case</testcase>
	<script>true</script>
	
	<parameters>
		<item getparam="true">
			<name>n</name>
			<param>instance_name_1st</param>
		</item>
		
		<item getparam="true">
			<name>h</name>
			<param>ipaddress_1st</param>
		</item>
	</parameters>
</command>

<!-- 6. Wait for some time for the management server to respond -->
	<command>
		<name>sleep.sh</name>
		<script>true</script>
		<testcase>Sleep for some time</testcase>
		<parameters>
			<item>
			    <name>s</name>
				<value>60</value>
			</item>
		</parameters>
	</command>	


<!-- 7. Start the Management Server -->
<command>
		<name>ms.sh</name>
		<script>true</script>
		<testcase>Starting management server</testcase>
		<parameters>
			<item getparam="true">
			    <name>h</name>
				<param>ms1</param>
			</item>
			<item>
			    <name>o</name>
				<value>start</value>
			</item>
		</parameters>
</command>

<!-- 8. Wait for some time for the management server to respond -->
<command>
		<name>sleep.sh</name>
		<script>true</script>
		<testcase>Sleep for some time</testcase>
		<parameters>
			<item>
			    <name>s</name>
				<value>60</value>
			</item>
		</parameters>
</command>	

<!-- 9. Check the Management Server Database for the state of the killed VM -->

	<command>
		<name>listVirtualMachines</name>
		<testcase>Check the stopped status of virtual machine</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item>
				<name>state</name>
				<value>Stopped</value>
			</item>
		</returnvalue>
	</command>
	
	<command>
		<name>listHosts</name>
		<testcase>List host that is presumed to have the VM Test Case</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>hostid_1st</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_1st</param>
			</item>
		</returnvalue>
	</command>
	
	<command>
		<name>listvm.sh</name>
		<script>true</script>
		<testcase> VM Not Found on the host Test Case</testcase>
		<error>true</error>
		<parameters>
		<item getparam="true">
			    <name>h</name>
				<param>ipaddress_1st</param>
			</item>
			<item getparam="true">
			    <name>n</name>
				<param>instance_name_1st</param>
			</item>
		</parameters>
	</command>							

</mgmtvmsync>
