From a2b62891ccd34ca4c519d390f428adc03b1f13cd Mon Sep 17 00:00:00 2001 From: "Tate, Hongliang Tian" Date: Mon, 7 Jan 2019 13:11:13 +0800 Subject: [PATCH] Add file I/O test --- Makefile | 2 +- src/libos/src/fs/mod.rs | 2 +- test/Makefile | 20 +++++++++---------- test/file/Makefile | 4 ++++ test/file/main.c | 44 +++++++++++++++++++++++++++++++++++++++++ test/hello_world/main.c | 2 +- test/test_common.mk | 8 ++++---- 7 files changed, 65 insertions(+), 17 deletions(-) create mode 100644 test/file/Makefile create mode 100644 test/file/main.c diff --git a/Makefile b/Makefile index 16a09f47..a13cd830 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ src: @$(MAKE) --no-print-directory -C src test: - @$(MAKE) --no-print-directory -C test run + @$(MAKE) --no-print-directory -C test test clean: @$(MAKE) --no-print-directory -C src clean diff --git a/src/libos/src/fs/mod.rs b/src/libos/src/fs/mod.rs index 30582342..48871f6a 100644 --- a/src/libos/src/fs/mod.rs +++ b/src/libos/src/fs/mod.rs @@ -49,7 +49,7 @@ pub fn do_open(path: &str, flags: u32, mode: u32) -> Result { Arc::new(SgxMutex::new(sgx_file)) }; - let is_readable = (flags & O_RDONLY != 0) || (flags & O_RDWR != 0); + let is_readable = (flags & O_WRONLY) == 0; let is_writable = (flags & O_WRONLY != 0) || (flags & O_RDWR != 0); let is_append = (flags & O_APPEND != 0); let file_ref : Arc> = Arc::new(Box::new( diff --git a/test/Makefile b/test/Makefile index 91a0216c..32ef990b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,15 +1,15 @@ CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) PROJECT_DIR := $(realpath $(CUR_DIR)/../) -TEST_SUITES := empty hello_world malloc getpid spawn +TEST_SUITES := empty hello_world malloc file getpid spawn BUILD_TEST_SUITES := $(TEST_SUITES:%=%) -RUN_TEST_SUITES := $(TEST_SUITES:%=run-%) +RUN_TEST_SUITES := $(TEST_SUITES:%=test-%) CLEAN_TEST_SUITES := $(TEST_SUITES:%=clean-%) -CYAN :=\033[1;36m -GREEN :=\033[1;32m -RED :=\033[1;31m -NO_COLOR :=\033[0m +CYAN := \033[1;36m +GREEN := \033[1;32m +RED := \033[1;31m +NO_COLOR := \033[0m .PHONY: all build test clean $(BUILD_TEST_SUITES) $(RUN_TEST_SUITES) $(CLEAN_TEST_SUITES) @@ -30,7 +30,7 @@ $(BUILD_TEST_SUITES): %: # Run tests ############################################################################# -run: build $(RUN_TEST_SUITES) +test: build $(RUN_TEST_SUITES) pal: $(PROJECT_DIR)/src/pal/pal @cp $< pal @@ -38,9 +38,9 @@ pal: $(PROJECT_DIR)/src/pal/pal libocclum.signed.so: $(PROJECT_DIR)/src/libos/libocclum.signed.so @cp $< libocclum.signed.so -$(RUN_TEST_SUITES): run-%: % pal libocclum.signed.so - @echo "$(CYAN)TEST => $<$(NO_COLOR)" - @$(MAKE) --no-print-directory -C $< run ; \ +$(RUN_TEST_SUITES): test-%: % pal libocclum.signed.so + @echo "$(CYAN)RUN TEST => $<$(NO_COLOR)" + @$(MAKE) --no-print-directory -C $< test ; \ if [ $$? -eq 0 ] ; then \ echo "$(GREEN)PASS$(NO_COLOR)" ; \ else \ diff --git a/test/file/Makefile b/test/file/Makefile new file mode 100644 index 00000000..b71a4d49 --- /dev/null +++ b/test/file/Makefile @@ -0,0 +1,4 @@ +include ../test_common.mk + +EXTRA_C_FLAGS := +EXTRA_LINK_FLAGS := diff --git a/test/file/main.c b/test/file/main.c new file mode 100644 index 00000000..23c8d9d2 --- /dev/null +++ b/test/file/main.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include +#include + +int main() { + const char* file_name = "tmp.txt"; + int fd, flags, mode, len; + const char* write_msg = "Hello World\n"; + char read_buf[128] = {0}; + + flags = O_WRONLY | O_CREAT| O_TRUNC; + mode = 00666; + if ((fd = open(file_name, flags, mode)) < 0) { + printf("ERROR: failed to open a file for write\n"); + return -1; + } + if ((len = write(fd, write_msg, strlen(write_msg))) <= 0) { + printf("ERROR: failed to write to the file\n"); + return -1; + } + close(fd); + + flags = O_RDONLY; + if ((fd = open(file_name, flags)) < 0) { + printf("ERROR: failed to open a file for read\n"); + return -1; + } + if ((len = read(fd, read_buf, sizeof(read_buf) - 1)) <= 0) { + printf("ERROR: failed to read from the file\n"); + return -1; + } + close(fd); + + if (strcmp(write_msg, read_buf) != 0) { + printf("ERROR: the message read from the file is not as it was written\n"); + return -1; + } + + printf("File write and read succesfully\n"); + return 0; +} diff --git a/test/hello_world/main.c b/test/hello_world/main.c index 9ca7457d..45176c02 100644 --- a/test/hello_world/main.c +++ b/test/hello_world/main.c @@ -4,7 +4,7 @@ static const char* msg = "Hello World\n"; -int main(int argc) { +int main() { printf("%s", msg); return 0; } diff --git a/test/test_common.mk b/test/test_common.mk index 0558f7e5..bcebc0b2 100644 --- a/test/test_common.mk +++ b/test/test_common.mk @@ -16,7 +16,7 @@ C_FLAGS = -Wall -O0 $(EXTRA_C_FLAGS) C_FLAGS += -Xclang -load -Xclang $(LLVM_PATH)/lib/LLVMBoundchecker.so -mllvm -check-store-only=true LINK_FLAGS = $(C_FLAGS) $(EXTRA_LINK_FLAGS) -.PHONY: all run debug clean +.PHONY: all test debug clean ############################################################################# # Build @@ -44,18 +44,18 @@ $(READELF_FILE): $(BIN_NAME) @echo "READELF => $@" $(BIN_NAME): $(C_OBJS) - @$(CC) $^ $(LINK_FLAGS) -o $(BIN_NAME) 2> /dev/null + @$(CC) $^ $(LINK_FLAGS) -o $(BIN_NAME) @echo "LINK => $@" $(C_OBJS): %.o: %.c - @$(CC) $(C_FLAGS) -c $< -o $@ 2> /dev/null + @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" ############################################################################# # Test ############################################################################# -run: $(BIN_ENC_NAME) +test: $(BIN_ENC_NAME) @cd ../ && RUST_BACKTRACE=1 ./pal $(CUR_DIR)/$(BIN_ENC_NAME) #############################################################################