zephyr: Move testplan into sample Makefile

Instead of a bunch of patches that tend to become conflicting, use the
newly parameterized Makefile to make all of the test plans into make
targets.  Update the instructions to match this.

Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/samples/zephyr/Makefile b/samples/zephyr/Makefile
index a2b68b5..ecfd4b4 100644
--- a/samples/zephyr/Makefile
+++ b/samples/zephyr/Makefile
@@ -49,12 +49,16 @@
 
 BOARD ?=
 
+# We can override the Zephyr configuration for the bootloader by
+# setting this.
+BOOTLOADER_CONFIG ?=
+
 .PHONY: check boot hello1 clean_boot clean_hello1 \
 	hello2 clean_hello2 flash_boot flash_hello1 flash_hello2
 
 # For signing, use the default RSA demo key, to match the default in
 # the mcuboot Makefile.
-SIGNING_KEY = ../../root-rsa-2048.pem
+SIGNING_KEY ?= ../../root-rsa-2048.pem
 
 # The header size should match that in hello1/prj.conf
 # CONFIG_TEXT_SECTION_OFFSET.  This value needs to be a power of two
@@ -92,7 +96,7 @@
 
 boot: check
 	@rm -f mcuboot.bin
-	$(MAKE) -C ../.. BOARD=$(BOARD) -j$(nproc)
+	$(MAKE) -C ../.. BOARD=$(BOARD) -j$(nproc) $(BOOTLOADER_CONFIG)
 	cp ../../outdir/$(BOARD)/zephyr.bin mcuboot.bin
 
 clean_boot: check
@@ -133,6 +137,9 @@
 clean_hello2: check
 	rm -rf hello-world/outdir/hello2/$(BOARD)
 
+# These flash_* targets use pyocd to flash the images.  The addresses
+# are hardcoded at this time.
+
 flash_boot:
 	$(PYOCD_FLASHTOOL) -ce -a 0 mcuboot.bin
 
@@ -145,6 +152,139 @@
 flash_full:
 	$(PYOCD_FLASHTOOL) -ce -a 0 full.bin
 
+# These test- targets reinvoke make with the configuration set to test
+# various configurations.  This will generally be followed by using
+# the above flash targets.
+
+# Test a good image, with a good upgrade, using RSA signatures.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello2 runs
+# reset: hello1 runs
+test-good-rsa:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    all
+
+# Test a good image, with a good upgrade, using ECDSA signatures.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello2 runs
+# reset: hello1 runs
+test-good-ecdsa:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    all
+
+# Test (with RSA) that overwrite-only works.  This should boot,
+# upgrade correctly, but not revert once the upgrade has been done.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello2 runs
+# reset: hello2 runs
+test-overwrite:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_UPGRADE_ONLY=YES" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_UPGRADE_ONLY=YES" \
+	    all
+
+# Test that when configured for RSA, a wrong signature in the upgrade
+# image will fail to upgrade.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello1 runs
+# reset: hello1 runs
+test-bad-rsa-upgrade:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    boot hello1
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    hello2
+
+# Test that when configured for ECDSA, a wrong signature in the upgrade
+# image will fail to upgrade.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello1 runs
+# reset: hello1 runs
+test-bad-ecdsa-upgrade:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    boot hello1
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=../../root-rsa-2048.pem \
+	    hello2
+
+# Test that when configured to not validate slot0, we still boot, but
+# don't upgrade.
+# flash_boot: tries to boot and resets
+# flash_hello1: hello1 runs
+# flash_hello2: hello1 runs
+# reset: hello1 runs
+test-no-bootcheck:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_VALIDATE_SLOT0=NO" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_VALIDATE_SLOT0=NO" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    all
+
+# Test a good image, with a wrong-signature upgrade, using RSA signatures.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello1 runs
+# reset: hello1 runs
+test-wrong-rsa:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    boot hello1
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=RSA" \
+	    SIGNING_KEY=bad-keys/bad-rsa-2048.pem \
+	    hello2
+
+# Test a good image, with a wrong-signature upgrade, using ECDSA signatures.
+# flash_boot: Unable to find bootable image
+# flash_hello1: hello1 runs
+# flash_hello2: hello1 runs
+# reset: hello1 runs
+test-wrong-ecdsa:
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    clean
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=../../root-ec-p256.pem \
+	    boot hello1
+	$(MAKE) \
+	    BOOTLOADER_CONFIG="CONF_SIGNATURE_TYPE=ECDSA_P256" \
+	    SIGNING_KEY=bad-keys/bad-ec-p256.pem \
+	    hello2
+
 check:
 	@if [ -z "$$ZEPHYR_BASE" ]; then echo "Zephyr environment not set up"; false; fi
 	@if [ -z "$(BOARD)" ]; then echo "You must specify BOARD=<board>"; false; fi