]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/blkdev: add simple sandboxing function for testing
authorSage Weil <sage@redhat.com>
Thu, 11 Dec 2014 21:46:47 +0000 (13:46 -0800)
committerSage Weil <sage@redhat.com>
Thu, 11 Dec 2014 21:46:47 +0000 (13:46 -0800)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/blkdev.cc
src/common/blkdev.h

index 7c838341360ddb7ac75c707107b33f87f041c05b..70dde42010fbbda53a4f157dda1831272693fd19 100644 (file)
 #ifdef __linux__
 #include <linux/fs.h>
 
+static const char *sandbox_dir = "";
+
+void set_block_device_sandbox_dir(const char *dir)
+{
+  if (dir)
+    sandbox_dir = dir;
+  else
+    sandbox_dir = "";
+}
+
 int get_block_device_size(int fd, int64_t *psize)
 {
 #ifdef BLKGETSIZE64
@@ -52,7 +62,7 @@ int get_block_device_base(const char *dev, char *out, size_t out_len)
     if (*p == '/')
       *p = '!';
 
-  snprintf(fn, sizeof(fn), "/sys/block/%s", devname);
+  snprintf(fn, sizeof(fn), "%s/sys/block/%s", sandbox_dir, devname);
   if (stat(fn, &st) == 0) {
     if (strlen(devname) + 1 > out_len) {
       return -ERANGE;
@@ -61,7 +71,8 @@ int get_block_device_base(const char *dev, char *out, size_t out_len)
     return 0;
   }
 
-  dir = opendir("/sys/block");
+  snprintf(fn, sizeof(fn), "%s/sys/block", sandbox_dir);
+  dir = opendir(fn);
   if (!dir)
     return -errno;
 
@@ -75,7 +86,8 @@ int get_block_device_base(const char *dev, char *out, size_t out_len)
     }
     if (de->d_name[0] == '.')
       continue;
-    snprintf(fn, sizeof(fn), "/sys/block/%s/%s", de->d_name, devname);
+    snprintf(fn, sizeof(fn), "%s/sys/block/%s/%s", sandbox_dir, de->d_name,
+            devname);
 
     if (stat(fn, &st) == 0) {
       // match!
@@ -111,7 +123,7 @@ int64_t get_block_device_int_property(const char *devname, const char *property)
     return r;
 
   snprintf(filename, sizeof(filename),
-          "/sys/block/%s/queue/discard_granularity", basename);
+          "%s/sys/block/%s/queue/discard_granularity", sandbox_dir, basename);
 
   FILE *fp = fopen(filename, "r");
   if (fp == NULL) {
index 3f1277800151a76015e7519588a58fedef2bbd5e..5c63ac97fdd26627287159ea99c2dfc54b65e8c0 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef __CEPH_COMMON_BLKDEV_H
 #define __CEPH_COMMON_BLKDEV_H
 
+/* for testing purposes */
+extern void set_block_device_sandbox_dir(const char *dir);
+
 extern int get_block_device_base(const char *dev, char *out, size_t out_len);
 extern int get_block_device_size(int fd, int64_t *psize);
 extern int64_t get_block_device_int_property(const char *devname, const char *property);