This patch does more than what the title suggests and ideally should be split in at least 2 parts. But it would require substantial amount of work to untangle those and more importantly re-test at this point.
So firstly, this patch modifies makefiles and module.py files of java related modules and others like golang that include modules/java-base/common.gmk to make it possible to build on aarch64 host. It achieves it mostly by including modules/common.gmk which provides necessary rules for compiling on both x64 and aarch64 hosts as well as cross-compiling aarch64 on x64 host. This also removes a lot of repeated boiler plate and makes many changed makefiles more consistent with each other. Finally all build artifacts like object files are output to ./build/<release|debug>.[arch]/modules/[module] directories instead of modules/[module]. Secondly, this patch also modifies the build process to dynamically determine which jdk to use and which java tests to run. Therefore new version of modules/java/module.py detects which version of java (8 or 9 and above) is in the PATH and accordingly selects openjdk8-from-host or openjdk9_1x-from-host. In addition, we also make java-tests makefile generate list of java tests to be executed when test.py is run. This is necessary because our java "wrapper" mechanism is no longer compatible with Java 9 and above and we need to filter out java-isolated and java-non-isolated tests. New version of test.py simply reads list of java tests to be executed from modules/java-tests/test_commands, generated during build time. Signed-off-by: Waldemar Kozaczuk <[email protected]> --- modules/cloud-init/Makefile | 43 ++++----- modules/cloud-init/module.py | 1 - modules/golang/Makefile | 27 +++--- modules/httpserver-jolokia-plugin/.gitignore | 1 + modules/httpserver-jolokia-plugin/Makefile | 67 ++++---------- modules/httpserver-jolokia-plugin/module.py | 1 - modules/java-base/Makefile | 19 ++-- modules/java-base/common.gmk | 38 +++----- modules/java-base/java.cc | 4 + modules/java-base/usr.manifest | 2 +- modules/java-isolated/Makefile | 25 +++-- modules/java-isolated/usr.manifest | 2 +- modules/java-non-isolated/Makefile | 27 +++--- modules/java-non-isolated/usr.manifest | 2 +- modules/java-tests/.gitignore | 1 + modules/java-tests/Makefile | 91 +++++++++++++------ modules/java-tests/module.py | 25 +++-- modules/java-tests/tests-for-java9_1x/pom.xml | 64 +++++++++++++ .../src/main/java/io/osv/BasicTest.java | 1 + .../src/main/java/io/osv/BasicTests.java | 1 + .../java/io/osv/TemporarySecurityManager.java | 1 + .../java/io/osv/TestDomainPermissions.java | 1 + modules/java-tests/usr.manifest | 11 --- modules/java/module.py | 10 +- modules/josvsym/Makefile | 52 ++++------- modules/tests/module.py | 3 +- scripts/test.py | 26 +++--- 27 files changed, 293 insertions(+), 253 deletions(-) create mode 100644 modules/httpserver-jolokia-plugin/.gitignore create mode 100644 modules/java-tests/.gitignore create mode 100644 modules/java-tests/tests-for-java9_1x/pom.xml create mode 120000 modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTest.java create mode 120000 modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTests.java create mode 120000 modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TemporarySecurityManager.java create mode 120000 modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TestDomainPermissions.java delete mode 100644 modules/java-tests/usr.manifest diff --git a/modules/cloud-init/Makefile b/modules/cloud-init/Makefile index 5500042b..e2dbb27b 100644 --- a/modules/cloud-init/Makefile +++ b/modules/cloud-init/Makefile @@ -1,51 +1,46 @@ -SRC = $(shell readlink -f ../..) -include $(SRC)/modules/java-base/common.gmk +include ../common.gmk -autodepend = -MD -MT $@ -MP -CXXFLAGS = -g -rdynamic -Wall -std=c++11 -fPIC $(INCLUDES) $(autodepend) -src = $(SRC) -arch = x64 +module_out := $(out)/modules/cloud-init + +CXXFLAGS = -g -rdynamic -Wall -std=c++11 -fPIC $(COMMON) boost-libs := -lboost_system -lboost_filesystem -HTTPSERVER_API_DIR = ../../modules/httpserver-api -INCLUDES += -I$(HTTPSERVER_API_DIR) +HTTPSERVER_API_DIR = $(out)/modules/httpserver-api +INCLUDES += -I../httpserver-api # the build target executable: TARGET = cloud-init CPP_FILES := client.cc cloud-init.cc data-source.cc main.cc template.cc cassandra-module.cc json.cc -OBJ_FILES := $(addprefix obj/,$(CPP_FILES:.cc=.o)) +OBJ_FILES := $(addprefix $(module_out)/,$(CPP_FILES:.cc=.o)) DEPS := $(OBJ_FILES:.o=.d) STUB_HTTPSERVER_LIBS = $(HTTPSERVER_API_DIR)/httpserver-stub.so LIBS = -lpthread $(boost-libs) $(DEPEDNDS_LIBS) -lyaml-cpp -L$(HTTPSERVER_API_DIR)/ -lhttpserver-api -quiet = $(if $V, $1, @echo " $2"; $1) -very-quiet = $(if $V, $1, @$1) - - module: all -all: init $(TARGET).so tst-template +all: init $(module_out)/$(TARGET).so $(module_out)/tst-template init: - $(call very-quiet, mkdir -p obj) + $(call very-quiet, mkdir -p $(module_out)) -tst-template: template.cc tst-template.cc - $(call quiet, $(CXX) -g -Wall -std=c++11 -o $@ $^ -lboost_unit_test_framework -DBOOST_TEST_DYN_LINK, LINK $@) +$(module_out)/tst-template: template.cc tst-template.cc + $(call quiet, $(CXX) -g -Wall -std=c++11 $(LDFLAGS) -o $@ $^ -lboost_unit_test_framework -DBOOST_TEST_DYN_LINK, LINK $@) -$(TARGET): $(OBJ_FILES) - $(call quiet, $(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LIBS) $(STUB_HTTPSERVER_LIBS), LINK $@) +$(module_out)/$(TARGET): $(OBJ_FILES) + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) $(module_out)/-o $(TARGET) $^ $(LIBS) $(STUB_HTTPSERVER_LIBS), LINK $@) -$(TARGET).so: $(OBJ_FILES) - $(call quiet, $(CXX) $(CXXFLAGS) $(STATIC_LIBS) -shared -o $(TARGET).so $^ $(LIBS), LINK $@) +$(module_out)/$(TARGET).so: $(OBJ_FILES) + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) $(STATIC_LIBS) -shared -o $(module_out)/$(TARGET).so $^ $(LIBS), LINK $@) + echo '/usr/mgmt/cloud-init.so: ./modules/cloud-init/cloud-init.so' > usr.manifest -obj/%.o: %.cc +$(module_out)/%.o: %.cc $(call quiet, $(CXX) $(CXXFLAGS) -c -o $@ $<, CXX $@) clean: - $(call quiet, $(RM) -f $(TARGET).so tst-template, CLEAN) - $(call very-quiet, $(RM) -rf obj) + $(call quiet, $(RM) -f $(module_out)/$(TARGET).so $(module_out)/tst-template, CLEAN) + $(call very-quiet, $(RM) -rf $(module_out)) ifneq ($(MAKECMDGOALS),clean) -include $(DEPS) diff --git a/modules/cloud-init/module.py b/modules/cloud-init/module.py index c544742a..8b5562bb 100644 --- a/modules/cloud-init/module.py +++ b/modules/cloud-init/module.py @@ -6,7 +6,6 @@ from osv.modules import api _module = '${OSV_BASE}/modules/cloud-init' usr_files = FileMap() -usr_files.add(os.path.join(_module, 'cloud-init.so')).to('/usr/mgmt/cloud-init.so') usr_files.add(os.path.join(_module, 'cloud-init.yaml')).to('/usr/mgmt/cloud-init.yaml') usr_files.add(os.path.join(_module, 'cmdline')).to('/init/00-cmdline') diff --git a/modules/golang/Makefile b/modules/golang/Makefile index 435895ee..11388b63 100644 --- a/modules/golang/Makefile +++ b/modules/golang/Makefile @@ -1,32 +1,29 @@ -SRC = $(shell readlink -f ../..) -include $(SRC)/modules/java-base/common.gmk +include ../common.gmk -autodepend = -MD -MT $@ -MP -CXXFLAGS = -g -rdynamic -Wall -std=c++11 -fPIC $(INCLUDES) $(autodepend) +module_out := $(out)/modules/golang + +CXXFLAGS = -g -rdynamic -Wall -std=c++11 -fPIC $(COMMON) # the build target executable: TARGET = go CPP_FILES := $(TARGET).cc -OBJ_FILES := $(addprefix obj/,$(CPP_FILES:.cc=.o)) +OBJ_FILES := $(addprefix $(module_out)/,$(CPP_FILES:.cc=.o)) DEPS := $(OBJ_FILES:.o=.d) -quiet = $(if $V, $1, @echo " $2"; $1) -very-quiet = $(if $V, $1, @$1) - -$(TARGET).so: $(OBJ_FILES) - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $(TARGET).so $^ $(LIBS), LINK $@) +$(module_out)/$(TARGET).so: $(OBJ_FILES) + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $(module_out)/$(TARGET).so $^ $(LIBS), LINK $@) -obj/%.o: %.cc +$(module_out)/%.o: %.cc $(call quiet, $(CXX) $(CXXFLAGS) -c -o $@ $<, CXX $@) init: @echo " MKDIRS" - $(call very-quiet, mkdir -p obj) + $(call very-quiet, mkdir -p $(module_out)) .PHONY: init -module: init $(TARGET).so - echo '/go.so: $${MODULE_DIR}/go.so' > usr.manifest +module: init $(module_out)/$(TARGET).so + echo '/go.so: ./modules/golang/go.so' > usr.manifest clean: rm -f $(TARGET)*.so usr.manifest - $(call very-quiet, $(RM) -rf obj) + $(call very-quiet, $(RM) -rf $(module_out)) diff --git a/modules/httpserver-jolokia-plugin/.gitignore b/modules/httpserver-jolokia-plugin/.gitignore new file mode 100644 index 00000000..f9235a6b --- /dev/null +++ b/modules/httpserver-jolokia-plugin/.gitignore @@ -0,0 +1 @@ +usr.manifest diff --git a/modules/httpserver-jolokia-plugin/Makefile b/modules/httpserver-jolokia-plugin/Makefile index 6c324954..1e927305 100644 --- a/modules/httpserver-jolokia-plugin/Makefile +++ b/modules/httpserver-jolokia-plugin/Makefile @@ -1,75 +1,48 @@ -SRC = $(shell readlink -f ../..) -include $(SRC)/modules/java-base/common.gmk +include ../common.gmk + +module_out := $(out)/modules/httpserver-jolokia-plugin INCLUDES += -I. -I../httpserver-api +jdkbase = $(dir $(shell readlink -f $$(which javac)))/.. +INCLUDES += -I$(jdkbase)/include -I$(jdkbase)/include/linux + # compiler flags: # -g adds debugging information to the executable file # -Wall turns on most, but not all, compiler warnings -autodepend = -MD -MT $@ -MP -CXXFLAGS = -g -Wall -std=c++11 -fPIC $(INCLUDES) -O2 $(autodepend) -src = $(shell readlink -f ../..) +CXXFLAGS = -g -Wall -std=c++11 -fPIC $(COMMON) -O2 CODE_GEN_FROM_JSON := ../httpserver-api/json2code.py -RM := /bin/rm - -ifndef ARCH - ARCH = x64 -endif - -ifndef mode - mode = release -endif - -ifndef OSV_BUILD_PATH - OSV_BUILD_PATH = $(src)/build/$(mode).$(ARCH) -endif # the build target executable: TARGET = jolokia JSON_FILES := $(wildcard api-doc/listings/*.json) JSON_CC_FILES := $(subst .json,.json.cc,$(subst api-doc/listings/,autogen/,$(JSON_FILES))) CPP_FILES := $(JSON_CC_FILES) $(wildcard *.cc) -OBJ_FILES := $(addprefix obj/,$(CPP_FILES:.cc=.o)) - -# link with -mt if present, else the base version (and hope it is multithreaded) -boost-mt := -mt -boost-lib-dir := $(dir $(shell $(CC) --print-file-name libboost_system$(boost-mt).a)) -ifeq ($(filter /%,$(boost-lib-dir)),) - boost-mt := - boost-lib-dir := $(dir $(shell $(CC) --print-file-name libboost_system$(boost-mt).a)) - ifeq ($(filter /%,$(boost-lib-dir)),) - $(error Error: libboost_system.a needs to be installed.) - endif -endif - -STATIC_LIBS = $(boost-lib-dir)/libboost_program_options$(boost-mt).a -DYN_LIBS = -lpthread -ldl -L$(libs-dir) -lyaml-cpp $(boost-libs) +OBJ_FILES := $(addprefix $(module_out)/,$(CPP_FILES:.cc=.o)) +DYN_LIBS = -lpthread -ldl -lyaml-cpp DYN_LIBS += -lssl -lcrypto LIBS = $(DYN_LIBS) $(STATIC_LIBS) -quiet = $(if $V, $1, @echo " $2"; $1) -very-quiet = $(if $V, $1, @$1) - DEPS := $(OBJ_FILES:.o=.d) module: all + echo '/usr/mgmt/plugins/jolokia.so: ./modules/httpserver-jolokia-plugin/jolokia.so' > usr.manifest -all: $(TARGET).so +all: $(module_out)/$(TARGET).so cd jolokia-agent && mvn -q package -DskipTests=true init: @echo " MKDIRS" - $(call very-quiet, mkdir -p obj) - $(call very-quiet, mkdir -p obj/json) - $(call very-quiet, mkdir -p obj/api) - $(call very-quiet, mkdir -p obj/autogen) + $(call very-quiet, mkdir -p $(module_out)/json) + $(call very-quiet, mkdir -p $(module_out)/api) + $(call very-quiet, mkdir -p $(module_out)/autogen) $(call very-quiet, mkdir -p autogen) .PHONY: init -$(TARGET).so: $(OBJ_FILES) - $(call quiet, $(CXX) $(CXXFLAGS) -shared $(STATIC_LIBS) -o $@ $^ $(DYN_LIBS), LINK $@) +$(module_out)/$(TARGET).so: $(OBJ_FILES) + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(STATIC_LIBS) -o $@ $^ $(DYN_LIBS), LINK $@) ifneq ($(MAKECMDGOALS),clean) -include $(DEPS) @@ -78,17 +51,17 @@ endif autogen/%.cc: api-doc/listings/% $(CODE_GEN_FROM_JSON) | init $(call quiet,./$(CODE_GEN_FROM_JSON) -f $< -ns json, GEN $@) -obj/%.o: %.cc | init +$(module_out)/%.o: %.cc | init $(call quiet, $(CXX) $(CXXFLAGS) -c -MMD -o $@ $<, CXX $@) # jolokia.cc depends on autogen/jolokia.json.hh, which needs to be # auto-generated before jolokia.cc is compiled -obj/jolokia.o: autogen/jolokia.json.cc +$(module_out)/jolokia.o: autogen/jolokia.json.cc clean: - $(call quiet, $(RM) -f $(TARGET).so, CLEAN) + $(call quiet, $(RM) -f $(module_out)/$(TARGET).so, CLEAN) $(call very-quiet, $(RM) -f usr.manifest) - $(call very-quiet, $(RM) -rf obj) + $(call very-quiet, $(RM) -rf $(module_out)) $(call very-quiet, $(RM) -rf autogen) cd jolokia-agent && mvn -q clean -rm -f dependency-reduced-pom.xml diff --git a/modules/httpserver-jolokia-plugin/module.py b/modules/httpserver-jolokia-plugin/module.py index 34f8c003..aa6ef1d7 100644 --- a/modules/httpserver-jolokia-plugin/module.py +++ b/modules/httpserver-jolokia-plugin/module.py @@ -6,6 +6,5 @@ from osv.modules import api _module = '${OSV_BASE}/modules/httpserver-jolokia-plugin' usr_files = FileMap() -usr_files.add(os.path.join(_module, 'jolokia.so')).to('/usr/mgmt/plugins/jolokia.so') usr_files.add(os.path.join(_module, 'api-doc/listings/jolokia.json')).to('/usr/mgmt/api/listings/jolokia.json') usr_files.add(os.path.join(_module, 'jolokia-agent/target/jolokia-agent.jar')).to('/usr/mgmt/jolokia-agent.jar') diff --git a/modules/java-base/Makefile b/modules/java-base/Makefile index 5f4d79b0..6f2e3783 100644 --- a/modules/java-base/Makefile +++ b/modules/java-base/Makefile @@ -1,10 +1,11 @@ +include ../common.gmk + +module_out := $(out)/modules/java-base +export module_out + include common.gmk -ifeq ($(arch),aarch64) -java-targets := -else -java-targets := obj/jni/monitor.so obj/jvm/jni_helpers.o obj/jvm/java_api.o obj/balloon/jvm_balloon.o -endif +java-targets := $(module_out)/jni/monitor.so $(module_out)/jvm/jni_helpers.o $(module_out)/jvm/java_api.o $(module_out)/balloon/jvm_balloon.o module: all @@ -12,10 +13,10 @@ all: $(init) $(java-targets) init: @echo " MKDIRS" - $(call very-quiet, mkdir -p obj/jni) - $(call very-quiet, mkdir -p obj/jvm) - $(call very-quiet, mkdir -p obj/balloon) + $(call very-quiet, mkdir -p $(module_out)/jni) + $(call very-quiet, mkdir -p $(module_out)/jvm) + $(call very-quiet, mkdir -p $(module_out)/balloon) .PHONY: init clean: - $(call very-quiet, $(RM) -rf obj) + $(call very-quiet, $(RM) -rf $(module_out)) diff --git a/modules/java-base/common.gmk b/modules/java-base/common.gmk index 3d0a1c98..4aede214 100644 --- a/modules/java-base/common.gmk +++ b/modules/java-base/common.gmk @@ -1,45 +1,29 @@ jdkbase = $(dir $(shell readlink -f $$(which javac)))/.. -INCLUDES = -I$(src)/arch/$(arch) -I$(src) -I$(src)/include -I$(src)/arch/common -INCLUDES += -I$(src)/include/glibc-compat -INCLUDES += $(shell $(CXX) -E -xc++ - -v </dev/null 2>&1 | awk '/^End/ {exit} /^ .*c\+\+/ {print "-isystem" $$0}') -INCLUDES += -isystem $(src)/include/api -INCLUDES += -isystem $(src)/include/api/$(arch) -INCLUDES += -I$(src)/build/$(mode)/gen/include INCLUDES += -I$(src)/java INCLUDES += -I$(jdkbase)/include -I$(jdkbase)/include/linux -autodepend = -MD -MT $@ -MP -COMMON_FLAGS = -g -Wall -fPIC $(INCLUDES) -O2 $(autodepend) -DCONF_debug_memory=0 -D_KERNEL -CXXFLAGS = -std=c++11 $(COMMON_FLAGS) -CFLAGS = -std=gnu99 $(COMMON_FLAGS) +COMMON += -g -Wall -fPIC -O2 -DCONF_debug_memory=0 -D_KERNEL -src = $(shell readlink -f ../..) -java-base-path := $(src)/modules/java-base - -RM := /bin/rm +CXXFLAGS = -std=c++11 $(COMMON) +CFLAGS = -std=gnu99 $(COMMON) -ifndef arch - arch = x64 -endif +java-base-path := $(src)/modules/java-base -ifndef mode - mode = release -endif +javac_exe_path = $(shell realpath $$(which javac)) +javac_bin_path = $(shell dirname $(javac_exe_path)) +java_jdk_path = $(shell dirname $(javac_bin_path)) configuration-defines = conf-preempt conf-debug_memory conf-logger_debug configuration = $(foreach cf,$(configuration-defines), \ -D$(cf:conf-%=CONF_%)=$($(cf))) -quiet = $(if $V, $1, @echo " $2"; $1) -very-quiet = $(if $V, $1, @$1) - -obj/%.o: %.cc | init +$(module_out)/%.o: %.cc | init $(call quiet, $(CXX) $(CXXFLAGS) -c -MMD -o $@ $<, CXX $@) -obj/%.o: %.c | init +$(module_out)/%.o: %.c | init $(call quiet, $(CC) $(CFLAGS) -c -MMD -o $@ $<, CC $@) -%.so: %.o - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^, LINK $@) +$(module_out)/%.so: %.o | init + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $^, LINK $@) diff --git a/modules/java-base/java.cc b/modules/java-base/java.cc index 08a60965..1c4d6e35 100644 --- a/modules/java-base/java.cc +++ b/modules/java-base/java.cc @@ -29,7 +29,11 @@ extern size_t jvm_heap_size; // sets up the class path, and runs the jar or class specified in these // parameters. +#ifdef __aarch64__ +#define JVM_PATH "/usr/lib/jvm/jre/lib/aarch64/server/libjvm.so" +#else #define JVM_PATH "/usr/lib/jvm/jre/lib/amd64/server/libjvm.so" +#endif #define JVM9_PATH "/usr/lib/jvm/java/lib/server/libjvm.so" #if defined(RUN_JAVA_NON_ISOLATED) diff --git a/modules/java-base/usr.manifest b/modules/java-base/usr.manifest index b7da9091..af75ce93 100644 --- a/modules/java-base/usr.manifest +++ b/modules/java-base/usr.manifest @@ -6,4 +6,4 @@ # [manifest] -/usr/lib/jni/monitor.so: ${MODULE_DIR}/obj/jni/monitor.so +/usr/lib/jni/monitor.so: ./modules/java-base/jni/monitor.so diff --git a/modules/java-isolated/Makefile b/modules/java-isolated/Makefile index 245065c2..a5813ec6 100644 --- a/modules/java-isolated/Makefile +++ b/modules/java-isolated/Makefile @@ -1,24 +1,23 @@ -SRC = $(shell readlink -f ../..) +include ../common.gmk -include $(SRC)/modules/java-base/common.gmk +module_out := $(out)/modules/java-isolated +export module_out -ifeq ($(arch),aarch64) -java-targets := -else -java-targets := obj/java.so -endif +include ../java-base/common.gmk + +java-targets := $(module_out)/java.so jar-targets := $(java-base-path)/runjava-isolated/target/runjava-isolated.jar -obj/java.o: $(java-base-path)/java.cc | init +$(module_out)/java.o: $(java-base-path)/java.cc | init $(call quiet, $(CXX) $(CXXFLAGS) -o $@ -c $(java-base-path)/java.cc -MMD, CXX $@) -obj/java.so: obj/java.o $(java-base-path)/obj/jvm/java_api.o $(java-base-path)/obj/jvm/jni_helpers.o $(java-base-path)/obj/balloon/jvm_balloon.o - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^, LINK $@) +$(module_out)/java.so: $(module_out)/java.o $(out)/modules/java-base/jvm/java_api.o $(out)/modules/java-base/jvm/jni_helpers.o $(out)/modules/java-base/balloon/jvm_balloon.o + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $^, LINK $@) init: @echo " MKDIRS" - $(call very-quiet, mkdir -p obj) + $(call very-quiet, mkdir -p $(module_out)) comma := , @@ -29,11 +28,11 @@ $(jar-targets): $(wildcard $(java-base-path)/runjava-isolated/src/main/java/io/o $(wildcard $(java-base-path)/runjava-common/src/main/java/io/osv/util/*.java) \ $(java-base-path)/pom.xml $(java-base-path)/runjava-common/pom.xml \ $(java-base-path)/runjava-isolated/pom.xml - $(call quiet, cd $(java-base-path) && mvn -q --projects :runjava-common$(comma):runjava-isolated package -DskipTests=true, MVN $@) + $(call quiet, cd $(java-base-path) && JAVA_HOME=$(java_jdk_path) mvn -q --projects :runjava-common$(comma):runjava-isolated package -DskipTests=true, MVN $@) module: $(java-targets) $(jar-targets) clean: cd $(java-base-path) && mvn -q clean -rm -f dependency-reduced-pom.xml - $(call very-quiet, $(RM) -rf obj) + $(call very-quiet, $(RM) -rf $(module_out)) diff --git a/modules/java-isolated/usr.manifest b/modules/java-isolated/usr.manifest index c98ba62d..8a789412 100644 --- a/modules/java-isolated/usr.manifest +++ b/modules/java-isolated/usr.manifest @@ -6,6 +6,6 @@ # [manifest] -/java.so: ${MODULE_DIR}/obj/java.so +/java.so: ./modules/java-isolated/java.so /java/runjava-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-isolated/target/runjava-isolated.jar /.java.policy: ${MODULE_DIR}/.java.policy diff --git a/modules/java-non-isolated/Makefile b/modules/java-non-isolated/Makefile index 7d229887..177dbb6e 100644 --- a/modules/java-non-isolated/Makefile +++ b/modules/java-non-isolated/Makefile @@ -1,25 +1,24 @@ -SRC = $(shell readlink -f ../..) +include ../common.gmk -include $(SRC)/modules/java-base/common.gmk +module_out := $(out)/modules/java-non-isolated +export module_out -ifeq ($(arch),aarch64) -java-targets := -else -java-targets := obj/java_non_isolated.so -endif +include ../java-base/common.gmk + +java-targets := $(module_out)/java_non_isolated.so jar-targets := $(java-base-path)/runjava-non-isolated/target/runjava-non-isolated.jar -obj/java_non_isolated.o: $(java-base-path)/java.cc | init +$(module_out)/java_non_isolated.o: $(java-base-path)/java.cc | init $(call quiet, $(CXX) $(CXXFLAGS) -DRUN_JAVA_NON_ISOLATED -o $@ -c $(java-base-path)/java.cc -MMD, CXX $@) -obj/java_non_isolated.so: obj/java_non_isolated.o $(java-base-path)/obj/jvm/java_api.o \ - $(java-base-path)/obj/jvm/jni_helpers.o $(java-base-path)/obj/balloon/jvm_balloon.o - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^, LINK $@) +$(module_out)/java_non_isolated.so: $(module_out)/java_non_isolated.o $(out)/modules/java-base/jvm/java_api.o \ + $(out)/modules/java-base/jvm/jni_helpers.o $(out)/modules/java-base/balloon/jvm_balloon.o + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $^, LINK $@) init: @echo " MKDIRS" - $(call very-quiet, mkdir -p obj) + $(call very-quiet, mkdir -p $(module_out)) comma := , @@ -28,11 +27,11 @@ $(jar-targets): $(wildcard $(java-base-path)/runjava-non-isolated/src/main/java/ $(wildcard $(java-base-path)/runjava-common/src/main/java/io/osv/util/*.java) \ $(java-base-path)/pom.xml $(java-base-path)/runjava-common/pom.xml \ $(java-base-path)/runjava-non-isolated/pom.xml - $(call quiet, cd $(java-base-path) && mvn -q --projects :runjava-common$(comma):runjava-non-isolated package -DskipTests=true, MVN $@) + $(call quiet, cd $(java-base-path) && JAVA_HOME=$(java_jdk_path) mvn -q --projects :runjava-common$(comma):runjava-non-isolated package -DskipTests=true, MVN $@) module: $(java-targets) $(jar-targets) clean: cd $(java-base-path) && mvn -q clean -rm -f dependency-reduced-pom.xml - $(call very-quiet, $(RM) -rf obj) + $(call very-quiet, $(RM) -rf $(module_out)) diff --git a/modules/java-non-isolated/usr.manifest b/modules/java-non-isolated/usr.manifest index 00eab90d..9ad6117c 100644 --- a/modules/java-non-isolated/usr.manifest +++ b/modules/java-non-isolated/usr.manifest @@ -6,6 +6,6 @@ # [manifest] -/java.so: ${MODULE_DIR}/obj/java_non_isolated.so +/java.so: ./modules/java-non-isolated/java_non_isolated.so /java/runjava-non-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-non-isolated/target/runjava-non-isolated.jar /.java.policy: ${MODULE_DIR}/.java.policy diff --git a/modules/java-tests/.gitignore b/modules/java-tests/.gitignore new file mode 100644 index 00000000..b4444c75 --- /dev/null +++ b/modules/java-tests/.gitignore @@ -0,0 +1 @@ +test_commands diff --git a/modules/java-tests/Makefile b/modules/java-tests/Makefile index b8861cb6..e5a046cb 100644 --- a/modules/java-tests/Makefile +++ b/modules/java-tests/Makefile @@ -1,29 +1,28 @@ -SRC = $(shell readlink -f ../..) -include $(SRC)/modules/java-base/common.gmk +include ../common.gmk -ifeq ($(arch),aarch64) -java-targets := -else -java-targets := obj/java_isolated.so -endif +module_out := $(out)/modules/java-tests +export module_out -isolated-jar-target := $(java-base-path)/runjava-isolated/target/runjava-isolated.jar +include ../java-base/common.gmk +javac_version := $(shell javac -version 2>&1 | grep -oP "javac \d+\.\d+") + +ifeq ($(javac_version),javac 1.8) tests-jar-target := tests/target/runjava-tests.jar +java-targets := $(module_out)/java_isolated.so + +isolated-jar-target := $(java-base-path)/runjava-isolated/target/runjava-isolated.jar + tests-isolates-target := tests-isolates/target/tests-isolates-jar-with-dependencies.jar tests-jre-extension-target := tests-jre-extension/target/tests-jre-extension.jar -obj/java_isolated.o: $(SRC)/modules/java-base/java.cc | init - $(call quiet, $(CXX) $(CXXFLAGS) -o $@ -c $(SRC)/modules/java-base/java.cc -MMD, CXX $@) - -obj/java_isolated.so: obj/java_isolated.o $(java-base-path)/obj/jvm/java_api.o $(java-base-path)/obj/jvm/jni_helpers.o $(java-base-path)/obj/balloon/jvm_balloon.o - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^, LINK $@) +$(module_out)/java_isolated.o: $(src)/modules/java-base/java.cc | init + $(call quiet, $(CXX) $(CXXFLAGS) -o $@ -c $(src)/modules/java-base/java.cc -MMD, CXX $@) -init: - @echo " MKDIRS" - $(call very-quiet, mkdir -p obj) +$(module_out)/java_isolated.so: $(module_out)/java_isolated.o $(out)/modules/java-base/jvm/java_api.o $(out)/modules/java-base/jvm/jni_helpers.o $(out)/modules/java-base/balloon/jvm_balloon.o + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $^, LINK $@) comma := , @@ -34,27 +33,67 @@ $(isolated-jar-target): $(wildcard $(java-base-path)/runjava-isolated/src/main/j $(wildcard $(java-base-path)/runjava-common/src/main/java/io/osv/util/*.java) \ $(java-base-path)/pom.xml $(java-base-path)/runjava-common/pom.xml \ $(java-base-path)/runjava-isolated/pom.xml - $(call quiet, cd $(java-base-path) && mvn -q --projects :runjava-common$(comma):runjava-isolated package -DskipTests=true, MVN $@) + $(call quiet, cd $(java-base-path) && JAVA_HOME=$(java_jdk_path) mvn -q --projects :runjava-common$(comma):runjava-isolated package -DskipTests=true, MVN $@) $(tests-jre-extension-target): $(wildcard tests-jre-extension/src/main/java/tests/*.java) \ tests-jre-extension/pom.xml pom.xml - $(call quiet, cd $(SRC)/modules/java-tests && mvn -q --projects :tests-jre-extension package -DskipTests=true, MVN $@) + $(call quiet, cd $(src)/modules/java-tests && JAVA_HOME=$(java_jdk_path) mvn -q --projects :tests-jre-extension package -DskipTests=true, MVN $@) $(tests-isolates-target): $(isolated-jar-target) $(wildcard tests-isolates/src/main/java/tests/*.java) \ pom.xml tests-isolates/pom.xml - $(call quiet, cd $(SRC)/modules/java-tests && \ - mvn -q --projects :runjava-common$(comma):runjava-non-isolated$(comma):runjava-isolated$(comma):tests-isolates package -DskipTests=true, MVN $@) + $(call quiet, cd $(src)/modules/java-tests && \ + JAVA_HOME=$(java_jdk_path) mvn -q --projects :runjava-common$(comma):runjava-non-isolated$(comma):runjava-isolated$(comma):tests-isolates package -DskipTests=true, MVN $@) $(tests-jar-target): $(isolated-jar-target) $(tests-isolates-target) $(tests-jre-extension-target) \ $(wildcard tests/src/main/java/io/osv/*.java) \ $(wildcard tests/src/main/java/tests/*.java) \ pom.xml tests/pom.xml - $(call quiet, cd $(SRC)/modules/java-tests && \ - mvn -q --projects :runjava-common$(comma):runjava-non-isolated$(comma):runjava-isolated$(comma):tests-isolates$(comma):runjava-tests$(comma):tests-jre-extension package -DskipTests=true, MVN $@) + $(call quiet, cd $(src)/modules/java-tests && \ + JAVA_HOME=$(java_jdk_path) mvn -q --projects :runjava-common$(comma):runjava-non-isolated$(comma):runjava-isolated$(comma):tests-isolates$(comma):runjava-tests$(comma):tests-jre-extension package -DskipTests=true, MVN $@) + +init: + @echo " MKDIRS" + $(call very-quiet, mkdir -p $(module_out)) + +module: $(java-targets) $(tests-jar-target) test_commands +else +tests-jar-target := tests-for-java9_1x/target/runjava-9-1x-tests.jar + +$(tests-jar-target): $(wildcard $(java-base-path)/tests-for-java9_1x/src/main/java/io/osv//*.java) + $(call quiet, cd $(src)/modules/java-tests/tests-for-java9_1x && \ + JAVA_HOME=$(java_jdk_path) mvn -q package -DskipTests=true, MVN $@) -module: $(java-targets) $(tests-jar-target) +module: $(tests-jar-target) test_commands +endif + +ifeq ($(arch),aarch64) +java_arch_options := -Xint +endif + +java_isolated_cmd := 'java_isolated: /java_isolated.so $(java_arch_options) -cp /tests/java/tests.jar:/tests/java/isolates.jar \ + -Disolates.jar=/tests/java/isolates.jar org.junit.runner.JUnitCore io.osv.AllTestsThatTestIsolatedApp' +java_non_isolated_cmd := 'java_non_isolated: /java.so $(java_arch_options) -cp /tests/java/tests.jar:/tests/java/isolates.jar \ + -Disolates.jar=/tests/java/isolates.jar org.junit.runner.JUnitCore io.osv.AllTestsThatTestNonIsolatedApp' +java_no_wrapper_cmd := 'java_no_wrapper: /usr/bin/java $(java_arch_options) -cp /tests/java/tests.jar org.junit.runner.JUnitCore io.osv.BasicTests !' +java_perms_cmd := 'java-perms: /usr/bin/java $(java_arch_options) -cp /tests/java/tests.jar io.osv.TestDomainPermissions !' + +.PHONY: test_commands + +ifeq ($(arch),$(host_arch)) +test_commands: + $(call very-quiet, rm -f test_commands) + $(call very-quiet, if [ "$(javac_version)" = "javac 1.8" ]; then \ + echo $(java_isolated_cmd) >> test_commands && \ + echo $(java_non_isolated_cmd) >> test_commands; fi ) + $(call very-quiet, echo $(java_no_wrapper_cmd) >> test_commands) + $(call very-quiet, echo $(java_perms_cmd) >> test_commands) +else +test_commands: + $(call very-quiet, rm -f test_commands) +endif clean: - cd $(SRC)/modules/java-tests && mvn -q clean - -rm -f dependency-reduced-pom.xml - $(call very-quiet, $(RM) -rf obj) + cd $(src)/modules/java-tests && mvn -q clean + cd $(src)/modules/java-tests/tests-for-java9_1x && mvn -q clean + -rm -f dependency-reduced-pom.xml test_commands + $(call very-quiet, $(RM) -rf $(module_out)) diff --git a/modules/java-tests/module.py b/modules/java-tests/module.py index 1e872f61..4009eb05 100644 --- a/modules/java-tests/module.py +++ b/modules/java-tests/module.py @@ -1,16 +1,27 @@ from osv.modules import api from osv.modules.filemap import FileMap +import subprocess api.require('java') -_jar = '/tests/java/tests.jar' -_isolates_jar = '/tests/java/isolates.jar' +javac_with_version = subprocess.check_output(['javac', '-version'], stderr=subprocess.STDOUT).decode('utf-8') usr_files = FileMap() -usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/runjava-tests.jar').to(_jar) -usr_files.add('${OSV_BASE}/modules/java-tests/tests-isolates/target/tests-isolates-jar-with-dependencies.jar').to(_isolates_jar) +_jar = '/tests/java/tests.jar' + +if javac_with_version.startswith('javac 1.8'): + _isolates_jar = '/tests/java/isolates.jar' + + usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/runjava-tests.jar').to(_jar) + usr_files.add('${OSV_BASE}/modules/java-tests/tests-isolates/target/tests-isolates-jar-with-dependencies.jar').to(_isolates_jar) + + usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/classes/tests/ClassPutInRoot.class').to('/tests/ClassPutInRoot.class') -usr_files.add('${OSV_BASE}/modules/java-tests/tests/target/classes/tests/ClassPutInRoot.class').to('/tests/ClassPutInRoot.class') + usr_files.add('${OSV_BASE}/modules/java-tests/tests-jre-extension/target/tests-jre-extension.jar') \ + .to('/usr/lib/jvm/java/jre/lib/ext/tests-jre-extension.jar') -usr_files.add('${OSV_BASE}/modules/java-tests/tests-jre-extension/target/tests-jre-extension.jar') \ - .to('/usr/lib/jvm/java/jre/lib/ext/tests-jre-extension.jar') + usr_files.add('${OSV_BASE}/build/last/modules/java-tests/java_isolated.so').to('/java_isolated.so') + usr_files.add('${OSV_BASE}/modules/java-base/runjava-isolated/target/runjava-isolated.jar').to('/java/runjava-isolated.jar') + usr_files.add('${OSV_BASE}/modules/java-tests/.java.policy').to('/.java.policy') +else: + usr_files.add('${OSV_BASE}/modules/java-tests/tests-for-java9_1x/target/runjava-9-1x-tests.jar').to(_jar) diff --git a/modules/java-tests/tests-for-java9_1x/pom.xml b/modules/java-tests/tests-for-java9_1x/pom.xml new file mode 100644 index 00000000..95dade20 --- /dev/null +++ b/modules/java-tests/tests-for-java9_1x/pom.xml @@ -0,0 +1,64 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>io.osv</groupId> + <artifactId>runjava-9-1x-tests</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>jar</packaging> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13.1</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <version>2.3</version> + <executions> + <execution> + <goals> + <goal>properties</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <configuration> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + <finalName>runjava-9-1x-tests</finalName> + <appendAssemblyId>false</appendAssemblyId> + </configuration> + <executions> + <execution> + <id>make-jar-with-dependencies</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.7</source> + <target>1.7</target> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTest.java b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTest.java new file mode 120000 index 00000000..bb0e2115 --- /dev/null +++ b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTest.java @@ -0,0 +1 @@ +../../../../../../tests/src/main/java/io/osv/BasicTest.java \ No newline at end of file diff --git a/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTests.java b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTests.java new file mode 120000 index 00000000..a29e7e77 --- /dev/null +++ b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/BasicTests.java @@ -0,0 +1 @@ +../../../../../../tests/src/main/java/io/osv/BasicTests.java \ No newline at end of file diff --git a/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TemporarySecurityManager.java b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TemporarySecurityManager.java new file mode 120000 index 00000000..d54b90da --- /dev/null +++ b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TemporarySecurityManager.java @@ -0,0 +1 @@ +../../../../../../tests/src/main/java/io/osv/TemporarySecurityManager.java \ No newline at end of file diff --git a/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TestDomainPermissions.java b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TestDomainPermissions.java new file mode 120000 index 00000000..a7f4d3d2 --- /dev/null +++ b/modules/java-tests/tests-for-java9_1x/src/main/java/io/osv/TestDomainPermissions.java @@ -0,0 +1 @@ +../../../../../../tests/src/main/java/io/osv/TestDomainPermissions.java \ No newline at end of file diff --git a/modules/java-tests/usr.manifest b/modules/java-tests/usr.manifest deleted file mode 100644 index c49fee84..00000000 --- a/modules/java-tests/usr.manifest +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (C) 2013-2014 Cloudius Systems, Ltd. -# -# This work is open source software, licensed under the terms of the -# BSD license as described in the LICENSE file in the top-level directory. -# - -[manifest] -/java_isolated.so: ${OSV_BASE}/modules/java-tests/obj/java_isolated.so -/java/runjava-isolated.jar: ${OSV_BASE}/modules/java-base/runjava-isolated/target/runjava-isolated.jar -/.java.policy: ${OSV_BASE}/modules/java-tests/.java.policy diff --git a/modules/java/module.py b/modules/java/module.py index 114c5fb9..4cc26bd0 100644 --- a/modules/java/module.py +++ b/modules/java/module.py @@ -1,4 +1,10 @@ from osv.modules import api +import subprocess -api.require('java-non-isolated') -api.require('openjdk8-from-host') +javac_with_version = subprocess.check_output(['javac', '-version'], stderr=subprocess.STDOUT).decode('utf-8') + +if javac_with_version.startswith('javac 1.8'): + api.require('java-non-isolated') + api.require('openjdk8-from-host') +else: + api.require('openjdk9_1x-from-host') diff --git a/modules/josvsym/Makefile b/modules/josvsym/Makefile index e3cfef1f..27fcc025 100644 --- a/modules/josvsym/Makefile +++ b/modules/josvsym/Makefile @@ -1,60 +1,40 @@ -SRC = $(shell readlink -f ../..) -include $(SRC)/modules/java-base/common.gmk -INCLUDES += -I. +include ../common.gmk + +module_out := $(out)/modules/josvsym + +jdkbase = $(dir $(shell readlink -f $$(which javac)))/.. +INCLUDES += -I$(jdkbase)/include -I$(jdkbase)/include/linux # compiler flags: # -g adds debugging information to the executable file # -Wall turns on most, but not all, compiler warnings -autodepend = -MD -MT $@ -MP -CXXFLAGS = -g -Wall -std=c++11 -fPIC $(INCLUDES) -O2 $(autodepend) - -src = $(shell readlink -f ../..) - -ifndef ARCH - ARCH = x64 -endif - -ifndef mode - mode = release -endif - -ifndef OSV_BUILD_PATH - OSV_BUILD_PATH = $(src)/build/$(mode).$(ARCH) -endif +CXXFLAGS = -g -Wall -std=c++11 -fPIC $(COMMON) -O2 MODULE = josvsym -OUTDIR := $(OSV_BUILD_PATH)/modules/$(MODULE) CPP_FILES := josvsym.cc -OBJ_FILES := $(addprefix $(OUTDIR)/,$(CPP_FILES:.cc=.o)) +OBJ_FILES := $(addprefix $(module_out)/,$(CPP_FILES:.cc=.o)) DEPS := $(OBJ_FILES:.o=.d) -TARGET := $(OUTDIR)/lib$(MODULE).so -LIBS = - -quiet = $(if $V, $1, @echo " $2"; $1) -very-quiet = $(if $V, $1, @$1) +TARGET := $(module_out)/lib$(MODULE).so module : all -all : $(OUTDIR) $(TARGET) +all : $(TARGET) ifneq ($(MAKECMDGOALS),clean) -include $(DEPS) endif -$(OUTDIR) : - $(call very-quiet, mkdir -p $(OUTDIR)) - -.PHONY : all module +init : + @echo " MKDIRS" + $(call very-quiet, mkdir -p $(module_out)) $(TARGET) : $(OBJ_FILES) $(STUB_FILES) - $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $@ $^ $(LIBS), LINK $(@F)) + $(call quiet, $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $^ $(LIBS), LINK $(@F)) -$(OUTDIR)/%.o : %.cc +$(module_out)/%.o : %.cc | init $(call quiet, $(CXX) $(CXXFLAGS) -c -MMD -o $@ $<, CXX $@) clean : - $(call quiet, $(RM) -f $(TARGET), CLEAN) - $(call very-quiet, $(RM) -rf $(OUTDIR/*.o)) - $(call very-quiet, $(RM) -rf $(OUTDIR/*.d)) + $(call quiet, $(RM) -rf $(module_out), CLEAN) diff --git a/modules/tests/module.py b/modules/tests/module.py index 8b087e6a..2727607a 100644 --- a/modules/tests/module.py +++ b/modules/tests/module.py @@ -1,6 +1,5 @@ from osv.modules import api import os -if os.getenv('ARCH') == 'x64': - api.require('java-tests') +api.require('java-tests') api.require('dl_tests') diff --git a/scripts/test.py b/scripts/test.py index fbcbb0c7..f892c462 100755 --- a/scripts/test.py +++ b/scripts/test.py @@ -35,11 +35,6 @@ firecracker_disabled_list= [ #The remaining ones are disabled below until we fix various #issues that prevent those tests from passing. aarch64_disabled_list= [ - #All java tests require JVM running on aarch64 which in turn at least requires TLS support - "java_isolated", - "java_non_isolated", - "java_no_wrapper", - "java-perms", #Following tests crash with message 'Assertion failed: type == ARCH_JUMP_SLOT (core/elf.cc: relocate_pltgot: 789)' "tst-sigaltstack.so", #Remaining tests below fail for various different reasons @@ -48,16 +43,6 @@ aarch64_disabled_list= [ "tst-mmap.so", # Infinite page fault ] -add_tests([ - SingleCommandTest('java_isolated', '/java_isolated.so -cp /tests/java/tests.jar:/tests/java/isolates.jar \ - -Disolates.jar=/tests/java/isolates.jar org.junit.runner.JUnitCore io.osv.AllTestsThatTestIsolatedApp'), - SingleCommandTest('java_non_isolated', '/java.so -cp /tests/java/tests.jar:/tests/java/isolates.jar \ - -Disolates.jar=/tests/java/isolates.jar org.junit.runner.JUnitCore io.osv.AllTestsThatTestNonIsolatedApp'), - SingleCommandTest('java_no_wrapper', '/usr/bin/java -cp /tests/java/tests.jar \ - org.junit.runner.JUnitCore io.osv.BasicTests !'), - SingleCommandTest('java-perms', '/java_isolated.so -cp /tests/java/tests.jar io.osv.TestDomainPermissions'), -]) - class TestRunnerTest(SingleCommandTest): def __init__(self, name): super(TestRunnerTest, self).__init__(name, '/tests/%s' % name) @@ -86,6 +71,16 @@ def collect_tests(): test_files.append(guestpath); add_tests((TestRunnerTest(os.path.basename(x)) for x in test_files)) +def collect_java_tests(): + with open('modules/java-tests/test_commands', 'r') as f: + for line in f: + line = line.rstrip(); + if is_comment.match(line): continue; + components = line.split(": ", 2); + test_name = components[0].strip(); + test_command = components[1].strip() + add_tests([SingleCommandTest(test_name, test_command)]) + def run_test(test): sys.stdout.write(" TEST %-35s" % test.name) sys.stdout.flush() @@ -154,6 +149,7 @@ def run_tests(): print(("OK (%d %s run, %.3f s)" % (len(tests_to_run), pluralize("test", len(tests_to_run)), duration))) def main(): + collect_java_tests() collect_tests() while True: run_tests() -- 2.30.2 -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/20210614042047.13437-3-jwkozaczuk%40gmail.com.
