
assert_spec linux
assert_spec x86_64

exec rm -rf var/libcache/cbe
exec rm -rf var/libcache/cbe_cxx
exec rm -rf var/libcache/cbe_common
exec rm -rf var/libcache/cbe_common_cxx
exec rm -rf var/libcache/cbe_init
exec rm -rf var/libcache/cbe_init_cxx
exec rm -rf var/libcache/cbe_check
exec rm -rf var/libcache/cbe_check_cxx
exec rm -rf var/libcache/cbe_dump
exec rm -rf var/libcache/cbe_dump_cxx

set dd [installed_command dd]

proc cbe_image_name { } {
	return "cbe_block.img"
}

proc local_cbe_image { } {
	return bin/[cbe_image_name]
}

proc autopilot_cbe_image { } {
	return /tmp/[cbe_image_name].[exec id -un]
}

set image_size 1024
if {[info exists ::env(CBE_IMAGE_SIZE)]} {
	set image_size $::env(CBE_IMAGE_SIZE)
}

proc cbe_image_size_mb { } {
	global image_size
	return $image_size
}

proc cbe_vbd_size_mb { } {
	return [expr [cbe_image_size_mb] / 2]
}

proc cbe_ft_size_mb { } {
	return [expr [cbe_image_size_mb] / 8]
}

append build_components {
	core
	init
	timer
	server/vfs
	app/cbe_tester
	server/log_terminal
	server/report_rom
	server/lx_fs
	server/lx_block
	lib/vfs/cbe_crypto/aes_cbc
	lib/vfs/cbe_trust_anchor
	lib/vfs/import
}

build $build_components

create_boot_directory

