<!--
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>
