build "core init server/report_rom test/report_rom drivers/timer"

create_boot_directory

install_config {
	<config>
		<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>
		<start name="timer">
			<resource name="RAM" quantum="1M"/>
			<provides><service name="Timer"/></provides>
		</start>
		<start name="report_rom">
			<resource name="RAM" quantum="2M"/>
			<provides> <service name="ROM"/> <service name="Report"/> </provides>
			<config>
				<policy label_prefix="test-report_rom ->" label_suffix="brightness"
				       report="test-report_rom -> brightness"/>
			</config>
		</start>
		<start name="test-report_rom">
			<resource name="RAM" quantum="2M"/>
			<route>
				<service name="ROM">
					<if-arg key="label" value="brightness"/>
					<child name="report_rom"/>
				</service>
				<any-service> <parent/> <any-child/> </any-service>
			</route>
		</start>
	</config>
}

build_boot_image "core init timer report_rom test-report_rom"

append qemu_args "-nographic -m 128"

run_genode_until {child "test-report_rom" exited with exit value 0.*\n} 30

grep_output {^\[init -> test-report_rom}
unify_output {\[init \-\> test\-report_rom\] upgrading quota donation for .* \([0-9]+ bytes\)} ""
trim_lines

compare_output_to {
	[init -> test-report_rom] --- test-report_rom started ---
	[init -> test-report_rom] Reporter: open session
	[init -> test-report_rom] Reporter: brightness 10
	[init -> test-report_rom] ROM client: request brightness report
	[init -> test-report_rom]          -> <brightness brightness="10"/>
	[init -> test-report_rom]
	[init -> test-report_rom] Reporter: updated brightness to 77
	[init -> test-report_rom] ROM client: wait for update notification
	[init -> test-report_rom] ROM client: got signal
	[init -> test-report_rom] ROM client: request updated brightness report
	[init -> test-report_rom]          -> <brightness brightness="77"/>
	[init -> test-report_rom]
	[init -> test-report_rom] Reporter: close report session
	[init -> test-report_rom] ROM client: ROM is available despite report was closed - OK
	[init -> test-report_rom] Reporter: start reporting (while the ROM client still listens)
	[init -> test-report_rom] ROM client: wait for update notification
	[init -> test-report_rom] ROM client: try to open the same report again
	[init -> test-report_rom] ROM client: catched Parent::Service_denied - OK
	[init -> test-report_rom] --- test-report_rom finished ---
}