parmlist: Add more tests.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 27 Sep 2009 15:37:53 +0000 (17:37 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 27 Sep 2009 15:37:53 +0000 (17:37 +0200)
lib/util/parmlist.c
lib/util/parmlist.h
lib/util/tests/parmlist.c
source4/param/generic.c
source4/param/loadparm.c

index ffcd19a4ab6adaf98c4741d32706fb918b5f85f1..6658fa7e33290039511ebaff759346711381410d 100644 (file)
@@ -78,3 +78,29 @@ const char **parmlist_get_string_list(struct parmlist *ctx, const char *name,
 
        return (const char **)str_list_make(ctx, p->value, separator);
 }
+
+static struct parmlist_entry *parmlist_get_add(struct parmlist *ctx, const char *name)
+{
+       struct parmlist_entry *e = parmlist_get(ctx, name);
+
+       if (e != NULL)
+               return e;
+
+       e = talloc(ctx, struct parmlist_entry);
+       if (e == NULL)
+               return NULL;
+       e->key = talloc_strdup(e, name);
+       DLIST_ADD(ctx->entries, e);
+       return e;
+}
+
+int parmlist_set_string(struct parmlist *ctx, const char *name, 
+                                               const char *value)
+{
+       struct parmlist_entry *e = parmlist_get_add(ctx, name);
+       if (e == NULL)
+               return -1;
+
+       e->value = talloc_strdup(e, value);
+       return 0;
+}
index 47d2f89d63da8977d17b760cc9ab2de227bf2a63..b320afee4701265faaa4d6f8cde2e2235100f988 100644 (file)
@@ -50,4 +50,7 @@ const char **parmlist_get_string_list(struct parmlist *ctx, const char *name,
 /** Retrieve boolean from a parameter list. If not set, return default_v. */
 bool parmlist_get_bool(struct parmlist *ctx, const char *name, bool default_v);
 
+/** Set a parameter. */
+int parmlist_set_string(struct parmlist *ctx, const char *name, const char *value);
+
 #endif /* _PARMLIST_H */
index 6323fdc59940f2f28a96dea45cb6297c603a25c5..4b1d8757152c786fb1f6a7d168607ddbc1893b3c 100644 (file)
@@ -28,19 +28,79 @@ static bool test_get_int(struct torture_context *tctx)
        struct parmlist *pctx = talloc_zero(tctx, struct parmlist);
        parmlist_set_string(pctx, "bar", "3");
        parmlist_set_string(pctx, "notint", "bla");
-       torture_assert_int_equal(3, parmlist_get_int(pctx, "bar", 42));
-       torture_assert_int_equal(42, parmlist_get_int(pctx, "foo", 42),
+       torture_assert_int_equal(tctx, 3, parmlist_get_int(pctx, "bar", 42), 
+                                                        "existing");
+       torture_assert_int_equal(tctx, 42, parmlist_get_int(pctx, "foo", 42),
                                                         "default");
-       torture_assert_int_equal(0, parmlist_get_int(pctx, "notint", 42)
+       torture_assert_int_equal(tctx, 0, parmlist_get_int(pctx, "notint", 42),
                                                         "Not an integer");
        return true;
 }
 
+static bool test_get_string(struct torture_context *tctx)
+{
+       struct parmlist *pctx = talloc_zero(tctx, struct parmlist);
+       parmlist_set_string(pctx, "bar", "mystring");
+       torture_assert_str_equal(tctx, "mystring", 
+               parmlist_get_string(pctx, "bar", "bla"), "existing");
+       torture_assert_str_equal(tctx, "bla", 
+               parmlist_get_string(pctx, "foo", "bla"), "default");
+       return true;
+}
+
+static bool test_get(struct torture_context *tctx)
+{
+       struct parmlist *pctx = talloc_zero(tctx, struct parmlist);
+       struct parmlist_entry *e;
+       parmlist_set_string(pctx, "bar", "mystring");
+
+       e = parmlist_get(pctx, "bar");
+       torture_assert(tctx, e != NULL, "entry");
+       torture_assert_str_equal(tctx, e->key, "bar", "key");
+       torture_assert_str_equal(tctx, e->value, "mystring", "value");
+
+       e = parmlist_get(pctx, "nonexistant");
+       torture_assert(tctx, e == NULL, "nonexistant");
+       return true;
+}
+
+static bool test_get_bool(struct torture_context *tctx)
+{
+       struct parmlist *pctx = talloc_zero(tctx, struct parmlist);
+       parmlist_set_string(pctx, "bar", "true");
+       parmlist_set_string(pctx, "gasoline", "invalid");
+
+       torture_assert(tctx, parmlist_get_bool(pctx, "bar", false), "set");
+       torture_assert(tctx, !parmlist_get_bool(pctx, "foo", false), "default");
+       torture_assert(tctx, !parmlist_get_bool(pctx, "gasoline", false), 
+                                  "invalid");
+       return true;
+}
+
+static bool test_get_string_list(struct torture_context *tctx)
+{
+       struct parmlist *pctx = talloc_zero(tctx, struct parmlist);
+       const char **ret;
+       parmlist_set_string(pctx, "bar", "true, false");
+
+       ret = parmlist_get_string_list(pctx, "bar", NULL);
+       torture_assert_int_equal(tctx, str_list_length(ret), 2, "length");
+       torture_assert_str_equal(tctx, "true", ret[0], "ret[0]");
+       torture_assert_str_equal(tctx, "false", ret[1], "ret[1]");
+       torture_assert(tctx, NULL == parmlist_get_string_list(pctx, "nonexistant", NULL), "nonexistant");
+
+       return true;
+}
+
 struct torture_suite *torture_local_util_parmlist(TALLOC_CTX *mem_ctx)
 {
        struct torture_suite *suite = torture_suite_create(mem_ctx, "PARMLIST");
 
        torture_suite_add_simple_test(suite, "get_int", test_get_int);
+       torture_suite_add_simple_test(suite, "get_string", test_get_string);
+       torture_suite_add_simple_test(suite, "get", test_get);
+       torture_suite_add_simple_test(suite, "get_bool", test_get_bool);
+       torture_suite_add_simple_test(suite, "get_string_list", test_get_string_list);
 
        return suite;
 }
index 802f90764c5b8421242c75ff9b16592fd4a48b1d..41d01de9d38ca67c63bec995ad7b262a43156a63 100644 (file)
@@ -92,16 +92,14 @@ const char *param_get_string(struct param_context *ctx, const char *param, const
        return parmlist_get_string(section->parameters, param, NULL);
 }
 
-int param_set_string(struct param_context *ctx, const char *param, const char *value, const char *section)
+int param_set_string(struct param_context *ctx, const char *param, const char *value, const char *section_name)
 {
-       struct parmlist_entry *p = param_get_add(ctx, param, section);
+       struct param_section *section = param_get_section(ctx, section_name);
 
-       if (p == NULL)
+       if (section == NULL)
                return -1;
 
-       p->value = talloc_strdup(p, value);
-
-       return 0;
+       return parmlist_set_string(section->parameters, param, value);
 }
 
 const char **param_get_string_list(struct param_context *ctx, const char *param, const char *separator, const char *section_name)
index 21e01b74fd5747b05f8d997f0f9f298bf194c1e0..f7cd95bf4c04d117d8e1b6743ec424de573d6cf7 100644 (file)
@@ -182,7 +182,7 @@ struct loadparm_global
        int bDisableNetbios;
        int bRpcBigEndian;
        char *szNTPSignDSocketDirectory;
-       struct param_opt *param_opt;
+       struct parmlist_entry *param_opt;
 };
 
 
@@ -222,7 +222,7 @@ struct loadparm_service
        int bMSDfsRoot;
        int bStrictSync;
        int bCIFileSystem;
-       struct param_opt *param_opt;
+       struct parmlist_entry *param_opt;
 
        char dummy[3];          /* for alignment */
 };
@@ -749,7 +749,7 @@ const char *lp_get_parametric(struct loadparm_context *lp_ctx,
                              const char *type, const char *option)
 {
        char *vfskey;
-        struct param_opt *data;
+        struct parmlist_entry *data;
 
        if (lp_ctx == NULL)
                return NULL;
@@ -1020,7 +1020,7 @@ struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
        int i;
        struct loadparm_service tservice;
        int num_to_alloc = lp_ctx->iNumServices + 1;
-       struct param_opt *data, *pdata;
+       struct parmlist_entry *data, *pdata;
 
        tservice = *pservice;
 
@@ -1260,7 +1260,7 @@ static void copy_service(struct loadparm_service *pserviceDest,
 {
        int i;
        bool bcopyall = (pcopymapDest == NULL);
-       struct param_opt *data, *pdata, *paramo;
+       struct parmlist_entry *data, *pdata, *paramo;
        bool not_added;
 
        for (i = 0; parm_table[i].label; i++)
@@ -1328,7 +1328,7 @@ static void copy_service(struct loadparm_service *pserviceDest,
                        pdata = pdata->next;
                }
                if (not_added) {
-                       paramo = talloc(pserviceDest, struct param_opt);
+                       paramo = talloc(pserviceDest, struct parmlist_entry);
                        if (paramo == NULL)
                                smb_panic("OOM");
                        paramo->key = talloc_reference(paramo, data->key);
@@ -1544,7 +1544,7 @@ static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx,
                                       const char *pszParmName,
                                       const char *pszParmValue, int flags)
 {
-       struct param_opt *paramo, *data;
+       struct parmlist_entry *paramo, *data;
        char *name;
        TALLOC_CTX *mem_ctx;
 
@@ -1583,7 +1583,7 @@ static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx,
                }
        }
 
-       paramo = talloc(mem_ctx, struct param_opt);
+       paramo = talloc(mem_ctx, struct parmlist_entry);
        if (!paramo)
                smb_panic("OOM");
        paramo->key = talloc_strdup(paramo, name);
@@ -2048,7 +2048,7 @@ static void dump_globals(struct loadparm_context *lp_ctx, FILE *f,
                         bool show_defaults)
 {
        int i;
-       struct param_opt *data;
+       struct parmlist_entry *data;
 
        fprintf(f, "# Global parameters\n[global]\n");
 
@@ -2078,7 +2078,7 @@ static void dump_globals(struct loadparm_context *lp_ctx, FILE *f,
 static void dump_a_service(struct loadparm_service * pService, struct loadparm_service *sDefault, FILE * f)
 {
        int i;
-       struct param_opt *data;
+       struct parmlist_entry *data;
 
        if (pService != sDefault)
                fprintf(f, "\n[%s]\n", pService->szService);
@@ -2217,10 +2217,10 @@ void lp_killunused(struct loadparm_context *lp_ctx,
 
 static int lp_destructor(struct loadparm_context *lp_ctx)
 {
-       struct param_opt *data;
+       struct parmlist_entry *data;
 
        if (lp_ctx->globals->param_opt != NULL) {
-               struct param_opt *next;
+               struct parmlist_entry *next;
                for (data = lp_ctx->globals->param_opt; data; data=next) {
                        next = data->next;
                        if (data->priority & FLAG_CMDLINE) continue;