<div dir="ltr">Hello,<div><br></div><div>This is my first attempt to add test for syscall (here, chdir). Any suggestion, comment, criticism is welcomed.</div><div><br></div><div><div><div>From e989b62ccb2095b2eb7f7f494b19e218398fecaf Mon Sep 17 00:00:00 2001</div><div>From: JayRJoshi <<a href="mailto:jay.r.joshi100@gmail.com">jay.r.joshi100@gmail.com</a>></div><div>Date: Fri, 11 Mar 2016 23:17:48 +0530</div><div>Subject: [PATCH] Test for chdir</div><div><br></div><div>---</div><div> tests/.gitignore  |  1 +</div><div> tests/Makefile.am |  2 ++</div><div> tests/chdir.c     | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++</div><div> tests/chdir.test  | 11 ++++++++++</div><div> 4 files changed, 74 insertions(+)</div><div> create mode 100644 tests/chdir.c</div><div> create mode 100755 tests/chdir.test</div><div><br></div><div>diff --git a/tests/.gitignore b/tests/.gitignore</div><div>index e882463..8fd0723 100644</div><div>--- a/tests/.gitignore</div><div>+++ b/tests/.gitignore</div><div>@@ -15,6 +15,7 @@ attach-p-cmd-cmd</div><div> attach-p-cmd-p</div><div> bpf</div><div> caps</div><div>+chdir</div><div> chmod</div><div> clock_nanosleep</div><div> clock_xettime</div><div>diff --git a/tests/Makefile.am b/tests/Makefile.am</div><div>index 4b48b3f..3ac26a2 100644</div><div>--- a/tests/Makefile.am</div><div>+++ b/tests/Makefile.am</div><div>@@ -65,6 +65,7 @@ check_PROGRAMS = \</div><div> <span class="" style="white-space:pre">     </span>attach-p-cmd-p \</div><div> <span class="" style="white-space:pre"> </span>bpf \</div><div> <span class="" style="white-space:pre">    </span>caps \</div><div>+<span class="" style="white-space:pre">    </span>chdir \</div><div> <span class="" style="white-space:pre">  </span>chmod \</div><div> <span class="" style="white-space:pre">  </span>clock_nanosleep \</div><div> <span class="" style="white-space:pre">        </span>clock_xettime \</div><div>@@ -235,6 +236,7 @@ TESTS = \</div><div> <span class="" style="white-space:pre">      </span>bexecve.test \</div><div> <span class="" style="white-space:pre">   </span>bpf.test \</div><div> <span class="" style="white-space:pre">       </span>caps.test \</div><div>+<span class="" style="white-space:pre">       </span>chdir.test \</div><div> <span class="" style="white-space:pre">     </span>chmod.test \</div><div> <span class="" style="white-space:pre">     </span>clock_nanosleep.test \</div><div> <span class="" style="white-space:pre">   </span>clock_xettime.test \</div><div>diff --git a/tests/chdir.c b/tests/chdir.c</div><div>new file mode 100644</div><div>index 0000000..fc2ce4e</div><div>--- /dev/null</div><div>+++ b/tests/chdir.c</div><div>@@ -0,0 +1,60 @@</div><div>+#include "tests.h"</div><div>+</div><div>+#include <sys/syscall.h></div><div>+#include <sys/stat.h></div><div>+</div><div>+#if defined __NR_chdir</div><div>+</div><div>+#include <fcntl.h></div><div>+#include <stdio.h></div><div>+#include <unistd.h></div><div>+#include <errno.h></div><div>+#include <stdlib.h></div><div>+#include <string.h></div><div>+</div><div>+int</div><div>+main(void)</div><div>+{</div><div>+static const char sample_dir[] = "chdir.sample";</div><div>+char abs_sample_dir[1024];</div><div>+char cur_dir[1024];</div><div>+</div><div>+if (getcwd(cur_dir,sizeof(cur_dir)) == NULL)</div><div>+  perror_msg_and_skip("getcwd");</div><div>+if (mkdir(sample_dir, S_IRWXU) == -1)</div><div>+  perror_msg_and_fail("mkdir");</div><div>+</div><div>+int chdir_res = syscall(__NR_chdir, sample_dir);</div><div>+</div><div>+if (chdir_res == 0) {</div><div>+  printf("chdir(\"%s\") = 0\n", sample_dir);</div><div>+} else {</div><div>+  if (errno == ENOSYS) {</div><div>+    printf("chdir(\"%s\") = -1 ENOSYS (%m)\n", sample_dir);</div><div>+  } else {</div><div>+    perror_msg_and_fail("chdir");</div><div>+  }</div><div>+}</div><div>+</div><div>+if (sprintf(abs_sample_dir,"%s/%s",cur_dir,sample_dir) < 0)</div><div>+  perror_msg_and_skip("sprintf");</div><div>+</div><div>+if (rmdir(abs_sample_dir) == -1)</div><div>+  perror_msg_and_skip("rmdir");</div><div>+</div><div>+if (chdir_res == 0) {</div><div>+  if (syscall(__NR_chdir, sample_dir) != -1)</div><div>+    perror_msg_and_fail("chdir");</div><div>+</div><div>+  printf("chdir(\"%s\") = -1 ENOENT (%m)\n", sample_dir);</div><div>+}</div><div>+</div><div>+puts("+++ exited with 0 +++");</div><div>+return 0;</div><div>+}</div><div>+</div><div>+#else</div><div>+</div><div>+SKIP_MAIN_UNDEFINED("__NR_chdir")</div><div>+</div><div>+#endif</div><div>diff --git a/tests/chdir.test b/tests/chdir.test</div><div>new file mode 100755</div><div>index 0000000..aab18dd</div><div>--- /dev/null</div><div>+++ b/tests/chdir.test</div><div>@@ -0,0 +1,11 @@</div><div>+#!/bin/bash</div><div>+</div><div>+. "${srcdir=.}/init.sh"</div><div>+</div><div>+run_prog > /dev/null</div><div>+OUT="$LOG.out"</div><div>+run_strace -a8 -echdir $args > "$OUT"</div><div>+match_diff "$LOG" "$OUT"</div><div>+rm -f "$OUT"</div><div>+</div><div>+exit 0</div><div>-- </div><div>1.9.1</div></div></div><div><br></div></div>