<!--
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.
-->
<vmsynctest>

<!-- 1. Deploy two VMs, One HA enabled, One HA disabled -->
<!-- 1.1 Deploy HA enabled VM -->
<command>
		    <name>deployVirtualMachine</name>  <!--deploy vm 1-->
            <testcase>deploy HA enabled 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>HAenabledVM</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_en</param>
			</item>
			<item setparam="true">
				<name>name</name>
				<param>vmname_en</param>
			</item>
			<item setparam="true">
				<name>hostid</name>
				<param>hostid_en</param>
			</item>
		</returnvalue>
</command>

<!-- 1.2 Deploy the HA disabled VM -->
<command>
		    <name>deployVirtualMachine</name>  <!--deploy vm 1-->
            <testcase>deploy HA disabled 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>HAdisabledVM</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_db</param>
			</item>
			<item setparam="true">
				<name>name</name>
				<param>vmname_db</param>
			</item>
			<item setparam="true">
				<name>hostid</name>
				<param>hostid_db</param>
			</item>
		</returnvalue>
</command>

<!-- 2. Enable and disable HA on the VMs respectively -->
<!-- 2.1 Enable HA -->
<command>
		<name>updateVirtualMachine</name>
		<testcase>HA enable virtual machine</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_en</param>
			</item>
			<item>
				<name>displayname</name>
				<value>HAenabledVirtualMachine</value>
			</item>
			<item>
				<name>haenable</name>
				<value>true</value>
			</item>
		</parameters>
</command>

<!-- 2.2 Disable HA -->
<command>
		<name>updateVirtualMachine</name>
		<testcase>HA disable virtual machine</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_db</param>
			</item>
			<item>
				<name>displayname</name>
				<value>HAdisabledVirtualMachine</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_db</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_db</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_en</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_en</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_db</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
			    <name>instance_name</name>
				<param>instance_name_db</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_en</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
			    <name>instance_name</name>
				<param>instance_name_en</param>
			</item>
		</returnvalue>
	</command>	

<!-- 5. Kill the two VMs -->

<command>
	<name>killvm.sh</name>
	<testcase>Kill the HA enabled VM</testcase>
	<script>true</script>
	
	<parameters>
		<item getparam="true">
			<name>n</name>
			<param>instance_name_en</param>
		</item>
		
		<item getparam="true">
			<name>h</name>
			<param>ipaddress_en</param>
		</item>
	</parameters>
</command>


<command>
	<name>killvm.sh</name>
	<testcase>Kill the HA disabled VM</testcase>
	<script>true</script>
	
	<parameters>
		<item getparam="true">
			<name>n</name>
			<param>instance_name_db</param>
		</item>
		
		<item getparam="true">
			<name>h</name>
			<param>ipaddress_db</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>300</value>
			</item>
		</parameters>
	</command>	

<!--  Check that States of the vms at the database and at the agents - verify both api and backend  -->
<!-- 7. Check the Management Server Database for the states of the killed VMs -->

	<command>
		<name>listVirtualMachines</name>
		<testcase>List virtual machine with ha disabled</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_db</param>
			</item>
		</parameters>
		<returnvalue>
			<item>
				<name>state</name>
				<value>Stopped</value>
			</item>			
		</returnvalue>
	</command>		
	
	<command>
		<name>listVirtualMachines</name>
		<testcase>List virtual machine with ha enabled</testcase>
		<parameters>
			<item getparam="true">
			    <name>id</name>
				<param>vmid_en</param>
			</item>
		</parameters>
		<returnvalue>
			<item>
				<name>state</name>
				<value>Running</value>
			</item>
			<item setparam="true">			<!-- HA enabled VM may be restarted on any hosts -->
				<name>hostid</name>
				<param>hostid_en</param>
			</item>
		</returnvalue>
	</command>

<!-- 9. Find the host IP address of the ha enabled VM -->
<command>
		<name>listHosts</name>
		<testcase>List host with ha enabled machine</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>hostid_en</param>
			</item>
		</parameters>
		<returnvalue>
			<item setparam="true">
				<name>ipaddress</name>
				<param>ipaddress_en</param>
			</item>
		</returnvalue>
</command>

<!-- 10. Verify whether the HA enabled VM is actually running on the host -->
<command>
		<name>listvm.sh</name>
		<script>true</script>
		<testcase>List ha enabled machine</testcase>
		<parameters>
		<item getparam="true">
			    <name>h</name>
				<param>ipaddress_en</param>
			</item>
			<item getparam="true">
			    <name>n</name>
				<param>instance_name_en</param>
			</item>
		</parameters>
</command>

<!--  Cleanup section -->
<!-- 11. Destroy VMs-->
<command>
		<name>destroyVirtualMachine</name>
		<testcase>Destroy ha disabled vm as a part of cleanup</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_db</param>
			</item>
		</parameters>
</command>
	
<command>
		<name>destroyVirtualMachine</name>
		<testcase>Destroy ha enabled vm as a part of cleanup</testcase>
		<parameters>
			<item getparam="true">
				<name>id</name>
				<param>vmid_en</param>
			</item>
		</parameters>
</command>
</vmsynctest>
