genode/repos/gems/run/tresor_tester.run
Martin Stein d8a71e5978 tresor: improved module framework and clean-up
* Make command pool a proper module
  * The command pool used to be kind of a module but it was driven via custom
    tresor-tester specific code. Now, it becomes a proper module that
    is driven by the module framework instead.
  * Move the code for creating and handling the module-execution progress flag
    into Module_composition::execute_modules as the function is always used with
    this code surrounding it.

* Reorganize files, remove deprecated files

* A new class Module_channel is introduced in the module framework and all
  channel classes inherit from it. With that class in place, the formerly
  module-specific implementations of the following methods are replaced by
  new generic implementations in the Module framework:

  * ready_to_submit_request
  * submit_request
  * _peek_completed_request
  * _drop_completed_request
  * _peek_generated_request
  * _drop_generated_request
  * generated_request_complete

* Module requests are now held for the duration of their lifetime at the
  module they originate from and not, like before, at their target module. As
  a result, modules can generate new requests inline (without having to wait
  for the target module), making code much simpler to read, reducing the amount
  of channel state, and allowing for non-copyable request types.

* Introduce a sub-state-machine for securing a superblock in the
  superblock_control module in order to reduce redundancy.

* Some modules, like free_tree, were completely re-designed in order to make
  them more readable.

* Replace all conditional exceptions by using the macros in
  tresor/assertion.h .

* Move methods that are used in multiple modules but that were implemented
  redundantly in each module to tresor/types.h.

* Remove verbosity node and all that was related to it from tresor tester
  config as the targeted verbosity can be achieved with the
  VERBOSE_MODULE_COMMUNICATION flag in tresor/verbosity.h .

* Extract the aspect of translating the byte-granular I/O-requests to
  tresor-block requests from the tresor VFS-plugin and move it to a new module
  called splitter.

* Rename the files and interface of the hashing back-end to not reflect the used
  hashing algorithm/config anymore, while at the same time making the hashing
  interface strict regarding the used types.

* Introduce the NONCOPYABLE macro that makes marking a class noncopyable short
  and clear.

* Replace the former tresor/vfs_utilities.h/.cc with a new tresor/file.h
  that contains the classes Read_write_file and Write_only_file. These classes
  significantly simplify the modules crypto, block_io, and trust_anchor by
  moving the details of file access to a sub-state machine.

* The former, rather trivial block allocator module is replaced by a normal
  object of type Pba_allocator that must be provided by the client of the
  Sb_initializer (reference in the Sb_initializer_request).

Ref #5062

tresor: read uninitialized vbas as all zeroes

Virtual addresses in a Tresor container that were not yet written by the user
should always return a data block that is all-zeroes. This was the concept
right from the beginning of the project. However, somehow this aspect either
never got implement or got lost along the way.

Some context for understanding the commit: The Tresor doesn't initialize the
payload data blocks of a container when creating a new container as this would
be rather expensive. Instead, it marks the leaf metadata nodes of the
virtual-block-device tree (those that reference the payload data blocks in
physical address space) with generation 0.

Now, this commit ensures that, whenever the virtual-block-device module reads
such a generation-0 leaf, instead of asking the block_io and crypto to deliver
data from disc, it directly provides the user with 4K of zeroes.

Ref #5062
2024-04-12 15:00:45 +02:00

1135 lines
52 KiB
Plaintext