append config {
<config verbose="yes">
	<parent-provides>
		<service name="ROM"/>
		<service name="RAM"/>
		<service name="IRQ"/>
		<service name="IO_MEM"/>
		<service name="IO_PORT"/>
		<service name="PD"/>
		<service name="RM"/>
		<service name="CPU"/>
		<service name="LOG"/>
	</parent-provides>

	<default-route>
		<any-service> <parent/> <any-child/> </any-service>
	</default-route>

	<default caps="100"/>
	<start name="timer">
		<resource name="RAM" quantum="1M"/>
		<provides><service name="Timer"/></provides>
	</start>

	<start name="report_rom">
		<resource name="RAM" quantum="32M"/>
		<provides> <service name="Report"/> <service name="ROM"/> </provides>
		<config verbose="yes"/>
	</start>

	<start name="log_terminal">
		<resource name="RAM" quantum="1M"/>
		<provides><service name="Terminal"/></provides>
	</start>

	<start name="lx_fs" ld="no">
		<resource name="RAM" quantum="4M"/>
		<provides> <service name="File_system"/> </provides>
		<config>
			<default-policy root="/" writeable="yes"/>
		</config>
	</start>

	<start name="lx_block" ld="no">
		<resource name="RAM" quantum="2M"/>
		<provides> <service name="Block"/> </provides>
		<config file="} [cbe_image_name] {" block_size="4K" writeable="yes"/>
	</start>

	<start name="vfs_trust_anchor" caps="120">
		<binary name="vfs"/>
		<resource name="RAM" quantum="16M"/>
		<provides><service name="File_system"/></provides>
		<config>
			<vfs>
				<dir name="storage">
					<ram/>
				</dir>

				<dir name="dev">
					<cbe_trust_anchor name="cbe_trust_anchor"
					                  storage_dir="/storage"/>
				</dir>
			</vfs>

			<default-policy root="/dev/cbe_trust_anchor" writeable="yes"/>
		</config>
		<route>
			<service name="File_system"> <child name="lx_fs"/> </service>
			<any-service> <parent/> </any-service>
		</route>
	</start>

	<start name="test" caps="200">

		<binary name="cbe_tester"/>
		<resource name="RAM" quantum="80M"/>
		<config>

			<verbose
				cmd_pool_cmd_pending="no"
				cmd_pool_cmd_in_progress="no"
				cmd_pool_cmd_completed="no"
				blk_io_req_in_progress="no"
				blk_io_req_completed="no"
				ta_req_in_progress="no"
				ta_req_completed="no"
				crypto_req_completed="no"
				crypto_req_in_progress="no"
				client_data_mismatch="yes"
				client_data_transferred="no"/>

			<block-io type="vfs" path="/} [cbe_image_name] {"/>
			<crypto path="/crypto"/>
			<trust-anchor path="/trust_anchor"/>

			<vfs>
				<fs buffer_size="1M"/>
				<cbe_crypto_aes_cbc name="crypto"/>
				<dir name="trust_anchor">
					<fs label="trust_anchor"/>
				</dir>
			</vfs>

			<commands>

				<log string="Step 1: Initialize Trust Anchor and CBE device, start CBE library"/>

				<trust-anchor op="initialize" passphrase="foobar"/>
				<initialize>

					<virtual-block-device
						nr_of_levels="3"
						nr_of_children="8"
						nr_of_leafs="64" />

					<free-tree
						nr_of_levels="3"
						nr_of_children="8"
						nr_of_leafs="64" />

				</initialize>
				<check/>
				<construct/>

				<log string="Step 2: test synchronous write, read"/>

				<request op="write" vba="1"   count="1"   sync="yes"/>
				<request op="read"  vba="1"   count="1"   sync="yes"/>
				<request op="write" vba="12"  count="10"  sync="yes"/>
				<request op="read"  vba="12"  count="10"  sync="yes"/>
				<request op="write" vba="24"  count="40" sync="yes"/>
				<request op="read"  vba="24"  count="40" sync="yes"/>

				<log string="Step 3: test synchronous write, read, compare"/>

				<request op="write" vba="9"  count="1"  sync="yes" salt="4321"/>
				<request op="read"  vba="9"  count="1"  sync="yes" salt="4321"/>
				<request op="write" vba="41" count="19" sync="yes" salt="8765"/>
				<request op="read"  vba="41" count="19" sync="yes" salt="8765"/>
				<request op="write" vba="9"  count="1"  sync="yes" salt="1234"/>
				<request op="write" vba="41" count="19" sync="yes" salt="5678"/>
				<request op="read"  vba="9"  count="1"  sync="yes" salt="1234"/>
				<request op="read"  vba="41" count="19" sync="yes" salt="5678"/>

				<log string="Step 4: test asynchronous write, read"/>

				<request op="write" vba="20" count="3"  sync="no"/>
				<request op="write" vba="15" count="10" sync="no"/>
				<request op="read"  vba="34" count="2"  sync="no"/>
				<request op="read"  vba="21" count="5"  sync="no"/>
				<request op="write" vba="12" count="12" sync="no"/>
				<request op="read"  vba="32" count="8"  sync="no"/>
				<request op="write" vba="17" count="7"  sync="no"/>
				<request op="write" vba="29" count="9"  sync="no"/>
				<request op="read"  vba="14" count="18" sync="no"/>

				<log string="Step 5: test asynchronous write, read, compare"/>

				<request op="write" vba="20" count="3"  sync="no" salt="7373"/>
				<request op="read"  vba="21" count="1"  sync="no" salt="7373"/>
				<request op="write" vba="15" count="10" sync="no" salt="1515"/>
				<request op="write" vba="15" count="4"  sync="no" salt="6001"/>
				<request op="read"  vba="21" count="3"  sync="no" salt="1515"/>
				<request op="read"  vba="19" count="3"  sync="no" salt="1515"/>
				<request op="write" vba="17" count="5"  sync="no" salt="9689"/>
				<request op="read"  vba="22" count="3"  sync="no" salt="1515"/>
				<request op="read"  vba="15" count="2"  sync="no" salt="6001"/>
				<request op="write" vba="11" count="6"  sync="no" salt="0987"/>
				<request op="read"  vba="17" count="5"  sync="no" salt="9689"/>
				<request op="write" vba="22" count="2"  sync="no" salt="6543"/>
				<request op="write" vba="25" count="11" sync="no" salt="5432"/>
				<request op="read"  vba="24" count="1"  sync="no" salt="1515"/>
				<request op="write" vba="10" count="5"  sync="no" salt="4221"/>
				<request op="write" vba="21" count="2"  sync="no" salt="1001"/>
				<request op="write" vba="12" count="10" sync="no" salt="3366"/>
				<request op="write" vba="26" count="4"  sync="no" salt="7271"/>
				<request op="write" vba="15" count="7"  sync="no" salt="1331"/>
				<request op="read"  vba="23" count="1"  sync="no" salt="6543"/>
				<request op="read"  vba="25" count="1"  sync="no" salt="5432"/>
				<request op="read"  vba="28" count="2"  sync="no" salt="7271"/>
				<request op="read"  vba="24" count="1"  sync="no" salt="1515"/>
				<request op="read"  vba="12" count="3"  sync="no" salt="3366"/>
				<request op="read"  vba="19" count="3"  sync="no" salt="1331"/>
				<request op="read"  vba="10" count="2"  sync="no" salt="4221"/>

				<log string="Step 6: shut down CBE library, check CBE integrity, restart CBE library"/>

				<request op="deinitialize" sync="no"/>
				<destruct/>
				<check/>
				<construct/>

				<log string="Step 7: test synchronous snapshot creation"/>

				<request op="write" vba="20" count="3"   sync="yes" salt="7304"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="read"  vba="21" count="1"   sync="yes" salt="7304"/>
				<request op="write" vba="15" count="10"  sync="yes" salt="9612"/>
				<request op="write" vba="15" count="4"   sync="yes" salt="6111"/>
				<request op="read"  vba="21" count="3"   sync="yes" salt="9612"/>
				<request op="read"  vba="19" count="3"   sync="yes" salt="9612"/>
				<request op="write" vba="17" count="5"   sync="yes" salt="5353"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="read"  vba="22" count="3"   sync="yes" salt="9612"/>
				<request op="read"  vba="15" count="2"   sync="yes" salt="6111"/>
				<request op="write" vba="11" count="6"   sync="yes" salt="5436"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 8: test asynchronous snapshot creation"/>

				<request op="write" vba="20" count="3"   sync="no" salt="7384"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="read"  vba="21" count="1"   sync="no" salt="7384"/>
				<request op="write" vba="15" count="10"  sync="no" salt="9602"/>
				<request op="write" vba="15" count="4"   sync="no" salt="6100"/>
				<request op="read"  vba="21" count="3"   sync="no" salt="9602"/>
				<request op="read"  vba="19" count="3"   sync="no" salt="9602"/>
				<request op="write" vba="17" count="5"   sync="no" salt="5555"/>
				<request op="read"  vba="22" count="3"   sync="no" salt="9602"/>
				<request op="read"  vba="15" count="2"   sync="no" salt="6100"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="write" vba="11" count="6"   sync="no" salt="1436"/>
				<request op="read"  vba="17" count="5"   sync="no" salt="5555"/>
				<request op="write" vba="22" count="2"   sync="no" salt="7463"/>
				<request op="write" vba="25" count="11"  sync="no" salt="4323"/>
				<request op="read"  vba="24" count="1"   sync="no" salt="9602"/>
				<request op="write" vba="10" count="5"   sync="no" salt="3758"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="write" vba="21" count="2"   sync="no" salt="8094"/>
				<request op="write" vba="12" count="10"  sync="no" salt="4455"/>
				<request op="write" vba="26" count="4"   sync="no" salt="7574"/>
				<request op="write" vba="15" count="7"   sync="no" salt="1931"/>
				<request op="read"  vba="23" count="1"   sync="no" salt="7463"/>
				<request op="read"  vba="25" count="1"   sync="no" salt="4323"/>
				<request op="read"  vba="28" count="2"   sync="no" salt="7574"/>
				<request op="create_snapshot"            sync="no"/>
				<request op="read"  vba="24" count="1"   sync="no" salt="9602"/>
				<request op="read"  vba="12" count="3"   sync="no" salt="4455"/>
				<request op="read"  vba="19" count="3"   sync="no" salt="1931"/>
				<request op="read"  vba="10" count="2"   sync="no" salt="3758"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 9: reinitialize CBE device"/>

				<request op="deinitialize" sync="no"/>
				<destruct/>
				<initialize>

					<virtual-block-device
						nr_of_levels="3"
						nr_of_children="8"
						nr_of_leafs="64" />

					<free-tree
						nr_of_levels="3"
						nr_of_children="8"
						nr_of_leafs="64" />

				</initialize>
				<construct/>

				<log string="Step 10: test synchronous rekeying"/>

				<request op="write" vba="0"  count="1"   sync="yes" salt="4359"/>
				<request op="rekey"                      sync="yes"/>
				<request op="read"  vba="0"  count="1"   sync="yes" salt="4359"/>
				<request op="write" vba="15" count="7"   sync="yes" salt="1742"/>
				<request op="write" vba="20" count="13"  sync="yes" salt="8471"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="write" vba="33" count="5"   sync="yes" salt="7831"/>
				<request op="rekey"                      sync="yes"/>
				<request op="read"  vba="17" count="3"   sync="yes" salt="1742"/>
				<request op="write" vba="51" count="8"   sync="yes" salt="8384"/>
				<request op="read"  vba="25" count="1"   sync="yes" salt="8471"/>
				<request op="write" vba="30" count="5"   sync="yes" salt="2837"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="rekey"                      sync="yes"/>
				<request op="read"  vba="35" count="2"   sync="yes" salt="7831"/>
				<request op="read"  vba="31" count="4"   sync="yes" salt="2837"/>
				<request op="read"  vba="51" count="8"   sync="yes" salt="8384"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 11: test asynchronous rekeying (SKIPPED BECAUSE OF KNOWN BUG)"/>

<!-- FIXME: this step would yet trigger a hash mismatch in the
            VBD rekeying module

				<request op="write" vba="20" count="3"   sync="no" salt="7384"/>
				<request op="rekey"                      sync="no"/>
				<request op="read"  vba="21" count="1"   sync="no" salt="7384"/>
				<request op="write" vba="15" count="10"  sync="no" salt="9602"/>
				<request op="write" vba="15" count="4"   sync="no" salt="6100"/>
				<request op="read"  vba="21" count="3"   sync="no" salt="9602"/>
				<request op="read"  vba="19" count="3"   sync="no" salt="9602"/>
				<request op="write" vba="17" count="5"   sync="no" salt="5555"/>
				<request op="read"  vba="22" count="3"   sync="no" salt="9602"/>
				<request op="read"  vba="15" count="2"   sync="no" salt="6100"/>
				<request op="write" vba="11" count="6"   sync="no" salt="1436"/>
				<request op="create_snapshot"            sync="yes"/>
				<request op="read"  vba="17" count="5"   sync="no" salt="5555"/>
				<request op="write" vba="22" count="2"   sync="no" salt="7463"/>
				<request op="rekey"                      sync="no"/>
				<request op="write" vba="25" count="11"  sync="no" salt="4323"/>
				<request op="read"  vba="24" count="1"   sync="no" salt="9602"/>
				<request op="write" vba="10" count="5"   sync="no" salt="3758"/>
				<request op="write" vba="21" count="2"   sync="no" salt="8094"/>
				<request op="write" vba="12" count="10"  sync="no" salt="4455"/>
				<request op="write" vba="26" count="4"   sync="no" salt="7574"/>
				<request op="write" vba="15" count="7"   sync="no" salt="1931"/>
				<request op="read"  vba="23" count="1"   sync="no" salt="7463"/>
				<request op="read"  vba="25" count="1"   sync="no" salt="4323"/>
				<request op="read"  vba="28" count="2"   sync="no" salt="7574"/>
				<request op="read"  vba="24" count="1"   sync="no" salt="9602"/>
				<request op="read"  vba="12" count="3"   sync="no" salt="4455"/>
				<request op="read"  vba="19" count="3"   sync="no" salt="1931"/>
				<request op="read"  vba="10" count="2"   sync="no" salt="3758"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>
-->

				<log string="Step 12: test synchronous free tree extension"/>

				<request op="write" vba="20" count="3"   sync="yes" salt="7304"/>
				<request op="extend_ft"      count="23"  sync="yes"/>
				<request op="read"  vba="21" count="1"   sync="yes" salt="7304"/>
				<request op="extend_ft"      count="6"   sync="yes"/>
				<request op="write" vba="15" count="10"  sync="yes" salt="9612"/>
				<request op="write" vba="15" count="4"   sync="yes" salt="6111"/>
				<request op="extend_ft"      count="10"  sync="yes"/>
				<request op="read"  vba="21" count="3"   sync="yes" salt="9612"/>
				<request op="read"  vba="19" count="3"   sync="yes" salt="9612"/>
				<request op="write" vba="17" count="5"   sync="yes" salt="5353"/>
				<request op="extend_ft"      count="2"   sync="yes"/>
				<request op="extend_ft"      count="2"   sync="yes"/>
				<request op="extend_ft"      count="2"   sync="yes"/>
				<request op="read"  vba="22" count="3"   sync="yes" salt="9612"/>
				<request op="extend_ft"      count="1"   sync="yes"/>
				<request op="read"  vba="15" count="2"   sync="yes" salt="6111"/>
				<request op="write" vba="11" count="6"   sync="yes" salt="5436"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 13: test asynchronous free tree extension"/>

				<request op="write" vba="20" count="3"   sync="no"  salt="3874"/>
				<request op="extend_ft"      count="21"  sync="no"/>
				<request op="extend_ft"      count="17"  sync="no"/>
				<request op="read"  vba="21" count="1"   sync="no"  salt="3874"/>
				<request op="write" vba="15" count="10"  sync="no"  salt="6092"/>
				<request op="write" vba="15" count="4"   sync="no"  salt="1060"/>
				<request op="read"  vba="21" count="3"   sync="no"  salt="6092"/>
				<request op="read"  vba="19" count="3"   sync="no"  salt="6092"/>
				<request op="write" vba="17" count="5"   sync="no"  salt="5555"/>
				<request op="read"  vba="22" count="3"   sync="no"  salt="6092"/>
				<request op="read"  vba="15" count="2"   sync="no"  salt="1060"/>
				<request op="extend_ft"      count="180" sync="no"/>
				<request op="write" vba="11" count="6"   sync="no"  salt="4316"/>
				<request op="read"  vba="17" count="5"   sync="no"  salt="5555"/>
				<request op="write" vba="22" count="2"   sync="no"  salt="4673"/>
				<request op="write" vba="25" count="11"  sync="no"  salt="3243"/>
				<request op="read"  vba="24" count="1"   sync="no"  salt="6092"/>
				<request op="write" vba="10" count="5"   sync="no"  salt="7538"/>
				<request op="extend_ft"      count="3"   sync="no"/>
				<request op="extend_ft"      count="2"   sync="no"/>
				<request op="write" vba="21" count="2"   sync="no"  salt="0984"/>
				<request op="write" vba="12" count="10"  sync="no"  salt="4545"/>
				<request op="write" vba="26" count="4"   sync="no"  salt="5774"/>
				<request op="write" vba="15" count="7"   sync="no"  salt="9311"/>
				<request op="write" vba="65" count="7"   sync="no"  salt="4583"/>
				<request op="read"  vba="23" count="1"   sync="no"  salt="4673"/>
				<request op="read"  vba="25" count="1"   sync="no"  salt="3243"/>
				<request op="read"  vba="28" count="2"   sync="no"  salt="5774"/>
				<request op="extend_ft"      count="11"  sync="no"/>
				<request op="read"  vba="24" count="1"   sync="no"  salt="6092"/>
				<request op="read"  vba="12" count="3"   sync="no"  salt="4545"/>
				<request op="read"  vba="19" count="3"   sync="no"  salt="9311"/>
				<request op="read"  vba="10" count="2"   sync="no"  salt="7538"/>
				<request op="read"  vba="65" count="7"   sync="no"  salt="4583"/>
				<request op="write" vba="60" count="10"  sync="no"  salt="2725"/>
				<request op="read"  vba="63" count="7"   sync="no"  salt="2725"/>
				<request op="read"  vba="70" count="2"   sync="no"  salt="4583"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 14: test synchronous vbd extension"/>

				<request op="write" vba="20" count="3"   sync="yes" salt="0473"/>
				<request op="extend_vbd"     count="23"  sync="yes"/>
				<request op="read"  vba="21" count="1"   sync="yes" salt="0473"/>
				<request op="extend_vbd"     count="6"   sync="yes"/>
				<request op="write" vba="15" count="10"  sync="yes" salt="1296"/>
				<request op="write" vba="15" count="4"   sync="yes" salt="1161"/>
				<request op="extend_vbd"     count="10"  sync="yes"/>
				<request op="read"  vba="21" count="3"   sync="yes" salt="1296"/>
				<request op="read"  vba="19" count="3"   sync="yes" salt="1296"/>
				<request op="write" vba="17" count="5"   sync="yes" salt="5353"/>
				<request op="extend_vbd"     count="2"   sync="yes"/>
				<request op="extend_vbd"     count="2"   sync="yes"/>
				<request op="extend_vbd"     count="2"   sync="yes"/>
				<request op="read"  vba="22" count="3"   sync="yes" salt="1296"/>
				<request op="extend_vbd"     count="1"   sync="yes"/>
				<request op="read"  vba="15" count="2"   sync="yes" salt="1161"/>
				<request op="write" vba="11" count="6"   sync="yes" salt="3654"/>
				<request op="write" vba="65" count="1"   sync="yes" salt="5346"/>
				<request op="read"  vba="65" count="1"   sync="yes" salt="5346"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 15: test asynchronous vbd extension"/>

				<request op="write" vba="20" count="3"   sync="no"  salt="7384"/>
				<request op="extend_vbd"     count="21"  sync="no"/>
				<request op="extend_vbd"     count="17"  sync="no"/>
				<request op="read"  vba="21" count="1"   sync="no"  salt="7384"/>
				<request op="write" vba="15" count="10"  sync="no"  salt="9602"/>
				<request op="write" vba="15" count="4"   sync="no"  salt="6100"/>
				<request op="read"  vba="21" count="3"   sync="no"  salt="9602"/>
				<request op="read"  vba="19" count="3"   sync="no"  salt="9602"/>
				<request op="write" vba="17" count="5"   sync="no"  salt="5555"/>
				<request op="read"  vba="22" count="3"   sync="no"  salt="9602"/>
				<request op="read"  vba="15" count="2"   sync="no"  salt="6100"/>
				<request op="extend_vbd"     count="180" sync="no"/>
				<request op="write" vba="11" count="6"   sync="no"  salt="1436"/>
				<request op="read"  vba="17" count="5"   sync="no"  salt="5555"/>
				<request op="write" vba="22" count="2"   sync="no"  salt="7463"/>
				<request op="write" vba="25" count="11"  sync="no"  salt="4323"/>
				<request op="read"  vba="24" count="1"   sync="no"  salt="9602"/>
				<request op="write" vba="10" count="5"   sync="no"  salt="3758"/>
				<request op="extend_vbd"     count="3"   sync="no"/>
				<request op="extend_vbd"     count="2"   sync="no"/>
				<request op="write" vba="21" count="2"   sync="no"  salt="8094"/>
				<request op="write" vba="12" count="10"  sync="no"  salt="4455"/>
				<request op="write" vba="26" count="4"   sync="no"  salt="7574"/>
				<request op="write" vba="15" count="7"   sync="no"  salt="1931"/>
				<request op="write" vba="65" count="7"   sync="no"  salt="8453"/>
				<request op="read"  vba="23" count="1"   sync="no"  salt="7463"/>
				<request op="read"  vba="25" count="1"   sync="no"  salt="4323"/>
				<request op="read"  vba="28" count="2"   sync="no"  salt="7574"/>
				<request op="extend_vbd"     count="11"  sync="no"/>
				<request op="read"  vba="24" count="1"   sync="no"  salt="9602"/>
				<request op="read"  vba="12" count="3"   sync="no"  salt="4455"/>
				<request op="read"  vba="19" count="3"   sync="no"  salt="1931"/>
				<request op="read"  vba="10" count="2"   sync="no"  salt="3758"/>
				<request op="read"  vba="65" count="7"   sync="no"  salt="8453"/>
				<request op="write" vba="60" count="10"  sync="no"  salt="2275"/>
				<request op="read"  vba="63" count="7"   sync="no"  salt="2275"/>
				<request op="read"  vba="70" count="2"   sync="no"  salt="8453"/>
				<request op="sync"  vba="0"  count="256" sync="yes"/>
				<check/>

				<log string="Step 16: reinitialize CBE device, do read/write benchmarks"/>

				<request op="deinitialize" sync="no"/>
				<destruct/>
				<initialize>

					<virtual-block-device
						nr_of_levels="4"
						nr_of_children="64"
						nr_of_leafs="25600" />

					<free-tree
						nr_of_levels="4"
						nr_of_children="64"
						nr_of_leafs="25600" />

				</initialize>
				<construct/>

				<benchmark op="start" label="read initial data in one request"/>
				<request op="read" vba="0" count="12800" sync="no"/>
				<benchmark op="stop"/>

				<benchmark op="start" label="overwrite initial data in one request"/>
				<request op="write" vba="0" count="25600" sync="no"/>
				<benchmark op="stop"/>

				<benchmark op="start" label="overwrite written data in one request"/>
				<request op="write" vba="0" count="12800" sync="no"/>
				<benchmark op="stop"/>

				<benchmark op="start" label="read written data in one request"/>
				<request op="read" vba="0" count="12800" sync="no"/>
				<benchmark op="stop"/>

				<benchmark op="start" label="read written data randomized"/>

				<request op="read" vba="00001" count="10" sync="no"/>
				<request op="read" vba="00028" count="80" sync="no"/>
				<request op="read" vba="24045" count="50" sync="no"/>
				<request op="read" vba="04441" count="10" sync="no"/>
				<request op="read" vba="14240" count="40" sync="no"/>
				<request op="read" vba="00230" count="80" sync="no"/>
				<request op="read" vba="01673" count="30" sync="no"/>
				<request op="read" vba="21609" count="30" sync="no"/>
				<request op="read" vba="12201" count="10" sync="no"/>
				<request op="read" vba="19601" count="10" sync="no"/>
				<request op="read" vba="08901" count="10" sync="no"/>
				<request op="read" vba="00972" count="20" sync="no"/>
				<request op="read" vba="00097" count="70" sync="no"/>
				<request op="read" vba="05593" count="30" sync="no"/>
				<request op="read" vba="15201" count="10" sync="no"/>
				<request op="read" vba="25237" count="20" sync="no"/>
				<request op="read" vba="03537" count="70" sync="no"/>
				<request op="read" vba="15151" count="10" sync="no"/>
				<request op="read" vba="04374" count="40" sync="no"/>
				<request op="read" vba="05350" count="40" sync="no"/>
				<request op="read" vba="00754" count="40" sync="no"/>
				<request op="read" vba="01729" count="90" sync="no"/>
				<request op="read" vba="11246" count="60" sync="no"/>
				<request op="read" vba="13229" count="90" sync="no"/>
				<request op="read" vba="13001" count="10" sync="no"/>
				<request op="read" vba="00120" count="90" sync="no"/>
				<request op="read" vba="20111" count="10" sync="no"/>
				<request op="read" vba="02451" count="10" sync="no"/>
				<request op="read" vba="14734" count="40" sync="no"/>
				<request op="read" vba="00942" count="20" sync="no"/>
				<request op="read" vba="00091" count="10" sync="no"/>
				<request op="read" vba="23011" count="10" sync="no"/>
				<request op="read" vba="20271" count="50" sync="no"/>
				<request op="read" vba="01283" count="30" sync="no"/>
				<request op="read" vba="12823" count="30" sync="no"/>
				<request op="read" vba="00200" count="50" sync="no"/>
				<request op="read" vba="01234" count="40" sync="no"/>
				<request op="read" vba="17490" count="70" sync="no"/>
				<request op="read" vba="19990" count="20" sync="no"/>
				<request op="read" vba="02190" count="30" sync="no"/>
				<request op="read" vba="00421" count="10" sync="no"/>
				<request op="read" vba="11421" count="10" sync="no"/>
				<request op="read" vba="02481" count="50" sync="no"/>
				<request op="read" vba="23471" count="10" sync="no"/>
				<request op="read" vba="21291" count="40" sync="no"/>
				<request op="read" vba="00212" count="20" sync="no"/>
				<request op="read" vba="14402" count="20" sync="no"/>
				<request op="read" vba="01201" count="10" sync="no"/>
				<request op="read" vba="20975" count="30" sync="no"/>
				<request op="read" vba="13777" count="70" sync="no"/>

				<request op="read" vba="00100" count="10" sync="no"/>
				<request op="read" vba="00820" count="80" sync="no"/>
				<request op="read" vba="24540" count="50" sync="no"/>
				<request op="read" vba="04144" count="10" sync="no"/>
				<request op="read" vba="14042" count="40" sync="no"/>
				<request op="read" vba="00032" count="80" sync="no"/>
				<request op="read" vba="01376" count="30" sync="no"/>
				<request op="read" vba="21906" count="30" sync="no"/>
				<request op="read" vba="12102" count="10" sync="no"/>
				<request op="read" vba="19106" count="10" sync="no"/>
				<request op="read" vba="08109" count="10" sync="no"/>
				<request op="read" vba="00279" count="20" sync="no"/>
				<request op="read" vba="00790" count="70" sync="no"/>
				<request op="read" vba="05395" count="30" sync="no"/>
				<request op="read" vba="15102" count="10" sync="no"/>
				<request op="read" vba="25032" count="20" sync="no"/>
				<request op="read" vba="03735" count="70" sync="no"/>
				<request op="read" vba="15151" count="10" sync="no"/>
				<request op="read" vba="04473" count="40" sync="no"/>
				<request op="read" vba="05053" count="40" sync="no"/>
				<request op="read" vba="00457" count="40" sync="no"/>
				<request op="read" vba="01927" count="90" sync="no"/>
				<request op="read" vba="11642" count="60" sync="no"/>
				<request op="read" vba="13922" count="90" sync="no"/>
				<request op="read" vba="13100" count="10" sync="no"/>
				<request op="read" vba="00021" count="90" sync="no"/>
				<request op="read" vba="20111" count="10" sync="no"/>
				<request op="read" vba="02154" count="10" sync="no"/>
				<request op="read" vba="14437" count="40" sync="no"/>
				<request op="read" vba="00249" count="20" sync="no"/>
				<request op="read" vba="00190" count="10" sync="no"/>
				<request op="read" vba="23110" count="10" sync="no"/>
				<request op="read" vba="20172" count="50" sync="no"/>
				<request op="read" vba="01382" count="30" sync="no"/>
				<request op="read" vba="12328" count="30" sync="no"/>
				<request op="read" vba="00002" count="50" sync="no"/>
				<request op="read" vba="01432" count="40" sync="no"/>
				<request op="read" vba="17094" count="70" sync="no"/>
				<request op="read" vba="19099" count="20" sync="no"/>
				<request op="read" vba="02091" count="30" sync="no"/>
				<request op="read" vba="00124" count="10" sync="no"/>
				<request op="read" vba="11124" count="10" sync="no"/>
				<request op="read" vba="02184" count="50" sync="no"/>
				<request op="read" vba="23174" count="10" sync="no"/>
				<request op="read" vba="21192" count="40" sync="no"/>
				<request op="read" vba="00212" count="20" sync="no"/>
				<request op="read" vba="14204" count="20" sync="no"/>
				<request op="read" vba="01102" count="10" sync="no"/>
				<request op="read" vba="20579" count="30" sync="no"/>
				<request op="read" vba="13777" count="70" sync="no"/>

				<request op="read" vba="00010" count="10" sync="no"/>
				<request op="read" vba="02080" count="80" sync="no"/>
				<request op="read" vba="24054" count="50" sync="no"/>
				<request op="read" vba="04414" count="10" sync="no"/>
				<request op="read" vba="14204" count="40" sync="no"/>
				<request op="read" vba="03200" count="80" sync="no"/>
				<request op="read" vba="07631" count="30" sync="no"/>
				<request op="read" vba="20691" count="30" sync="no"/>
				<request op="read" vba="10212" count="10" sync="no"/>
				<request op="read" vba="10619" count="10" sync="no"/>
				<request op="read" vba="00918" count="10" sync="no"/>
				<request op="read" vba="07920" count="20" sync="no"/>
				<request op="read" vba="09070" count="70" sync="no"/>
				<request op="read" vba="09535" count="30" sync="no"/>
				<request op="read" vba="10215" count="10" sync="no"/>
				<request op="read" vba="23275" count="20" sync="no"/>
				<request op="read" vba="03573" count="70" sync="no"/>
				<request op="read" vba="15115" count="10" sync="no"/>
				<request op="read" vba="07344" count="40" sync="no"/>
				<request op="read" vba="05305" count="40" sync="no"/>
				<request op="read" vba="05740" count="40" sync="no"/>
				<request op="read" vba="02791" count="90" sync="no"/>
				<request op="read" vba="14261" count="60" sync="no"/>
				<request op="read" vba="12293" count="90" sync="no"/>
				<request op="read" vba="10013" count="10" sync="no"/>
				<request op="read" vba="02100" count="90" sync="no"/>
				<request op="read" vba="21110" count="10" sync="no"/>
				<request op="read" vba="05412" count="10" sync="no"/>
				<request op="read" vba="13744" count="40" sync="no"/>
				<request op="read" vba="04920" count="20" sync="no"/>
				<request op="read" vba="09010" count="10" sync="no"/>
				<request op="read" vba="21013" count="10" sync="no"/>
				<request op="read" vba="00210" count="50" sync="no"/>
				<request op="read" vba="08231" count="30" sync="no"/>
				<request op="read" vba="12832" count="30" sync="no"/>
				<request op="read" vba="00200" count="50" sync="no"/>
				<request op="read" vba="03241" count="40" sync="no"/>
				<request op="read" vba="19407" count="70" sync="no"/>
				<request op="read" vba="19909" count="20" sync="no"/>
				<request op="read" vba="09102" count="30" sync="no"/>
				<request op="read" vba="02410" count="10" sync="no"/>
				<request op="read" vba="12411" count="10" sync="no"/>
				<request op="read" vba="08412" count="50" sync="no"/>
				<request op="read" vba="22413" count="10" sync="no"/>
				<request op="read" vba="24211" count="40" sync="no"/>
				<request op="read" vba="01220" count="20" sync="no"/>
				<request op="read" vba="10424" count="20" sync="no"/>
				<request op="read" vba="00211" count="10" sync="no"/>
				<request op="read" vba="21950" count="30" sync="no"/>
				<request op="read" vba="17773" count="70" sync="no"/>

				<request op="read" vba="01000" count="10" sync="no"/>
				<request op="read" vba="08002" count="80" sync="no"/>
				<request op="read" vba="25044" count="50" sync="no"/>
				<request op="read" vba="01444" count="10" sync="no"/>
				<request op="read" vba="10244" count="40" sync="no"/>
				<request op="read" vba="00203" count="80" sync="no"/>
				<request op="read" vba="03617" count="30" sync="no"/>
				<request op="read" vba="23610" count="30" sync="no"/>
				<request op="read" vba="11220" count="10" sync="no"/>
				<request op="read" vba="11690" count="10" sync="no"/>
				<request op="read" vba="01980" count="10" sync="no"/>
				<request op="read" vba="02907" count="20" sync="no"/>
				<request op="read" vba="07009" count="70" sync="no"/>
				<request op="read" vba="03559" count="30" sync="no"/>
				<request op="read" vba="11250" count="10" sync="no"/>
				<request op="read" vba="20253" count="20" sync="no"/>
				<request op="read" vba="07533" count="70" sync="no"/>
				<request op="read" vba="11155" count="10" sync="no"/>
				<request op="read" vba="04347" count="40" sync="no"/>
				<request op="read" vba="00355" count="40" sync="no"/>
				<request op="read" vba="04705" count="40" sync="no"/>
				<request op="read" vba="09712" count="90" sync="no"/>
				<request op="read" vba="16214" count="60" sync="no"/>
				<request op="read" vba="19232" count="90" sync="no"/>
				<request op="read" vba="11030" count="10" sync="no"/>
				<request op="read" vba="00102" count="90" sync="no"/>
				<request op="read" vba="21101" count="10" sync="no"/>
				<request op="read" vba="01425" count="10" sync="no"/>
				<request op="read" vba="14743" count="40" sync="no"/>
				<request op="read" vba="02904" count="20" sync="no"/>
				<request op="read" vba="01009" count="10" sync="no"/>
				<request op="read" vba="21031" count="10" sync="no"/>
				<request op="read" vba="25207" count="50" sync="no"/>
				<request op="read" vba="03218" count="30" sync="no"/>
				<request op="read" vba="13822" count="30" sync="no"/>
				<request op="read" vba="00200" count="50" sync="no"/>
				<request op="read" vba="04213" count="40" sync="no"/>
				<request op="read" vba="10479" count="70" sync="no"/>
				<request op="read" vba="10999" count="20" sync="no"/>
				<request op="read" vba="00129" count="30" sync="no"/>
				<request op="read" vba="01402" count="10" sync="no"/>
				<request op="read" vba="11412" count="10" sync="no"/>
				<request op="read" vba="01428" count="50" sync="no"/>
				<request op="read" vba="21437" count="10" sync="no"/>
				<request op="read" vba="24219" count="40" sync="no"/>
				<request op="read" vba="02201" count="20" sync="no"/>
				<request op="read" vba="12440" count="20" sync="no"/>
				<request op="read" vba="01210" count="10" sync="no"/>
				<request op="read" vba="20907" count="30" sync="no"/>
				<request op="read" vba="17737" count="70" sync="no"/>

				<benchmark op="stop"/>

				<benchmark op="start" label="overwrite written data randomized"/>

				<request op="write" vba="00001" count="10" sync="no"/>
				<request op="write" vba="00028" count="80" sync="no"/>
				<request op="write" vba="24045" count="50" sync="no"/>
				<request op="write" vba="04441" count="10" sync="no"/>
				<request op="write" vba="14240" count="40" sync="no"/>
				<request op="write" vba="00230" count="80" sync="no"/>
				<request op="write" vba="01673" count="30" sync="no"/>
				<request op="write" vba="21609" count="30" sync="no"/>
				<request op="write" vba="12201" count="10" sync="no"/>
				<request op="write" vba="19601" count="10" sync="no"/>
				<request op="write" vba="08901" count="10" sync="no"/>
				<request op="write" vba="00972" count="20" sync="no"/>
				<request op="write" vba="00097" count="70" sync="no"/>
				<request op="write" vba="05593" count="30" sync="no"/>
				<request op="write" vba="15201" count="10" sync="no"/>
				<request op="write" vba="25237" count="20" sync="no"/>
				<request op="write" vba="03537" count="70" sync="no"/>
				<request op="write" vba="15151" count="10" sync="no"/>
				<request op="write" vba="04374" count="40" sync="no"/>
				<request op="write" vba="05350" count="40" sync="no"/>
				<request op="write" vba="00754" count="40" sync="no"/>
				<request op="write" vba="01729" count="90" sync="no"/>
				<request op="write" vba="11246" count="60" sync="no"/>
				<request op="write" vba="13229" count="90" sync="no"/>
				<request op="write" vba="13001" count="10" sync="no"/>
				<request op="write" vba="00120" count="90" sync="no"/>
				<request op="write" vba="20111" count="10" sync="no"/>
				<request op="write" vba="02451" count="10" sync="no"/>
				<request op="write" vba="14734" count="40" sync="no"/>
				<request op="write" vba="00942" count="20" sync="no"/>
				<request op="write" vba="00091" count="10" sync="no"/>
				<request op="write" vba="23011" count="10" sync="no"/>
				<request op="write" vba="20271" count="50" sync="no"/>
				<request op="write" vba="01283" count="30" sync="no"/>
				<request op="write" vba="12823" count="30" sync="no"/>
				<request op="write" vba="00200" count="50" sync="no"/>
				<request op="write" vba="01234" count="40" sync="no"/>
				<request op="write" vba="17490" count="70" sync="no"/>
				<request op="write" vba="19990" count="20" sync="no"/>
				<request op="write" vba="02190" count="30" sync="no"/>
				<request op="write" vba="00421" count="10" sync="no"/>
				<request op="write" vba="11421" count="10" sync="no"/>
				<request op="write" vba="02481" count="50" sync="no"/>
				<request op="write" vba="23471" count="10" sync="no"/>
				<request op="write" vba="21291" count="40" sync="no"/>
				<request op="write" vba="00212" count="20" sync="no"/>
				<request op="write" vba="14402" count="20" sync="no"/>
				<request op="write" vba="01201" count="10" sync="no"/>
				<request op="write" vba="20975" count="30" sync="no"/>
				<request op="write" vba="13777" count="70" sync="no"/>

				<request op="write" vba="00100" count="10" sync="no"/>
				<request op="write" vba="00820" count="80" sync="no"/>
				<request op="write" vba="24540" count="50" sync="no"/>
				<request op="write" vba="04144" count="10" sync="no"/>
				<request op="write" vba="14042" count="40" sync="no"/>
				<request op="write" vba="00032" count="80" sync="no"/>
				<request op="write" vba="01376" count="30" sync="no"/>
				<request op="write" vba="21906" count="30" sync="no"/>
				<request op="write" vba="12102" count="10" sync="no"/>
				<request op="write" vba="19106" count="10" sync="no"/>
				<request op="write" vba="08109" count="10" sync="no"/>
				<request op="write" vba="00279" count="20" sync="no"/>
				<request op="write" vba="00790" count="70" sync="no"/>
				<request op="write" vba="05395" count="30" sync="no"/>
				<request op="write" vba="15102" count="10" sync="no"/>
				<request op="write" vba="25032" count="20" sync="no"/>
				<request op="write" vba="03735" count="70" sync="no"/>
				<request op="write" vba="15151" count="10" sync="no"/>
				<request op="write" vba="04473" count="40" sync="no"/>
				<request op="write" vba="05053" count="40" sync="no"/>
				<request op="write" vba="00457" count="40" sync="no"/>
				<request op="write" vba="01927" count="90" sync="no"/>
				<request op="write" vba="11642" count="60" sync="no"/>
				<request op="write" vba="13922" count="90" sync="no"/>
				<request op="write" vba="13100" count="10" sync="no"/>
				<request op="write" vba="00021" count="90" sync="no"/>
				<request op="write" vba="20111" count="10" sync="no"/>
				<request op="write" vba="02154" count="10" sync="no"/>
				<request op="write" vba="14437" count="40" sync="no"/>
				<request op="write" vba="00249" count="20" sync="no"/>
				<request op="write" vba="00190" count="10" sync="no"/>
				<request op="write" vba="23110" count="10" sync="no"/>
				<request op="write" vba="20172" count="50" sync="no"/>
				<request op="write" vba="01382" count="30" sync="no"/>
				<request op="write" vba="12328" count="30" sync="no"/>
				<request op="write" vba="00002" count="50" sync="no"/>
				<request op="write" vba="01432" count="40" sync="no"/>
				<request op="write" vba="17094" count="70" sync="no"/>
				<request op="write" vba="19099" count="20" sync="no"/>
				<request op="write" vba="02091" count="30" sync="no"/>
				<request op="write" vba="00124" count="10" sync="no"/>
				<request op="write" vba="11124" count="10" sync="no"/>
				<request op="write" vba="02184" count="50" sync="no"/>
				<request op="write" vba="23174" count="10" sync="no"/>
				<request op="write" vba="21192" count="40" sync="no"/>
				<request op="write" vba="00212" count="20" sync="no"/>
				<request op="write" vba="14204" count="20" sync="no"/>
				<request op="write" vba="01102" count="10" sync="no"/>
				<request op="write" vba="20579" count="30" sync="no"/>
				<request op="write" vba="13777" count="70" sync="no"/>

				<request op="write" vba="00010" count="10" sync="no"/>
				<request op="write" vba="02080" count="80" sync="no"/>
				<request op="write" vba="24054" count="50" sync="no"/>
				<request op="write" vba="04414" count="10" sync="no"/>
				<request op="write" vba="14204" count="40" sync="no"/>
				<request op="write" vba="03200" count="80" sync="no"/>
				<request op="write" vba="07631" count="30" sync="no"/>
				<request op="write" vba="20691" count="30" sync="no"/>
				<request op="write" vba="10212" count="10" sync="no"/>
				<request op="write" vba="10619" count="10" sync="no"/>
				<request op="write" vba="00918" count="10" sync="no"/>
				<request op="write" vba="07920" count="20" sync="no"/>
				<request op="write" vba="09070" count="70" sync="no"/>
				<request op="write" vba="09535" count="30" sync="no"/>
				<request op="write" vba="10215" count="10" sync="no"/>
				<request op="write" vba="23275" count="20" sync="no"/>
				<request op="write" vba="03573" count="70" sync="no"/>
				<request op="write" vba="15115" count="10" sync="no"/>
				<request op="write" vba="07344" count="40" sync="no"/>
				<request op="write" vba="05305" count="40" sync="no"/>
				<request op="write" vba="05740" count="40" sync="no"/>
				<request op="write" vba="02791" count="90" sync="no"/>
				<request op="write" vba="14261" count="60" sync="no"/>
				<request op="write" vba="12293" count="90" sync="no"/>
				<request op="write" vba="10013" count="10" sync="no"/>
				<request op="write" vba="02100" count="90" sync="no"/>
				<request op="write" vba="21110" count="10" sync="no"/>
				<request op="write" vba="05412" count="10" sync="no"/>
				<request op="write" vba="13744" count="40" sync="no"/>
				<request op="write" vba="04920" count="20" sync="no"/>
				<request op="write" vba="09010" count="10" sync="no"/>
				<request op="write" vba="21013" count="10" sync="no"/>
				<request op="write" vba="00210" count="50" sync="no"/>
				<request op="write" vba="08231" count="30" sync="no"/>
				<request op="write" vba="12832" count="30" sync="no"/>
				<request op="write" vba="00200" count="50" sync="no"/>
				<request op="write" vba="03241" count="40" sync="no"/>
				<request op="write" vba="19407" count="70" sync="no"/>
				<request op="write" vba="19909" count="20" sync="no"/>
				<request op="write" vba="09102" count="30" sync="no"/>
				<request op="write" vba="02410" count="10" sync="no"/>
				<request op="write" vba="12411" count="10" sync="no"/>
				<request op="write" vba="08412" count="50" sync="no"/>
				<request op="write" vba="22413" count="10" sync="no"/>
				<request op="write" vba="24211" count="40" sync="no"/>
				<request op="write" vba="01220" count="20" sync="no"/>
				<request op="write" vba="10424" count="20" sync="no"/>
				<request op="write" vba="00211" count="10" sync="no"/>
				<request op="write" vba="21950" count="30" sync="no"/>
				<request op="write" vba="17773" count="70" sync="no"/>

				<request op="write" vba="01000" count="10" sync="no"/>
				<request op="write" vba="08002" count="80" sync="no"/>
				<request op="write" vba="25044" count="50" sync="no"/>
				<request op="write" vba="01444" count="10" sync="no"/>
				<request op="write" vba="10244" count="40" sync="no"/>
				<request op="write" vba="00203" count="80" sync="no"/>
				<request op="write" vba="03617" count="30" sync="no"/>
				<request op="write" vba="23610" count="30" sync="no"/>
				<request op="write" vba="11220" count="10" sync="no"/>
				<request op="write" vba="11690" count="10" sync="no"/>
				<request op="write" vba="01980" count="10" sync="no"/>
				<request op="write" vba="02907" count="20" sync="no"/>
				<request op="write" vba="07009" count="70" sync="no"/>
				<request op="write" vba="03559" count="30" sync="no"/>
				<request op="write" vba="11250" count="10" sync="no"/>
				<request op="write" vba="20253" count="20" sync="no"/>
				<request op="write" vba="07533" count="70" sync="no"/>
				<request op="write" vba="11155" count="10" sync="no"/>
				<request op="write" vba="04347" count="40" sync="no"/>
				<request op="write" vba="00355" count="40" sync="no"/>
				<request op="write" vba="04705" count="40" sync="no"/>
				<request op="write" vba="09712" count="90" sync="no"/>
				<request op="write" vba="16214" count="60" sync="no"/>
				<request op="write" vba="19232" count="90" sync="no"/>
				<request op="write" vba="11030" count="10" sync="no"/>
				<request op="write" vba="00102" count="90" sync="no"/>
				<request op="write" vba="21101" count="10" sync="no"/>
				<request op="write" vba="01425" count="10" sync="no"/>
				<request op="write" vba="14743" count="40" sync="no"/>
				<request op="write" vba="02904" count="20" sync="no"/>
				<request op="write" vba="01009" count="10" sync="no"/>
				<request op="write" vba="21031" count="10" sync="no"/>
				<request op="write" vba="25207" count="50" sync="no"/>
				<request op="write" vba="03218" count="30" sync="no"/>
				<request op="write" vba="13822" count="30" sync="no"/>
				<request op="write" vba="00200" count="50" sync="no"/>
				<request op="write" vba="04213" count="40" sync="no"/>
				<request op="write" vba="10479" count="70" sync="no"/>
				<request op="write" vba="10999" count="20" sync="no"/>
				<request op="write" vba="00129" count="30" sync="no"/>
				<request op="write" vba="01402" count="10" sync="no"/>
				<request op="write" vba="11412" count="10" sync="no"/>
				<request op="write" vba="01428" count="50" sync="no"/>
				<request op="write" vba="21437" count="10" sync="no"/>
				<request op="write" vba="24219" count="40" sync="no"/>
				<request op="write" vba="02201" count="20" sync="no"/>
				<request op="write" vba="12440" count="20" sync="no"/>
				<request op="write" vba="01210" count="10" sync="no"/>
				<request op="write" vba="20907" count="30" sync="no"/>
				<request op="write" vba="17737" count="70" sync="no"/>

				<benchmark op="stop"/>
				<check/>

				<log string="Step 17: test CBE dump and list snapshots command"/>

				<request op="create_snapshot" sync="no"/>
				<request op="write" vba="17737" count="70" sync="no" salt="8924"/>
				<request op="create_snapshot" sync="no"/>
				<request op="write" vba="00129" count="30" sync="no" salt="9471"/>
				<request op="create_snapshot" sync="no"/>
				<dump
					max_superblocks="1"
					vbd="yes"
					vbd_vba_filter_enabled="yes"
					vbd_vba_filter="50"
					free_tree="no"
					meta_tree="no"
					hashes="yes"/>

				<list-snapshots/>

			</commands>

		</config>

		<route>
			<service name="File_system" label_last="trust_anchor">
				<child name="vfs_trust_anchor"/>
			</service>
			<service name="File_system"> <child name="lx_fs"/> </service>
			<service name="Block"> <child name="lx_block"/> </service>
			<service name="Terminal"> <child name="log_terminal"/> </service>
			<service name="Timer"> <child name="timer"/> </service>
			<any-service> <parent/> </any-service>
		</route>

	</start>

</config>}

