From 5c433f8f5834a4cae62d0375bfdb273242630f01 Mon Sep 17 00:00:00 2001 From: Jiffin Tony Thottan Date: Fri, 21 Jul 2017 12:14:25 +0530 Subject: tests/gfapi : add test case for nameless lookups in glfs_resolve_component() Plus address pending comment to add check for entry "" in glfs_resolve_component() Change-Id: I6063f776ce1cd76cb4c1b1f621b064f3dcc91e5c BUG: 1460514 Signed-off-by: Jiffin Tony Thottan Reviewed-on: https://review.gluster.org/17844 Smoke: Gluster Build System CentOS-regression: Gluster Build System Reviewed-by: Niels de Vos Reviewed-by: soumya k --- tests/bugs/gfapi/bug-1447266/1460514.c | 143 +++++++++++++++++++++++++++++++++ tests/bugs/gfapi/bug-1447266/1460514.t | 26 ++++++ 2 files changed, 169 insertions(+) create mode 100644 tests/bugs/gfapi/bug-1447266/1460514.c create mode 100644 tests/bugs/gfapi/bug-1447266/1460514.t (limited to 'tests') diff --git a/tests/bugs/gfapi/bug-1447266/1460514.c b/tests/bugs/gfapi/bug-1447266/1460514.c new file mode 100644 index 00000000000..f04d2d1463f --- /dev/null +++ b/tests/bugs/gfapi/bug-1447266/1460514.c @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOG_ERR(func, ret) do { \ + if (ret != 0) { \ + fprintf (stderr, "%s : returned error %d (%s)\n", \ + func, ret, strerror (errno)); \ + goto out; \ + } else { \ + fprintf (stderr, "%s : returned %d\n", func, ret); \ + } \ + } while (0) + +int +main (int argc, char *argv[]) +{ + int ret = 0; + glfs_t *fs = NULL; + struct glfs_object *root = NULL, *dir = NULL, *subdir = NULL; + struct stat sb = {0, }; + char *dirname = "dir"; + char *subdirname = "subdir"; + char *logfile = NULL; + char *volname = NULL; + char *hostname = NULL; + unsigned char subdir_handle[GFAPI_HANDLE_LENGTH] = {'\0'}; + + if (argc != 4) { + fprintf (stderr, "Invalid argument\n"); + exit(1); + } + + hostname = argv[1]; + volname = argv[2]; + logfile = argv[3]; + + fs = glfs_new (volname); + if (!fs) { + fprintf (stderr, "glfs_new: returned NULL\n"); + ret = -1; + goto out; + } + + ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007); + LOG_ERR("glfs_set_volfile_server", ret); + + ret = glfs_set_logging (fs, logfile, 7); + LOG_ERR("glfs_set_logging", ret); + + ret = glfs_init (fs); + LOG_ERR("first attempt glfs_init", ret); + + root = glfs_h_lookupat (fs, NULL, "/", &sb, 0); + if (root == NULL) { + fprintf (stderr, "glfs_h_lookupat: error on lookup of / ,%s\n", + strerror (errno)); + goto out; + } + dir = glfs_h_mkdir (fs, root, dirname, 0644, &sb); + if (dir == NULL) { + fprintf (stderr, "glfs_h_mkdir: error on directory creation dir ,%s\n", + strerror (errno)); + goto out; + } + subdir = glfs_h_mkdir (fs, root, subdirname, 0644, &sb); + if (subdir == NULL) { + fprintf (stderr, "glfs_h_mkdir: error on directory creation subdir ,%s\n", + strerror (errno)); + goto out; + } + ret = glfs_h_extract_handle (subdir, subdir_handle, + GFAPI_HANDLE_LENGTH); + if (ret < 0) { + fprintf (stderr, "glfs_h_extract_handle: error extracting handle of %s: %s\n", + subdirname, strerror (errno)); + goto out; + } + + glfs_h_close (subdir); + subdir = NULL; + glfs_h_close (dir); + dir = NULL; + + if (fs) { + ret = glfs_fini(fs); + fprintf (stderr, "glfs_fini(fs) returned %d \n", ret); + } + + fs = NULL; + + fs = glfs_new (volname); + if (!fs) { + fprintf (stderr, "glfs_new: returned NULL\n"); + ret = -1; + goto out; + } + + ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007); + LOG_ERR("glfs_set_volfile_server", ret); + + ret = glfs_set_logging (fs, logfile, 7); + LOG_ERR("glfs_set_logging", ret); + + ret = glfs_init (fs); + LOG_ERR("second attempt glfs_init", ret); + + subdir = glfs_h_create_from_handle (fs, subdir_handle, GFAPI_HANDLE_LENGTH, + &sb); + if (subdir == NULL) { + fprintf (stderr, "glfs_h_create_from_handle: error on create of %s: from (%p),%s\n", + subdirname, subdir_handle, strerror (errno)); + goto out; + } + dir = glfs_h_lookupat (fs, subdir, "..", &sb, 0); + if (dir == NULL) { + fprintf (stderr, "glfs_h_lookupat: error on directory lookup dir using .. ,%s\n", + strerror (errno)); + goto out; + } + +out: + if (subdir) + glfs_h_close (subdir); + if (dir) + glfs_h_close (dir); + + if (fs) { + ret = glfs_fini(fs); + fprintf (stderr, "glfs_fini(fs) returned %d \n", ret); + } + + if (ret) + exit(1); + exit(0); +} diff --git a/tests/bugs/gfapi/bug-1447266/1460514.t b/tests/bugs/gfapi/bug-1447266/1460514.t new file mode 100644 index 00000000000..594af75cae2 --- /dev/null +++ b/tests/bugs/gfapi/bug-1447266/1460514.t @@ -0,0 +1,26 @@ +#!/bin/bash + +. $(dirname $0)/../../../include.rc +. $(dirname $0)/../../../volume.rc + +cleanup; + +TEST glusterd + +TEST $CLI volume create $V0 $H0:$B0/brick1; +EXPECT 'Created' volinfo_field $V0 'Status'; + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +logdir=`gluster --print-logdir` + +TEST build_tester $(dirname $0)/1460514.c -lgfapi -o $(dirname $0)/1460514 +TEST ./$(dirname $0)/1460514 $H0 $V0 $logdir/1460514.log + +cleanup_tester $(dirname $0)/1460514 + +TEST $CLI volume stop $V0 +TEST $CLI volume delete $V0 + +cleanup; -- cgit