Merge "Add kelvin SW test target"
diff --git a/platforms/nexus/kelvin.mk b/platforms/nexus/kelvin.mk
index 61c2399..f5dc1be 100644
--- a/platforms/nexus/kelvin.mk
+++ b/platforms/nexus/kelvin.mk
@@ -3,6 +3,7 @@
 KELVIN_SW_SRC_DIR := $(ROOTDIR)/sw/kelvin
 KELVIN_SW_OUT_DIR := $(OUT)/kelvin/sw
 KELVIN_SW_BAZEL_OUT_DIR := $(KELVIN_SW_OUT_DIR)/bazel_out
+KELVIN_SW_TESTLOG_DIR := $(KELVIN_SW_OUT_DIR)/bazel_testlog
 
 KELVIN_SIM_SRC_DIR := $(ROOTDIR)/sim/kelvin
 KELVIN_SIM_OUT_DIR := $(OUT)/kelvin/sim
@@ -12,6 +13,9 @@
 	mkdir -p "$(KELVIN_SW_OUT_DIR)"
 	mkdir -p "$(KELVIN_SW_BAZEL_OUT_DIR)"
 
+$(KELVIN_SW_TESTLOG_DIR):
+	mkdir -p "$(KELVIN_SW_TESTLOG_DIR)"
+
 ## Build Kelvin SW artifacts
 #
 # Some of the artifacts are built with bazel, and need to be copied to out/
@@ -24,8 +28,16 @@
 			-wholename "*ST-*/*.bin" \) \
 			-exec cp -f {} "$(KELVIN_SW_BAZEL_OUT_DIR)/" \;
 
+## Test Kelvin SW artifacts
+#
+# Test Kelvin SW artifacts with kelvin ISS simulation
+kelvin_sw_test: kelvin_sim | $(KELVIN_SW_TESTLOG_DIR)
+	cd "$(KELVIN_SW_SRC_DIR)"; \
+		bazel test --test_env=ROOTDIR=$(ROOTDIR) //... ; \
+		cp -rf bazel-testlogs/tests "$(KELVIN_SW_TESTLOG_DIR)"
+
 ## Clean Kelvin SW artifacts
-kelvin_clean:
+kelvin_sw_clean:
 	rm -rf "$(KELVIN_SW_OUT_DIR)"
 	cd "$(KELVIN_SW_SRC_DIR)" && bazel clean --expunge
 
@@ -42,6 +54,13 @@
 	cd "$(KELVIN_SIM_SRC_DIR)/bazel-bin" && \
 		cp -f sim/kelvin_sim "$(KELVIN_SIM_OUT_DIR)"
 
+## Clean Kelvin ISS
+#
+# Clean the Kelvin ISS
+kelvin_sim_clean:
+	cd "$(KELVIN_SIM_SRC_DIR)" && \
+		bazel clean --expunge
+	rm -rf $(KELVIN_SIM_OUT_DIR)
 
-PHONY:: kelvin_sw kelvin_clean
-PHONY:: kelvin_sim
+PHONY:: kelvin_sw kelvin_sw_clean kelvin_sw_test
+PHONY:: kelvin_sim kelvin_sim_clean
diff --git a/platforms/shodan/kelvin.mk b/platforms/shodan/kelvin.mk
index 61c2399..f5dc1be 100644
--- a/platforms/shodan/kelvin.mk
+++ b/platforms/shodan/kelvin.mk
@@ -3,6 +3,7 @@
 KELVIN_SW_SRC_DIR := $(ROOTDIR)/sw/kelvin
 KELVIN_SW_OUT_DIR := $(OUT)/kelvin/sw
 KELVIN_SW_BAZEL_OUT_DIR := $(KELVIN_SW_OUT_DIR)/bazel_out
+KELVIN_SW_TESTLOG_DIR := $(KELVIN_SW_OUT_DIR)/bazel_testlog
 
 KELVIN_SIM_SRC_DIR := $(ROOTDIR)/sim/kelvin
 KELVIN_SIM_OUT_DIR := $(OUT)/kelvin/sim
@@ -12,6 +13,9 @@
 	mkdir -p "$(KELVIN_SW_OUT_DIR)"
 	mkdir -p "$(KELVIN_SW_BAZEL_OUT_DIR)"
 
+$(KELVIN_SW_TESTLOG_DIR):
+	mkdir -p "$(KELVIN_SW_TESTLOG_DIR)"
+
 ## Build Kelvin SW artifacts
 #
 # Some of the artifacts are built with bazel, and need to be copied to out/
@@ -24,8 +28,16 @@
 			-wholename "*ST-*/*.bin" \) \
 			-exec cp -f {} "$(KELVIN_SW_BAZEL_OUT_DIR)/" \;
 
+## Test Kelvin SW artifacts
+#
+# Test Kelvin SW artifacts with kelvin ISS simulation
+kelvin_sw_test: kelvin_sim | $(KELVIN_SW_TESTLOG_DIR)
+	cd "$(KELVIN_SW_SRC_DIR)"; \
+		bazel test --test_env=ROOTDIR=$(ROOTDIR) //... ; \
+		cp -rf bazel-testlogs/tests "$(KELVIN_SW_TESTLOG_DIR)"
+
 ## Clean Kelvin SW artifacts
-kelvin_clean:
+kelvin_sw_clean:
 	rm -rf "$(KELVIN_SW_OUT_DIR)"
 	cd "$(KELVIN_SW_SRC_DIR)" && bazel clean --expunge
 
@@ -42,6 +54,13 @@
 	cd "$(KELVIN_SIM_SRC_DIR)/bazel-bin" && \
 		cp -f sim/kelvin_sim "$(KELVIN_SIM_OUT_DIR)"
 
+## Clean Kelvin ISS
+#
+# Clean the Kelvin ISS
+kelvin_sim_clean:
+	cd "$(KELVIN_SIM_SRC_DIR)" && \
+		bazel clean --expunge
+	rm -rf $(KELVIN_SIM_OUT_DIR)
 
-PHONY:: kelvin_sw kelvin_clean
-PHONY:: kelvin_sim
+PHONY:: kelvin_sw kelvin_sw_clean kelvin_sw_test
+PHONY:: kelvin_sim kelvin_sim_clean