xbps-rindex: add test to trigger stage deadlock
This commit is contained in:
		@@ -108,9 +108,68 @@ stage_body() {
 | 
			
		||||
	atf_check_equal $? 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
atf_test_case stage_resolve_bug
 | 
			
		||||
 | 
			
		||||
stage_resolve_bug_head() {
 | 
			
		||||
	atf_set "descr" "xbps-rindex(8) -a: commit package to stage test"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stage_resolve_bug_body() {
 | 
			
		||||
	# Scanario: provides a shlib, then it is moved (for example for splitting the
 | 
			
		||||
	# pkg) to libprovider. afterwards requirer is added resulting in
 | 
			
		||||
	mkdir provider libprovider requirer stage-trigger some_repo
 | 
			
		||||
	touch provider/1 libprovider/2 requirer/3 stage-trigger/4
 | 
			
		||||
	cd some_repo
 | 
			
		||||
 | 
			
		||||
	# first add the provider and the requirer to the repo
 | 
			
		||||
	xbps-create -A noarch -n provider-1.0_1 -s "foo pkg" --shlib-provides "libfoo.so.1 libbar.so.1" ../provider
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-create -A noarch -n require-1.0_1 -s "foo pkg" --shlib-requires "libfoo.so.1" ../requirer
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-create -A noarch -n stage-trigger-1.0_1 -s "foo pkg" --shlib-requires "libbar.so.1" ../stage-trigger
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-rindex -d -a $PWD/*.xbps
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
 | 
			
		||||
	# then add libprovider that also provides the library
 | 
			
		||||
	xbps-create -A noarch -n libprovider-1.0_2 -s "foo pkg" --shlib-provides "libfoo.so.1" ../libprovider
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-rindex -d -a $PWD/*.xbps
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	[ -f *-stagedata ]
 | 
			
		||||
	atf_check_equal $? 1
 | 
			
		||||
 | 
			
		||||
	# trigger staging
 | 
			
		||||
	xbps-create -A noarch -n provider-1.0_2 -s "foo pkg" --shlib-provides "libfoo.so.1" ../provider
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-rindex -d -a $PWD/*.xbps
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	[ -f *-stagedata ]
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
 | 
			
		||||
	# then add a new provider not containing the provides field. This resulted in
 | 
			
		||||
	# a stage state despites the library is resolved through libprovides
 | 
			
		||||
	xbps-create -A noarch -n provider-1.0_3 -s "foo pkg" ../provider
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-rindex -d -a $PWD/*.xbps
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	[ -f *-stagedata ]
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
 | 
			
		||||
	# resolve staging
 | 
			
		||||
	# the actual bug appeared here: libfoo.so.1 is still provided by libprovider, but
 | 
			
		||||
	# xbps-rindex fails to register that.
 | 
			
		||||
	xbps-create -A noarch -n stage-trigger-1.0_2 -s "foo pkg" ../stage-trigger
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	xbps-rindex -d -a $PWD/*.xbps
 | 
			
		||||
	atf_check_equal $? 0
 | 
			
		||||
	[ -f *-stagedata ]
 | 
			
		||||
	atf_check_equal $? 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
atf_init_test_cases() {
 | 
			
		||||
	atf_add_test_case update
 | 
			
		||||
	atf_add_test_case revert
 | 
			
		||||
	atf_add_test_case stage
 | 
			
		||||
	atf_add_test_case stage_resolve_bug
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user