<?xml version="1.0"?>

<project name="portal-test-cluster" basedir="." default="test" xmlns:antelope="antlib:ise.antelope.tasks">
	<import file="build-test.xml" />

	<target name="prepare-cluster-apache-node-1">
		<if>
			<or>
				<not>
					<isset property="apache.http.win32.dir" />
				</not>
				<not>
					<isset property="apache.http.win32.install" />
				</not>
				<not>
					<isset property="apache.http.win32.modjk" />
				</not>
			</or>
			<then>
				<fail>
.

Please set "apache.http.win32.dir", "apache.http.win32.install", and
"apache.http.win32.modjk" in test.properties to point to an Apache installation
file.
				</fail>
			</then>
		</if>

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} ${apache.http.win32.dir}${apache.http.win32.install} ${vm.username}@${vm.cluster-node-1.host}:/" />
		</exec>

		<exec executable="${plink.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${vm.cluster-node-1.host} cmd.exe /c msiexec /i C:\${apache.http.win32.install} /quiet" />
		</exec>

		<property name="remote.host" value="${vm.cluster-node-1.host}" />
		<property name="remote.file" value="/Progra~1/Apache~1/Apache2.2/conf/httpd.conf" />

		<tstamp>
			<format property="tstamp.value" pattern="yyyyMMddkkmmssSSS" />
		</tstamp>

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${remote.host}:${remote.file} ${tstamp.value}" />
		</exec>

		<replace file="${tstamp.value}">
			<replacetoken><![CDATA[ServerAdmin ]]></replacetoken>
			<replacevalue><![CDATA[ServerAdmin admin@localhost]]></replacevalue>
		</replace>

		<echo file="${tstamp.value}" append="true">${line.separator}Include conf.d/*.conf</echo>

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} ${tstamp.value} ${vm.username}@${remote.host}:${remote.file}" />
		</exec>

		<delete file="${tstamp.value}" />

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} ${apache.http.win32.dir}${apache.http.win32.modjk} ${vm.username}@${vm.cluster-node-1.host}:/Progra~1/Apache~1/Apache2.2/modules" />
		</exec>

		<tstamp>
			<format property="tstamp.value" pattern="yyyyMMddkkmmssSSS" />
		</tstamp>

		<mkdir dir="${tstamp.value}/conf" />
		<mkdir dir="${tstamp.value}/conf.d" />

		<echo file="${tstamp.value}/conf/workers.properties">worker.list=node-1,node-2,loadbalancer

worker.node-1.port=8009
worker.node-1.host=${vm.cluster-node-1.host}
worker.node-1.type=ajp13
worker.node-1.connection_pool_size=10

worker.node-2.port=8009
worker.node-2.host=${vm.cluster-node-2.host}
worker.node-2.type=ajp13
worker.node-2.connection_pool_size=10

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node-1,node-2
worker.loadbalancer.sticky_session=1</echo>

		<echo file="${tstamp.value}/conf.d/mod_jk.conf">LoadModule jk_module modules/${apache.http.win32.modjk}

JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkLogLevel info
JkShmFile logs/jk-runtime-status</echo>

		<echo file="${tstamp.value}/conf.d/virtual_host.conf"><![CDATA[NameVirtualHost *:80

<VirtualHost *:80>
	JkMount /* loadbalancer
</VirtualHost>]]></echo>

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} -r ${tstamp.value}/conf ${vm.username}@${vm.cluster-node-1.host}:/Progra~1/Apache~1/Apache2.2" />
		</exec>

		<exec executable="${pscp.executable}">
			<arg line="-pw ${vm.password} -r ${tstamp.value}/conf.d ${vm.username}@${vm.cluster-node-1.host}:/Progra~1/Apache~1/Apache2.2" />
		</exec>

		<delete dir="${tstamp.value}" />

		<exec executable="${plink.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${vm.cluster-node-1.host} C:\Progra~1\Apache~1\Apache2.2\bin\httpd.exe -k install -n Apache2.2 -f C:\Progra~1\Apache~1\Apache2.2\conf\httpd.conf" />
		</exec>
	</target>

	<target name="prepare-cluster-tomcat">
		<antcall target="prepare-cluster-tomcat-node-1" />
		<antcall target="prepare-cluster-tomcat-node-2" />
	</target>

	<target name="prepare-cluster-tomcat-node-1">
		<ant antfile="build-test-tomcat.xml" target="prepare-cluster-tomcat-node">
			<property name="cluster-node.host" value="${vm.cluster-node-1.host}" />
			<property name="cluster-node.value" value="node-1" />
		</ant>
	</target>

	<target name="prepare-cluster-tomcat-node-2">
		<ant antfile="build-test-tomcat.xml" target="prepare-cluster-tomcat-node">
			<property name="cluster-node.host" value="${vm.cluster-node-2.host}" />
			<property name="cluster-node.value" value="node-2" />
		</ant>
	</target>

	<target name="prepare-cluster-vm-node">
		<echo>Copying ${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmdk.alpha-2010-02-02 to ${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmdk</echo>

		<exec executable="cmd">
			<arg line="/c copy /y ${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmdk.alpha-2010-02-02 ${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmdk" />
		</exec>

		<exec dir="${vm.drive}/${cluster-node.host}" executable="${vmware-cmd.executable}">
			<arg line="${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmx start" />
		</exec>

		<sleep seconds="30" />

		<antcall target="install-vm-java">
			<param name="vm.host" value="${cluster-node.host}" />
		</antcall>

		<echo>Restarting ${cluster-node.host}.</echo>

		<exec dir="${vm.drive}/${cluster-node.host}" executable="${vmware-cmd.executable}">
			<arg line="${vm.drive}\${cluster-node.host}\${cluster-node.host}.vmx reset" />
		</exec>

		<sleep seconds="60" />
	</target>

	<target name="prepare-cluster-vm-node-1">
		<antcall target="prepare-cluster-vm-node">
			<param name="cluster-node.host" value="${vm.cluster-node-1.host}" />
		</antcall>
	</target>

	<target name="prepare-cluster-vm-node-2">
		<antcall target="prepare-cluster-vm-node">
			<param name="cluster-node.host" value="${vm.cluster-node-2.host}" />
		</antcall>
	</target>

	<target name="prepare-cluster-vms">
		<antcall target="prepare-cluster-vm-node-1" />
		<antcall target="prepare-cluster-vm-node-2" />
	</target>

	<target name="run-cluster-tomcat">
		<antcall target="prepare-cluster-vms" />

		<ant antfile="build-test-tomcat.xml" target="prepare-zip-tomcat" />

		<antcall target="prepare-cluster-apache-node-1" />

		<antcall target="prepare-cluster-tomcat" />

		<antcall target="rebuild-database" inheritAll="false" />

		<exec executable="${plink.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${vm.cluster-node-1.host} cmd.exe /c net start Apache2.2" />
		</exec>

		<antcall target="startup-tomcat-cluster-node-1" />

		<sleep seconds="60" />

		<antcall target="startup-tomcat-cluster-node-2" />

		<sleep seconds="60" />

		<antcall target="revert-test-properties" />

		<replace
			file="portal-web/test/test-portal-web.properties"
			token="localhost:8080"
			value="${vm.cluster-node-1.host}"
		/>

		<echo file="portal-web/test/test-portal-web.properties" append="true">${line.separator}${line.separator}cluster.node1=${vm.cluster-node-1.host}${line.separator}cluster.node2=${vm.cluster-node-2.host}</echo>

		<antcall target="start-selenium" />

		<antcall target="run-selenium-test">
			<param name="test.class" value="${test.ant.script.suite.1}" />
		</antcall>

		<antcall target="stop-selenium" />

		<antcall target="shutdown-tomcat-cluster-node-2" />

		<sleep seconds="30" />

		<exec executable="${plink.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${vm.cluster-node-2.host} TASKKILL /f /im java.exe" />
		</exec>

		<antcall target="start-selenium" />

		<antcall target="run-selenium-test">
			<param name="test.class" value="${test.ant.script.suite.2}" />
		</antcall>

		<antcall target="stop-selenium" />

		<antcall target="startup-tomcat-cluster-node-2" />

		<antcall target="shutdown-tomcat-cluster-node-1" />

		<sleep seconds="30" />

		<exec executable="${plink.executable}">
			<arg line="-pw ${vm.password} ${vm.username}@${vm.cluster-node-1.host} TASKKILL /f /im java.exe" />
		</exec>

		<sleep seconds="30" />

		<antcall target="start-selenium" />

		<antcall target="run-selenium-test">
			<param name="test.class" value="${test.ant.script.suite.3}" />
		</antcall>

		<antcall target="stop-selenium" />

		<exec dir="${vm.drive}/${vm.cluster-node-1.host}" executable="${vmware-cmd.executable}">
			<arg line="${vm.drive}\${vm.cluster-node-1.host}\${vm.cluster-node-1.host}.vmx stop hard" />
		</exec>

		<exec dir="${vm.drive}/${vm.cluster-node-2.host}" executable="${vmware-cmd.executable}">
			<arg line="${vm.drive}\${vm.cluster-node-2.host}\${vm.cluster-node-2.host}.vmx stop hard" />
		</exec>
	</target>

	<target name="shutdown-tomcat-cluster-node-1">
		<echo file="execute-remote-command.bat">
			cd C:\liferay-portal-${lp.version}\tomcat-${app.server.tomcat.version}\bin

			shutdown.bat
		</echo>

		<antcall target="execute-remote-command">
			<param name="vm.host" value="${vm.cluster-node-1.host}" />
		</antcall>
	</target>

	<target name="shutdown-tomcat-cluster-node-2">
		<echo file="execute-remote-command.bat">
			cd C:\liferay-portal-${lp.version}\tomcat-${app.server.tomcat.version}\bin

			shutdown.bat
		</echo>

		<antcall target="execute-remote-command">
			<param name="vm.host" value="${vm.cluster-node-2.host}" />
		</antcall>
	</target>

	<target name="startup-tomcat-cluster-node-1">
		<echo file="execute-remote-command.bat">
			cd C:\liferay-portal-${lp.version}\tomcat-${app.server.tomcat.version}\bin

			startup.bat
		</echo>

		<antcall target="execute-remote-command">
			<param name="vm.host" value="${vm.cluster-node-1.host}" />
		</antcall>
	</target>

	<target name="startup-tomcat-cluster-node-2">
		<echo file="execute-remote-command.bat">
			cd C:\liferay-portal-${lp.version}\tomcat-${app.server.tomcat.version}\bin

			startup.bat
		</echo>

		<antcall target="execute-remote-command">
			<param name="vm.host" value="${vm.cluster-node-2.host}" />
		</antcall>
	</target>
</project>