# riscv lacks jitterentropy support currently
if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} {
puts "Autopilot mode is not supported on this platform."
exit 0
}
set dd [installed_command dd]
proc tresor_image_name { } {
return "tresor_block.img"
}
proc lx_local_tresor_image { } {
return bin/[tresor_image_name]
}
proc lx_autopilot_tresor_image { } {
return /tmp/[tresor_image_name].[exec id -un]
}
proc lx_tresor_image_size_mb { } {
return 400
}
proc benchmark_blk_count { } {
if {[have_board linux]} {
# benchmarks over 50 mebibyte
return 12800
}
if {[have_board virt_qemu_arm_v8a]} {
# benchmarks over 25 mebibyte
return 6400
}
# benchmarks turned off
return 0
}
proc block_io_vfs_ram_mb { } {
if {[benchmark_blk_count] > 0} {
# when benchmarks turned on
set bench_mb [expr (([benchmark_blk_count] * 4096) / 1024 / 1024)]
return [expr 8 * $bench_mb]
}
# when benchmarks turned off
return 10
}
proc jent_avail { } {
if {[have_board pbxa9]} { return 0 }
if {[have_board zynq_qemu]} { return 0 }
return 1
}
append build_components {
core lib/ld init timer
server/vfs lib/vfs lib/libc lib/libcrypto
app/tresor_tester
server/log_terminal
server/report_rom
lib/vfs_tresor_crypto_aes_cbc
lib/vfs_tresor_trust_anchor
lib/vfs_import
}
append_if [jent_avail] build_components { lib/vfs_jitterentropy }
append_if [have_board linux] build_components { server/lx_fs }
append_if [have_board linux] build_components { server/lx_block }
build $build_components
create_boot_directory
append config {
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<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>
<start name="timer" caps="100">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
<route>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="IO_PORT"> <parent/> </service>
<service name="IO_MEM"> <parent/> </service>
<service name="IRQ"> <parent/> </service>
</route>
</start>
<start name="report_rom" caps="100">
<resource name="RAM" quantum="4M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config verbose="yes"/>
<route>
<service name="LOG"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="ROM"> <parent/> </service>
</route>
</start>
<start name="log_terminal" caps="100">
<resource name="RAM" quantum="1M"/>
<provides><service name="Terminal"/></provides>
<route>
<service name="LOG"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="ROM"> <parent/> </service>
</route>
</start>
}
if {[have_board linux]} {
append config {
<start name="block_io_fs" caps="100" ld="no">
<binary name="lx_fs"/>
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<config>
<default-policy root="/" writeable="yes"/>
</config>
<route>
<service name="LOG"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="ROM"> <parent/> </service>
</route>
</start>
}
} else {
append config {
<start name="block_io_fs" caps="100">
<binary name="vfs"/>
<resource name="RAM" quantum="} [block_io_vfs_ram_mb] {M"/>
<provides><service name="File_system"/></provides>
<config>
<vfs>
<dir name="block_io">
<ram/>
</dir>
<import>
<dir name="block_io">
<inline name="} [tresor_image_name] {"></inline>
</dir>
</import>
</vfs>
<default-policy root="/block_io" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="CPU"> <parent/> </service>
</route>
</start>
}
}
append config {
<start name="trust_anchor_fs" caps="200">
<binary name="vfs"/>
<resource name="RAM" quantum="10M"/>
<provides><service name="File_system"/></provides>
<config>
<vfs>
<dir name="storage">
<ram/>
</dir>
<dir name="dev"> }
append_if [jent_avail] config {
<jitterentropy name="jitterentropy"/> }
append_if [expr ![jent_avail]] config {
<inline name="jitterentropy">0123456789abcdefghijklmnopqrstuv</inline> }
append config {
<tresor_trust_anchor name="tresor_trust_anchor" storage_dir="/storage"/>
</dir>
</vfs>
<default-policy root="/dev/tresor_trust_anchor" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="CPU"> <parent/> </service>
</route>
</start>
<start name="test" caps="200">
<binary name="tresor_tester"/>
<resource name="RAM" quantum="10M"/>
<config ld_verbose="yes">
<block-io type="vfs" path="/} [tresor_image_name] {"/>
<crypto path="/crypto"/>
<trust-anchor path="/trust_anchor"/>
<vfs>
<fs buffer_size="1M"/>
<tresor_crypto_aes_cbc name="crypto"/>
<dir name="trust_anchor">
<fs label="trust_anchor"/>
</dir>
</vfs>
<commands>
<log string="Step 1: Initialize Trust Anchor and Tresor device, start Tresor 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="4"
nr_of_children="8"
nr_of_leafs="100" />
</initialize>
<check/>
<construct/>
<log string="Step 2: test synchronous write, read"/>
<request op="write" vba="1" count="1" sync="yes" salt="1234"/>
<request op="read" vba="1" count="1" sync="yes" salt="1234"/>
<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="3" sync="yes" salt="8765"/>
<request op="read" vba="41" count="3" 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 Tresor library, check Tresor integrity, restart Tresor library"/>
<request op="deinitialize" sync="no"/>
<destruct/>
<check/>
<construct/>
<log string="Step 7: test synchronous snapshot management"/>
<request op="write" vba="20" count="3" sync="yes" salt="7304"/>
<request op="create_snapshot" sync="yes" id="1"/>
<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" id="2"/>
<request op="create_snapshot" sync="yes" id="3"/>
<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"/>
<check-snapshots/>
<request op="discard_snapshot" sync="yes" id="1"/>
<request op="discard_snapshot" sync="yes" id="2"/>
<check-snapshots/>
<request op="sync" vba="0" count="256" sync="yes"/>
<check/>
<log string="Step 8: test asynchronous snapshot management"/>
<request op="write" vba="20" count="3" sync="no" salt="7384"/>
<request op="create_snapshot" sync="no" id="4"/>
<request op="create_snapshot" sync="no" id="5"/>
<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" id="6"/>
<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" id="7"/>
<request op="create_snapshot" sync="no" id="8"/>
<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" id="9"/>
<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"/>
<check-snapshots/>
<request op="discard_snapshot" sync="no" id="4"/>
<request op="sync" vba="0" count="256" sync="yes"/>
<check/>
<log string="Step 9: reinitialize Tresor device"/>
<request op="deinitialize" sync="no"/>
<destruct/>
<initialize>
<virtual-block-device
nr_of_levels="4"
nr_of_children="8"
nr_of_leafs="100" />
<free-tree
nr_of_levels="4"
nr_of_children="8"
nr_of_leafs="100" />
</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" id="10"/>
<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" id="11"/>
<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" id="12"/>
<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 Tresor device"/>
<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/>
}
if {[benchmark_blk_count] > 0} {
append config {
<log string="Step 17: do read/write benchmarks"/>
<benchmark op="start" label="read initial data in one request"/>
<request op="read" vba="0" count="} [benchmark_blk_count] {" sync="no"/>
<benchmark op="stop"/>
<benchmark op="start" label="overwrite initial data in one request"/>
<request op="write" vba="0" count="} [benchmark_blk_count] {" sync="no"/>
<benchmark op="stop"/>
<benchmark op="start" label="overwrite written data in one request"/>
<request op="write" vba="0" count="} [benchmark_blk_count] {" sync="no"/>
<benchmark op="stop"/>
<benchmark op="start" label="read written data in one request"/>
<request op="read" vba="0" count="} [benchmark_blk_count] {" 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/>
}
} else {
append config {
<log string="Step 17: skip because benchmarks are disabled for this platform"/>
}
}
append config {
<log string="Step 18: test check-snapshots command"/>
<request op="create_snapshot" sync="no" id="13"/>
<request op="write" vba="17737" count="70" sync="no" salt="8924"/>
<request op="create_snapshot" sync="no" id="14"/>
<request op="write" vba="00129" count="30" sync="no" salt="9471"/>
<request op="create_snapshot" sync="no" id="15"/>
<check-snapshots/>
</commands>
</config>
<route>
<service name="File_system" label_last="trust_anchor"> <child name="trust_anchor_fs"/> </service>
<service name="File_system"> <child name="block_io_fs"/> </service>
<service name="Terminal"> <child name="log_terminal"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="LOG"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="ROM"> <parent/> </service>
</route>
</start>
</config>
}
install_config $config
if {[have_board linux]} {
exec rm -rf [lx_local_tresor_image]
if { [get_cmd_switch --autopilot] } {
exec rm -rf [lx_autopilot_tresor_image]
catch { exec $dd if=/dev/urandom of=[lx_autopilot_tresor_image] bs=1M count=[lx_tresor_image_size_mb] }
exec ln -sf -T [lx_autopilot_tresor_image] [lx_local_tresor_image]
} else {
catch { exec $dd if=/dev/urandom of=[lx_local_tresor_image] bs=1M count=[lx_tresor_image_size_mb] }
}
}
set boot_modules [build_artifacts]
lappend_if [have_board linux] boot_modules [tresor_image_name]
build_boot_image $boot_modules
append qemu_args " -nographic "
set test_timeout 100
if {[benchmark_blk_count] > 0} {
set test_timeout 300
}
run_genode_until "child \"test\" exited with exit value.*\n" $test_timeout
if {[have_board linux]} {
if { [get_cmd_switch --autopilot] } {
exec rm -rf [lx_local_tresor_image]
exec rm -rf [lx_autopilot_tresor_image]
}
}
grep_output {\[init\] child "test" exited with exit value}
compare_output_to {[init] child "test" exited with exit value 0}