diff options
| author | Tomoyuki Sahara <[email protected]> | 2013-08-08 14:00:02 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2013-08-08 14:00:02 +0900 |
| commit | 5e8021bedba95813e91693c85e1cad829355a352 (patch) | |
| tree | c0a65ce687f4d57b058768543d78beee8340e05f /test/mruby_io_test.c | |
| parent | c49541058c40623b0c337a7e95193142c8dc9947 (diff) | |
| download | mruby-5e8021bedba95813e91693c85e1cad829355a352.tar.gz mruby-5e8021bedba95813e91693c85e1cad829355a352.zip | |
tests for File.socket? and File.symlink?
Diffstat (limited to 'test/mruby_io_test.c')
| -rw-r--r-- | test/mruby_io_test.c | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/test/mruby_io_test.c b/test/mruby_io_test.c index a6fa32d4f..0e9ccc696 100644 --- a/test/mruby_io_test.c +++ b/test/mruby_io_test.c @@ -1,27 +1,35 @@ +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/un.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + #include "mruby.h" #include "mruby/array.h" #include "mruby/string.h" #include "mruby/variable.h" -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/stat.h> static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { - char rfname[] = "tmp.mruby-io-test.XXXXXXXX"; - char wfname[] = "tmp.mruby-io-test.XXXXXXXX"; + char rfname[] = "tmp.mruby-io-test.XXXXXXXX"; + char wfname[] = "tmp.mruby-io-test.XXXXXXXX"; + char symlinkname[] = "tmp.mruby-io-test.XXXXXXXX"; + char socketname[] = "tmp.mruby-io-test.XXXXXXXX"; char msg[] = "mruby io test"; mode_t mask; - int fd0 = -1, fd1 = -1; + int fd0, fd1, fd2, fd3; FILE *fp; - mrb_value ary = mrb_ary_new(mrb); + struct sockaddr_un sun0; mask = umask(077); fd0 = mkstemp(rfname); fd1 = mkstemp(wfname); - if (fd0 == -1 || fd1 == -1) { + fd2 = mkstemp(symlinkname); + fd3 = mkstemp(socketname); + if (fd0 == -1 || fd1 == -1 || fd2 == -1 || fd3 == -1) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't create temporary file"); return mrb_nil_value(); } @@ -29,12 +37,10 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_rfname"), mrb_str_new_cstr(mrb, rfname)); mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_wfname"), mrb_str_new_cstr(mrb, wfname)); + mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_symlinkname"), mrb_str_new_cstr(mrb, symlinkname)); + mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_socketname"), mrb_str_new_cstr(mrb, socketname)); mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_msg"), mrb_str_new_cstr(mrb, msg)); - mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, rfname)); - mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, wfname)); - mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, msg)); - fp = fopen(rfname, "w"); if (fp == NULL) { mrb_raise(mrb, E_RUNTIME_ERROR, "can't open temporary file"); @@ -50,7 +56,26 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) } fclose(fp); - return ary; + unlink(symlinkname); + close(fd2); + if (symlink("hoge", symlinkname) == -1) { + mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a symbolic link"); + } + + unlink(socketname); + close(fd3); + fd3 = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd3 == -1) { + mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket"); + } + sun0.sun_family = AF_UNIX; + snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + if (bind(fd3, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { + mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket bi"); + } + close(fd3); + + return mrb_true_value(); } static mrb_value @@ -58,6 +83,8 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) { mrb_value rfname = mrb_gv_get(mrb, mrb_intern(mrb, "$mrbtest_io_rfname")); mrb_value wfname = mrb_gv_get(mrb, mrb_intern(mrb, "$mrbtest_io_wfname")); + mrb_value symlinkname = mrb_gv_get(mrb, mrb_intern(mrb, "$mrbtest_io_symlinkname")); + mrb_value socketname = mrb_gv_get(mrb, mrb_intern(mrb, "$mrbtest_io_socketname")); if (mrb_type(rfname) == MRB_TT_STRING) { remove(RSTRING_PTR(rfname)); @@ -65,9 +92,17 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) if (mrb_type(wfname) == MRB_TT_STRING) { remove(RSTRING_PTR(wfname)); } + if (mrb_type(symlinkname) == MRB_TT_STRING) { + remove(RSTRING_PTR(symlinkname)); + } + if (mrb_type(socketname) == MRB_TT_STRING) { + remove(RSTRING_PTR(socketname)); + } mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_rfname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_wfname"), mrb_nil_value()); + mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_symlinkname"), mrb_nil_value()); + mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_socketname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_io_msg"), mrb_nil_value()); return mrb_nil_value(); |
