summaryrefslogtreecommitdiffstats
path: root/testsuites/fstests/fssymlink/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/fstests/fssymlink/test.c')
-rw-r--r--testsuites/fstests/fssymlink/test.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/testsuites/fstests/fssymlink/test.c b/testsuites/fstests/fssymlink/test.c
new file mode 100644
index 0000000000..7e12273845
--- /dev/null
+++ b/testsuites/fstests/fssymlink/test.c
@@ -0,0 +1,138 @@
+
+#include <sys/stat.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <dirent.h>
+
+#include "fstest.h"
+
+/*
+ * Test the function of symlink
+ */
+void symlink_test01()
+{
+ int fd;
+ char* name0="file";
+ char* name1="symlink";
+ int status;
+ struct stat statbuf;
+ int len=strlen(name0);
+
+ printf("Create a file named %s\n",name0);
+ fd=creat(name0,0777);
+ status=close(fd);
+ rtems_test_assert(status==0);
+
+ printf("Create a symlink named %s to %s\n",name1,name0);
+ status=symlink(name0,name1);
+ rtems_test_assert(status==0);
+
+ status=stat(name0,&statbuf);
+ rtems_test_assert(status==0);
+ rtems_test_assert(S_ISREG(statbuf.st_mode));
+ rtems_test_assert(0==statbuf.st_size);
+
+
+ status=lstat(name1,&statbuf);
+ rtems_test_assert(status==0);
+ rtems_test_assert(S_ISLNK(statbuf.st_mode));
+#if !defined(IMFS_TEST) && !defined(MIMFS_TEST)
+ rtems_test_assert(len==statbuf.st_size);
+#endif
+
+
+ puts("Unlink the file");
+
+ status=unlink(name0);
+ rtems_test_assert(status==0);
+
+
+ status=lstat(name1,&statbuf);
+ rtems_test_assert(status==0);
+ rtems_test_assert(S_ISLNK(statbuf.st_mode));
+
+ status=unlink(name1);
+ rtems_test_assert(status==0);
+
+ printf("Create a dir named %s\n",name0);
+ status=mkdir (name0,0777);
+
+ printf("Create a symlink named %s to %s\n",name1,name0);
+ status=symlink(name0,name1);
+ rtems_test_assert(status==0);
+
+
+
+ status=lstat(name1,&statbuf);
+ rtems_test_assert(status==0);
+ rtems_test_assert(S_ISLNK(statbuf.st_mode));
+#if !defined(IMFS_TEST) && !defined(MIMFS_TEST)
+ rtems_test_assert(len==statbuf.st_size);
+#endif
+
+ puts("rmdir the dir");
+ status=rmdir(name0);
+ rtems_test_assert(status==0);
+
+
+ status=lstat(name1,&statbuf);
+ rtems_test_assert(status==0);
+ rtems_test_assert(S_ISLNK(statbuf.st_mode));
+
+ status=unlink(name1);
+ rtems_test_assert(status==0);
+
+}
+/*
+ * symlink loop test
+ */
+void symlink_test02()
+{
+
+ char* name0="symlink0";
+ char* name1="symlink1";
+ int status;
+
+
+ puts("symlink loop test");
+ status=symlink(name0,name1);
+ rtems_test_assert(status==0);
+ status=symlink(name1,name0);
+ rtems_test_assert(status==0);
+
+
+ puts("create a file Should fail with ELOOP");
+ status=creat(name0,0777);
+ rtems_test_assert(status!=0);
+#if !defined(MRFS_TEST)
+ rtems_test_assert(errno==ELOOP);
+#endif
+ puts("truncate a file Should with ELOOP");
+ status=truncate(name0,0777);
+ rtems_test_assert(status!=0);
+#if !defined(MRFS_TEST)
+ rtems_test_assert(errno==ELOOP);
+#endif
+}
+
+void test()
+{
+
+ puts( "\n\n*** SYMLINK TEST ***" );
+#if defined(MDOSFS_TEST)
+#else
+ symlink_test01();
+ symlink_test02();
+#endif
+
+ puts( "*** END OF SYMLINK TEST ***" );
+
+}
+