tests/docker: add a docker-exec-copy-test
This provides test machinery for checking the QEMU copying logic works properly. It takes considerably less time to run than starting a debootstrap only for it to fail later. I considered adding a remove command to docker.py but figured that might be gold plating given the relative size of the containers compared to the ones with actual stuff in them. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20210202134001.25738-7-alex.bennee@linaro.org>
This commit is contained in:
		
							parent
							
								
									6147c2495d
								
							
						
					
					
						commit
						ddd5ed8331
					
				@ -11,7 +11,7 @@ HOST_ARCH = $(if $(ARCH),$(ARCH),$(shell uname -m))
 | 
				
			|||||||
DOCKER_SUFFIX := .docker
 | 
					DOCKER_SUFFIX := .docker
 | 
				
			||||||
DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles
 | 
					DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles
 | 
				
			||||||
# we don't run tests on intermediate images (used as base by another image)
 | 
					# we don't run tests on intermediate images (used as base by another image)
 | 
				
			||||||
DOCKER_PARTIAL_IMAGES := debian10 debian11 debian-bootstrap
 | 
					DOCKER_PARTIAL_IMAGES := debian10 debian11 debian-bootstrap empty
 | 
				
			||||||
DOCKER_IMAGES := $(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker))))
 | 
					DOCKER_IMAGES := $(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker))))
 | 
				
			||||||
DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES))
 | 
					DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES))
 | 
				
			||||||
# Use a global constant ccache directory to speed up repetitive builds
 | 
					# Use a global constant ccache directory to speed up repetitive builds
 | 
				
			||||||
@ -92,6 +92,24 @@ docker-binfmt-image-debian-%: $(DOCKER_FILES_DIR)/debian-bootstrap.docker
 | 
				
			|||||||
			{ echo "You will need to build $(EXECUTABLE)"; exit 1;},\
 | 
								{ echo "You will need to build $(EXECUTABLE)"; exit 1;},\
 | 
				
			||||||
			"CHECK", "debian-$* exists"))
 | 
								"CHECK", "debian-$* exists"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# These are test targets
 | 
				
			||||||
 | 
					USER_TCG_TARGETS=$(patsubst %-linux-user,qemu-%,$(filter %-linux-user,$(TARGET_DIRS)))
 | 
				
			||||||
 | 
					EXEC_COPY_TESTS=$(patsubst %,docker-exec-copy-test-%, $(USER_TCG_TARGETS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(EXEC_COPY_TESTS): docker-exec-copy-test-%: $(DOCKER_FILES_DIR)/empty.docker
 | 
				
			||||||
 | 
						$(call quiet-command,							\
 | 
				
			||||||
 | 
							$(DOCKER_SCRIPT) build -t qemu/exec-copy-test-$* -f $< 		\
 | 
				
			||||||
 | 
								$(if $V,,--quiet) --no-cache 				\
 | 
				
			||||||
 | 
								--include-executable=$*					\
 | 
				
			||||||
 | 
								--skip-binfmt,						\
 | 
				
			||||||
 | 
								"TEST","copy $* to container")
 | 
				
			||||||
 | 
						$(call quiet-command,							\
 | 
				
			||||||
 | 
							$(DOCKER_SCRIPT) run qemu/exec-copy-test-$* 			\
 | 
				
			||||||
 | 
								/$* -version > tests/docker-exec-copy-test-$*.out,	\
 | 
				
			||||||
 | 
								"TEST","check $* works in container")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					docker-exec-copy-test: $(EXEC_COPY_TESTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Enforce dependencies for composite images
 | 
					# Enforce dependencies for composite images
 | 
				
			||||||
 | 
				
			|||||||
@ -438,6 +438,9 @@ class BuildCommand(SubCommand):
 | 
				
			|||||||
                            help="""Specify a binary that will be copied to the
 | 
					                            help="""Specify a binary that will be copied to the
 | 
				
			||||||
                            container together with all its dependent
 | 
					                            container together with all its dependent
 | 
				
			||||||
                            libraries""")
 | 
					                            libraries""")
 | 
				
			||||||
 | 
					        parser.add_argument("--skip-binfmt",
 | 
				
			||||||
 | 
					                            action="store_true",
 | 
				
			||||||
 | 
					                            help="""Skip binfmt entry check (used for testing)""")
 | 
				
			||||||
        parser.add_argument("--extra-files", nargs='*',
 | 
					        parser.add_argument("--extra-files", nargs='*',
 | 
				
			||||||
                            help="""Specify files that will be copied in the
 | 
					                            help="""Specify files that will be copied in the
 | 
				
			||||||
                            Docker image, fulfilling the ADD directive from the
 | 
					                            Docker image, fulfilling the ADD directive from the
 | 
				
			||||||
@ -466,7 +469,9 @@ class BuildCommand(SubCommand):
 | 
				
			|||||||
            docker_dir = tempfile.mkdtemp(prefix="docker_build")
 | 
					            docker_dir = tempfile.mkdtemp(prefix="docker_build")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Validate binfmt_misc will work
 | 
					            # Validate binfmt_misc will work
 | 
				
			||||||
            if args.include_executable:
 | 
					            if args.skip_binfmt:
 | 
				
			||||||
 | 
					                qpath = args.include_executable
 | 
				
			||||||
 | 
					            elif args.include_executable:
 | 
				
			||||||
                qpath, enabled = _check_binfmt_misc(args.include_executable)
 | 
					                qpath, enabled = _check_binfmt_misc(args.include_executable)
 | 
				
			||||||
                if not enabled:
 | 
					                if not enabled:
 | 
				
			||||||
                    return 1
 | 
					                    return 1
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								tests/docker/dockerfiles/empty.docker
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								tests/docker/dockerfiles/empty.docker
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Empty Dockerfile
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM scratch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add everything from the context into the container
 | 
				
			||||||
 | 
					ADD . /
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user