<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

	<clients>
		<client host="localhost" use_controller_vm="true"></client>
	</clients>

	<!-- Server side setup -->
	<servers>
		<server host="jabber.example.com" port="5225" type="tcp"></server>
	</servers>

	<load>
		<arrivalphase phase="1" duration="1" unit="minute">
			<users interarrival="0.01" unit="second"></users>
		</arrivalphase>

		<arrivalphase phase="2" duration="5" unit="minute">
			<users interarrival="0.1" unit="second"></users>
		</arrivalphase>

		<arrivalphase phase="3" duration="3" unit="minute">
			<users interarrival="1" unit="second"></users>
		</arrivalphase>
	</load>

	<!-- JABBER parameters -->
	<!-- to synchronise users,  use a global acknoledgement -->
	<options>
		<option type="ts_jabber" name="global_number" value="300"></option>
		<option type="ts_jabber" name="userid_max" value="500"></option>
		<option type="ts_jabber" name="domain" value="jabber.example.com"></option>
		<option type="ts_jabber" name="username" value="tsung"></option>
		<option type="ts_jabber" name="passwd" value="p4ssw0rd"></option>
	</options>

	<sessions>
		<!-- for each user we do the same -->
		<session probability="100" name="jabber-example" type="ts_jabber">

			<!-- connect and logon -->

			<request> <jabber type="connect" ack="no_ack"></jabber> </request>
			<thinktime value="2"></thinktime>

			<transaction name="authenticate">
				<!-- ack=global: wait for all other users to authenticate -->
				<request> <jabber type="auth_get" ack="global"></jabber> </request>
				<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
			</transaction>

			<request> <jabber type="presence:initial" ack="no_ack"/> </request>
			<thinktime value="2"></thinktime>

			<transaction name="roster">
				<request> <jabber type="iq:roster:get" ack="local"></jabber></request>
			</transaction>

			<thinktime value="5"></thinktime>

			<transaction name="online">
				<request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
			</transaction>

			<!-- add another user to the roster; delete him later -->

			<transaction name="rosteradd">
				<request> <jabber type="iq:roster:add" ack="no_ack" destination="online"></jabber> </request>
				<request> <jabber type="presence:subscribe" ack="no_ack"/> </request>
			</transaction>

			<thinktime value="1"></thinktime>

			<!-- write some message to other online and offline (this will cause some errors) users -->

			<transaction name="online">
				<request> <jabber type="chat" ack="no_ack" size="56" destination="online"></jabber> </request>
			</transaction>

			<thinktime value="4"></thinktime>

			<transaction name="online">
				<request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
			</transaction>

			<transaction name="rosterrename">
				<request> <jabber type="iq:roster:rename" ack="no_ack"></jabber> </request>
			</transaction>

			<thinktime value="3"></thinktime>

			<transaction name="offline">
				<request> <jabber type="chat" ack="no_ack" size="56" destination="offline"></jabber> </request>
			</transaction>

			<thinktime value="3"></thinktime>

			<transaction name="rosterdelete">
				<request> <jabber type="iq:roster:remove" ack="no_ack"></jabber> </request>
			</transaction>

			<!-- and disconnect -->

			<transaction name="close">
				<request> <jabber type="close" ack="no_ack"></jabber> </request>
			</transaction>

		</session>
	</sessions>
</tsung>
