aboutsummaryrefslogtreecommitdiff
path: root/sysfsutils/test/test_attr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysfsutils/test/test_attr.c')
-rw-r--r--sysfsutils/test/test_attr.c318
1 files changed, 318 insertions, 0 deletions
diff --git a/sysfsutils/test/test_attr.c b/sysfsutils/test/test_attr.c
new file mode 100644
index 0000000..689a0e8
--- /dev/null
+++ b/sysfsutils/test/test_attr.c
@@ -0,0 +1,318 @@
+/*
+ * test_dir.c
+ *
+ * Tests for directory related functions for the libsysfs testsuite
+ *
+ * Copyright (C) IBM Corp. 2004-2005
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/**
+ ***************************************************************************
+ * this will test the directory related functions provided by libsysfs.
+ *
+ * extern void sysfs_close_attribute(struct sysfs_attribute *sysattr);
+ * extern struct sysfs_attribute *sysfs_open_attribute
+ * (const char *path);
+ * extern int sysfs_read_attribute(struct sysfs_attribute *sysattr);
+ * extern int sysfs_write_attribute(struct sysfs_attribute *sysattr,
+ * const char *new_value, size_t len);
+ ****************************************************************************
+ */
+
+#include "test-defs.h"
+#include <errno.h>
+
+/**
+ * extern void sysfs_close_attribute(struct sysfs_attribute *sysattr);
+ *
+ * flag:
+ * 0: sysattr -> valid
+ * 1: sysattr -> NULL
+ */
+int test_sysfs_close_attribute(int flag)
+{
+ struct sysfs_attribute *sysattr = NULL;
+ char *path = NULL;
+
+ switch (flag) {
+ case 0:
+ path = val_file_path;
+ sysattr = sysfs_open_attribute(path);
+ if (sysattr == NULL) {
+ dbg_print("%s: Error opening attribute at %s\n",
+ __FUNCTION__, val_file_path);
+ return 0;
+ }
+ break;
+ case 1:
+ sysattr = NULL;
+ break;
+ default:
+ return -1;
+ }
+ sysfs_close_attribute(sysattr);
+
+ dbg_print("%s: returns void\n", __FUNCTION__);
+
+ return 0;
+}
+
+/**
+ * extern struct sysfs_attribute *sysfs_open_attribute
+ * (const char *path);
+ *
+ * flag:
+ * 0: path -> valid
+ * 1: path -> invalid
+ * 2: path -> NULL
+ */
+int test_sysfs_open_attribute(int flag)
+{
+ char *path = NULL;
+ struct sysfs_attribute *sysattr = NULL;
+
+ switch (flag) {
+ case 0:
+ path = val_file_path;
+ break;
+ case 1:
+ path = inval_path;
+ break;
+ case 2:
+ path = NULL;
+ break;
+ default:
+ return -1;
+ }
+ sysattr = sysfs_open_attribute(path);
+
+ switch (flag) {
+ case 0:
+ if (sysattr == NULL)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else {
+ dbg_print("%s: SUCCEEDED with flag = %d\n\n",
+ __FUNCTION__, flag);
+ dbg_print("Attrib name = %s, at %s\n\n",
+ sysattr->name, sysattr->path);
+ }
+ break;
+ case 1:
+ case 2:
+ if (sysattr != NULL)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else
+ dbg_print("%s: SUCCEEDED with flag = %d\n",
+ __FUNCTION__, flag);
+ break;
+ default:
+ break;
+
+ }
+ if (sysattr != NULL) {
+ sysfs_close_attribute(sysattr);
+ sysattr = NULL;
+ }
+
+ return 0;
+}
+
+/**
+ * extern int sysfs_read_attribute(struct sysfs_attribute *sysattr);
+ *
+ * flag:
+ * 0: sysattr -> valid
+ * 1: sysattr -> NULL
+ */
+int test_sysfs_read_attribute(int flag)
+{
+ struct sysfs_attribute *sysattr = NULL;
+ int ret = 0;
+
+ switch (flag) {
+ case 0:
+ sysattr = sysfs_open_attribute(val_file_path);
+ if (sysattr == NULL) {
+ dbg_print("%s: failed opening attribute at %s\n",
+ __FUNCTION__, val_file_path);
+ return 0;
+ }
+ break;
+ case 1:
+ sysattr = NULL;
+ break;
+ default:
+ return -1;
+ }
+ ret = sysfs_read_attribute(sysattr);
+
+ switch (flag) {
+ case 0:
+ if (ret != 0)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else {
+ dbg_print("%s: SUCCEEDED with flag = %d\n\n",
+ __FUNCTION__, flag);
+ show_attribute(sysattr);
+ dbg_print("\n");
+ }
+ break;
+ case 1:
+ if (ret == 0)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else
+ dbg_print("%s: SUCCEEDED with flag = %d\n",
+ __FUNCTION__, flag);
+ break;
+ default:
+ break;
+ }
+
+ if (sysattr != NULL)
+ sysfs_close_attribute(sysattr);
+
+ return 0;
+}
+
+/**
+ * extern int sysfs_write_attribute(struct sysfs_attribute *sysattr,
+ * const char *new_value, size_t len);
+ *
+ * flag:
+ * 0: sysattr -> valid, new_value -> valid, len -> valid;
+ * 1: sysattr -> valid, new_value -> invalid, len -> invalid;
+ * 2: sysattr -> valid, new_value -> NULL, len -> invalid;
+ * 3: sysattr -> NULL, new_value -> valid, len -> valid;
+ * 4: sysattr -> NULL, new_value -> invalid, len -> invalid;
+ * 5: sysattr -> NULL, new_value -> NULL, len -> invalid;
+ */
+int test_sysfs_write_attribute(int flag)
+{
+ struct sysfs_attribute *sysattr = NULL;
+ char *new_value = NULL;
+ size_t len = 0;
+ int ret = 0;
+
+ switch (flag) {
+ case 0:
+ sysattr = sysfs_open_attribute(val_write_attr_path);
+ if (sysattr == NULL) {
+ dbg_print("%s: failed opening attribute at %s\n",
+ __FUNCTION__, val_write_attr_path);
+ return 0;
+ }
+ if (sysfs_read_attribute(sysattr) != 0) {
+ dbg_print("%s: failed reading attribute at %s\n",
+ __FUNCTION__, val_write_attr_path);
+ return 0;
+ }
+ new_value = calloc(1, sysattr->len + 1);
+ strncpy(new_value, sysattr->value, sysattr->len);
+ len = sysattr->len;
+ break;
+ case 1:
+ sysattr = sysfs_open_attribute(val_write_attr_path);
+ if (sysattr == NULL) {
+ dbg_print("%s: failed opening attribute at %s\n",
+ __FUNCTION__, val_write_attr_path);
+ return 0;
+ }
+ new_value = calloc(1, SYSFS_PATH_MAX);
+ strncpy(new_value, "this should not get copied in the attrib",
+ SYSFS_PATH_MAX);
+ len = SYSFS_PATH_MAX;
+ break;
+ case 2:
+ sysattr = sysfs_open_attribute(val_write_attr_path);
+ if (sysattr == NULL) {
+ dbg_print("%s: failed opening attribute at %s\n",
+ __FUNCTION__, val_write_attr_path);
+ return 0;
+ }
+ new_value = NULL;
+ len = SYSFS_PATH_MAX;
+ break;
+ case 3:
+ sysattr = sysfs_open_attribute(val_write_attr_path);
+ if (sysattr == NULL) {
+ dbg_print("%s: failed opening attribute at %s\n",
+ __FUNCTION__, val_write_attr_path);
+ return 0;
+ }
+ new_value = calloc(1, sysattr->len + 1);
+ strncpy(new_value, sysattr->value, sysattr->len);
+ len = sysattr->len;
+ sysfs_close_attribute(sysattr);
+ sysattr = NULL;
+ break;
+ case 4:
+ sysattr = NULL;
+ new_value = calloc(1, SYSFS_PATH_MAX);
+ strncpy(new_value, "this should not get copied in the attrib",
+ SYSFS_PATH_MAX);
+ len = SYSFS_PATH_MAX;
+ break;
+ case 5:
+ sysattr = NULL;
+ new_value = NULL;
+ len = SYSFS_PATH_MAX;
+ break;
+ default:
+ return -1;
+ }
+ ret = sysfs_write_attribute(sysattr, new_value, len);
+
+ switch (flag) {
+ case 0:
+ if (ret != 0)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else {
+ dbg_print("%s: SUCCEEDED with flag = %d\n\n",
+ __FUNCTION__, flag);
+ dbg_print("Attribute at %s now has value %s\n\n",
+ sysattr->path, sysattr->value);
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ if (ret == 0)
+ dbg_print("%s: FAILED with flag = %d errno = %d\n",
+ __FUNCTION__, flag, errno);
+ else
+ dbg_print("%s: SUCCEEDED with flag = %d\n",
+ __FUNCTION__, flag);
+ break;
+ default:
+ break;
+ }
+ if (sysattr != NULL) {
+ sysfs_close_attribute(sysattr);
+ sysattr = NULL;
+ }
+ if (new_value != NULL)
+ free(new_value);
+
+ return 0;
+}