193 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
#!/usr/bin/env bats
 | 
						|
 | 
						|
# This tests various expected error scenarios when pulling bad content
 | 
						|
 | 
						|
load helpers
 | 
						|
 | 
						|
host="localregistry:6666"
 | 
						|
base="malevolent-test"
 | 
						|
 | 
						|
function setup() {
 | 
						|
	tempImage $base:latest
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent proxy pass through" {
 | 
						|
	docker_t tag $base:latest $host/$base/nochange:latest
 | 
						|
	run docker_t push $host/$base/nochange:latest
 | 
						|
	echo $output
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	run docker_t pull $host/$base/nochange:latest
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent image name change" {
 | 
						|
	imagename="$host/$base/rename"
 | 
						|
	image="$imagename:lastest"
 | 
						|
	docker_t tag $base:latest $image
 | 
						|
	run docker_t push $image
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	# Pull attempt should fail to verify manifest digest
 | 
						|
	run docker_t pull "$imagename@$digest"
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -ne 0 ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent altered layer" {
 | 
						|
	image="$host/$base/addfile:latest"
 | 
						|
	tempImage $image
 | 
						|
	run docker_t push $image
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	# Remove image to ensure layer is pulled and digest verified
 | 
						|
	docker_t rmi -f $image
 | 
						|
 | 
						|
	run docker_t pull $image
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -ne 0 ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent altered layer (by digest)" {
 | 
						|
	imagename="$host/$base/addfile"
 | 
						|
	image="$imagename:latest"
 | 
						|
	tempImage $image
 | 
						|
	run docker_t push $image
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	# Remove image to ensure layer is pulled and digest verified
 | 
						|
	docker_t rmi -f $image
 | 
						|
 | 
						|
	run docker_t pull "$imagename@$digest"
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -ne 0 ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent poisoned images" {
 | 
						|
        truncid="777cf9284131"
 | 
						|
	poison="${truncid}d77ca0863fb7f054c0a276d7e227b5e9a5d62b497979a481fa32"
 | 
						|
	image1="$host/$base/image1/poison:$poison"
 | 
						|
	tempImage $image1
 | 
						|
	run docker_t push $image1
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	image2="$host/$base/image2/poison:$poison"
 | 
						|
	tempImage $image2
 | 
						|
	run docker_t push $image2
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
 | 
						|
	# Remove image to ensure layer is pulled and digest verified
 | 
						|
	docker_t rmi -f $image1
 | 
						|
	docker_t rmi -f $image2
 | 
						|
 | 
						|
	run docker_t pull $image1
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	run docker_t pull $image2
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
 | 
						|
	# Test if there are multiple images
 | 
						|
	run docker_t images
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
 | 
						|
	# Test images have same ID and not the poison
 | 
						|
	id1=$(docker_t inspect --format="{{.Id}}" $image1)
 | 
						|
	id2=$(docker_t inspect --format="{{.Id}}" $image2)
 | 
						|
 | 
						|
	# Remove old images
 | 
						|
	docker_t rmi -f $image1
 | 
						|
	docker_t rmi -f $image2
 | 
						|
 | 
						|
	[ "$id1" != "$id2" ]
 | 
						|
 | 
						|
	[ "$id1" != "$truncid" ]
 | 
						|
 | 
						|
	[ "$id2" != "$truncid" ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent altered identical images" {
 | 
						|
        truncid1="777cf9284131"
 | 
						|
	poison1="${truncid1}d77ca0863fb7f054c0a276d7e227b5e9a5d62b497979a481fa32"
 | 
						|
        truncid2="888cf9284131"
 | 
						|
	poison2="${truncid2}d77ca0863fb7f054c0a276d7e227b5e9a5d62b497979a481fa64"
 | 
						|
 | 
						|
	image1="$host/$base/image1/alteredid:$poison1"
 | 
						|
	tempImage $image1
 | 
						|
	run docker_t push $image1
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	image2="$host/$base/image2/alteredid:$poison2"
 | 
						|
	docker_t tag $image1 $image2
 | 
						|
	run docker_t push $image2
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
 | 
						|
	# Remove image to ensure layer is pulled and digest verified
 | 
						|
	docker_t rmi -f $image1
 | 
						|
	docker_t rmi -f $image2
 | 
						|
 | 
						|
	run docker_t pull $image1
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	run docker_t pull $image2
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
 | 
						|
	# Test if there are multiple images
 | 
						|
	run docker_t images
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
 | 
						|
	# Test images have same ID and not the poison
 | 
						|
	id1=$(docker_t inspect --format="{{.Id}}" $image1)
 | 
						|
	id2=$(docker_t inspect --format="{{.Id}}" $image2)
 | 
						|
 | 
						|
	# Remove old images
 | 
						|
	docker_t rmi -f $image1
 | 
						|
	docker_t rmi -f $image2
 | 
						|
 | 
						|
	[ "$id1" == "$id2" ]
 | 
						|
 | 
						|
	[ "$id1" != "$truncid1" ]
 | 
						|
 | 
						|
	[ "$id2" != "$truncid2" ]
 | 
						|
}
 | 
						|
 | 
						|
@test "Test malevolent resumeable pull" {
 | 
						|
	version_check docker "$GOLEM_DIND_VERSION" "1.11.0"
 | 
						|
	version_check registry "$GOLEM_DISTRIBUTION_VERSION" "2.3.0"
 | 
						|
 | 
						|
	imagename="$host/$base/resumeable"
 | 
						|
	image="$imagename:latest"
 | 
						|
	tempImage $image
 | 
						|
	run docker_t push $image
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
	has_digest "$output"
 | 
						|
 | 
						|
	# Remove image to ensure layer is pulled and digest verified
 | 
						|
	docker_t rmi -f $image
 | 
						|
 | 
						|
	run docker_t pull "$imagename@$digest"
 | 
						|
	echo "$output"
 | 
						|
	[ "$status" -eq 0 ]
 | 
						|
}
 |