install_config $config

exec rm -rf [local_cbe_image]
if { [get_cmd_switch --autopilot] } {

	exec rm -rf [autopilot_cbe_image]
	catch { exec $dd if=/dev/urandom of=[autopilot_cbe_image] bs=1M count=[cbe_image_size_mb] }
	exec ln -sf -T [autopilot_cbe_image] [local_cbe_image]

} else {

	catch { exec $dd if=/dev/urandom of=[local_cbe_image] bs=1M count=[cbe_image_size_mb] }
}

append boot_modules {
	core
	init
	timer
	cbe_tester
	ld.lib.so spark.lib.so
	libsparkcrypto.lib.so
	cbe_cxx.lib.so
	cbe_check_cxx.lib.so
	cbe_dump_cxx.lib.so
	cbe_init_cxx.lib.so
	log_terminal
	report_rom
	lx_fs
	vfs
	lx_block
	libc.lib.so
	libcrypto.lib.so
	vfs.lib.so
	vfs_cbe_trust_anchor.lib.so
	vfs_cbe_crypto_aes_cbc.lib.so
	vfs_import.lib.so
}

append boot_modules [cbe_image_name]

build_boot_image $boot_modules

append qemu_args " -nographic -m 1280 "

run_genode_until "child \"test\" exited with exit value.*\n" 360

if { [get_cmd_switch --autopilot] } {

	exec rm -rf [local_cbe_image]
	exec rm -rf [autopilot_cbe_image]
}

grep_output {\[init\] child "test" exited with exit value}
compare_output_to {[init] child "test" exited with exit value 0}
