Changeset cb1800


Ignore:
Timestamp:
2009-11-24 17:52:30 (4 years ago)
Author:
Poul-Henning Kamp <phk@…>
Branches:
master, 3.0, 4.0, experimental-ims
Children:
d260cf5
Parents:
970acf
git-author:
Poul-Henning Kamp <phk@…> (2009-11-24 17:52:30)
git-committer:
Poul-Henning Kamp <phk@…> (2009-11-24 17:52:30)
Message:

Add a internal macro/variable facility to varnishtest, so that we can
refer to things like servers ip/port rather than hardcode it.

git-svn-id:  http://www.varnish-cache.org/svn/trunk/varnish-cache@4360 d4fa192b-c00b-0410-8231-f00ffab90ce4

Location:
bin/varnishtest
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • bin/varnishtest/vtc.c

    r970acf rcb1800  
    3737#include <fcntl.h> 
    3838#include <pthread.h> 
     39#include <stdarg.h> 
    3940#include <stdlib.h> 
    4041#include <unistd.h> 
     
    4344#include "libvarnish.h" 
    4445#include "vsb.h" 
     46#include "vqueue.h" 
     47#include "miniobj.h" 
    4548 
    4649#include "vtc.h" 
     
    5457int             vtc_stop;               /* Stops current test without error */ 
    5558pthread_t       vtc_thread; 
     59 
     60/********************************************************************** 
     61 * Macro facility 
     62 */ 
     63 
     64struct macro { 
     65        VTAILQ_ENTRY(macro)     list; 
     66        char                    *name; 
     67        char                    *val; 
     68}; 
     69 
     70static VTAILQ_HEAD(,macro) macro_list = VTAILQ_HEAD_INITIALIZER(macro_list); 
     71 
     72static pthread_mutex_t          macro_mtx; 
     73 
     74static void 
     75init_macro(void) 
     76{ 
     77        AZ(pthread_mutex_init(&macro_mtx, NULL)); 
     78} 
     79 
     80void 
     81macro_def(struct vtclog *vl, const char *instance, const char *name, 
     82    const char *fmt, ...) 
     83{ 
     84        char buf[256]; 
     85        struct macro *m; 
     86        va_list ap; 
     87 
     88        if (instance != NULL) { 
     89                assert (snprintf(buf, sizeof buf, "%s_%s", instance, name) 
     90                    < sizeof buf); 
     91                name = buf; 
     92        } 
     93 
     94        AZ(pthread_mutex_lock(&macro_mtx)); 
     95        VTAILQ_FOREACH(m, &macro_list, list) 
     96                if (!strcmp(name, m->name)) 
     97                        break; 
     98        if (m == NULL && fmt != NULL) { 
     99                m = calloc(sizeof *m, 1); 
     100                AN(m); 
     101                REPLACE(m->name, name); 
     102                VTAILQ_INSERT_TAIL(&macro_list, m, list); 
     103        } 
     104        if (fmt != NULL) { 
     105                AN(m); 
     106                va_start(ap, fmt); 
     107                free(m->val); 
     108                m->val = NULL; 
     109                (void)vasprintf(&m->val, fmt, ap); 
     110                va_end(ap); 
     111                AN(m->val); 
     112                vtc_log(vl, 2, "macro def %s=%s", m->name, m->val); 
     113        } else if (m != NULL) { 
     114                vtc_log(vl, 2, "macro undef %s", m->name); 
     115                VTAILQ_REMOVE(&macro_list, m, list); 
     116                free(m->name); 
     117                free(m->val); 
     118                free(m); 
     119        } 
     120        AZ(pthread_mutex_unlock(&macro_mtx)); 
     121} 
     122 
     123static char * 
     124macro_get(const char *name) 
     125{ 
     126        struct macro *m; 
     127 
     128        char *retval = NULL; 
     129        AZ(pthread_mutex_lock(&macro_mtx)); 
     130        VTAILQ_FOREACH(m, &macro_list, list) 
     131                if (!strcmp(name, m->name)) 
     132                        break; 
     133        if (m != NULL) 
     134                retval = strdup(m->val); 
     135        AZ(pthread_mutex_unlock(&macro_mtx)); 
     136        return (retval); 
     137} 
    56138 
    57139/********************************************************************** 
     
    172254                        AN(token_e[tn]);        /*lint !e771 */ 
    173255                        *token_e[tn] = '\0';    /*lint !e771 */ 
     256                        if (token_s[tn][0] == '$') { 
     257                                q = macro_get(token_s[tn] + 1); 
     258                                if (q == NULL) 
     259                                        vtc_log(vl, 0, 
     260                                            "Unknown macro: \"%s\"", token_s[tn]); 
     261                                token_s[tn] = q; 
     262                                token_e[tn] = strchr(token_s[tn], '\0'); 
     263                        } 
    174264                } 
    175265 
     
    412502                usage(); 
    413503 
     504        init_macro(); 
    414505        init_sema(); 
    415506 
  • bin/varnishtest/vtc.h

    r5a6dbc rcb1800  
    7373void vtc_dump(struct vtclog *vl, unsigned lvl, const char *pfx, 
    7474    const char *str); 
     75 
     76void macro_def(struct vtclog *vl, const char *instance, const char *name, const char *fmt, ...); 
     77 
Note: See TracChangeset for help on using the changeset viewer.