/* utilitarian functions used in the lower level handlers */ int get_value( char *s, const char *name, long long * valp) { char buf [CHAR_BUFFER_SIZE]; if (s==NULL || name==NULL || valp==NULL) return ERROR; snprintf (buf, CHAR_BUFFER_SIZE, "%s=%%lld", name); return (sscanf_lines (s, buf, valp)==1 ? OK : ERROR); }
int main (int argc, char **argv) { printf ("=====> testing misc.c\n"); test_command("date"); test_command("ls / -l | sort"); test_command("/foo"); { char c = 0; long l = 0; int i = 0; long long ll = 0; sscanf_lines ("a1\na\na2\n", "a%d", &i); assert (i==1); sscanf_lines ("a\nab3\na 4\na5", "a %d", &i); assert (i==4); sscanf_lines ("", "%d", &i); sscanf_lines ("\n\n\n", "%d", &i); sscanf_lines ("abcdefg6", "g%d", &i); assert (i!=6); sscanf_lines ("abcdefg", "ab%cdefg", &c); assert (c=='c'); sscanf_lines ("a\na 7\na\n", "a %ld", &l); assert (l==7L); sscanf_lines ("a\n8a\na9\n", "a %lld", &ll); assert (ll==9L); } printf ("=====> testing data.c\n"); { #define INSTS 50 bunchOfInstances * bag = NULL; ncInstance * inst = NULL; ncInstance * Insts[INSTS]; int i, n; printf ("========> testing instance struct management\n"); free_instance (NULL); free_instance (&inst); inst = allocate_instance ("the-uuid", "i1", NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0); assert(inst!=NULL); free_instance (&inst); assert(inst==NULL); n = total_instances (&bag); assert(n==0); bag=NULL; inst = find_instance(&bag, "foo"); assert(inst==NULL); bag=NULL; n = remove_instance(&bag, NULL); assert(n!=0); bag=NULL; for (i=0; i<INSTS; i++) { char id[10]; sprintf(id, "i-%d", i); inst = Insts[i] = allocate_instance ("the-uuid", id, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0); assert (inst!=NULL); n = add_instance(&bag, inst); assert (n==0); } n = total_instances (&bag); assert (n==INSTS); n = remove_instance(&bag, Insts[0]); assert (n==0); n = remove_instance(&bag, Insts[INSTS-1]); assert (n==0); n = total_instances (&bag); assert (n==INSTS-2); printf ("========> testing volume struct management\n"); ncVolume * v; inst = allocate_instance ("the-uuid", "i2", NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0); assert(inst!=NULL); for (i=0; i<EUCA_MAX_VOLUMES; i++) { char id[10]; sprintf (id, "v-%d", i); v = save_volume (inst, id, "rd", "ld", "ldr", VOL_STATE_ATTACHED); assert (v!=NULL); } assert (is_volume_used (v)); assert (save_volume (inst, "too-much", "rd", "ld", "ldr", VOL_STATE_ATTACHED)==NULL); assert (save_volume (inst, v->volumeId, NULL, NULL, NULL, NULL)!=NULL); assert (save_volume (inst, v->volumeId, "RD", NULL, NULL, NULL)!=NULL); assert (save_volume (inst, v->volumeId, NULL, "LD", NULL, NULL)!=NULL); assert (save_volume (inst, v->volumeId, NULL, NULL, "LDR", NULL)!=NULL); assert (save_volume (inst, v->volumeId, NULL, NULL, NULL, VOL_STATE_DETACHED)!=NULL); assert (strcmp (v->remoteDev, "RD") == 0); assert (save_volume (inst, "v-x1", NULL, NULL, NULL, VOL_STATE_ATTACHING)!=NULL); assert (save_volume (inst, "v-x2", NULL, NULL, NULL, VOL_STATE_ATTACHING)==NULL); assert (save_volume (inst, "v-x1", NULL, NULL, NULL, VOL_STATE_DETACHING)!=NULL); assert (save_volume (inst, "v-x2", NULL, NULL, NULL, VOL_STATE_ATTACHING)==NULL); assert (save_volume (inst, "v-x1", NULL, NULL, NULL, VOL_STATE_DETACHING_FAILED)!=NULL); assert (save_volume (inst, "v-x2", NULL, NULL, NULL, VOL_STATE_ATTACHING)==NULL); assert (free_volume (inst, "v-x1")!=NULL); for (i=0; i<EUCA_MAX_VOLUMES-1; i++) { char id[10]; sprintf (id, "v-%d", i); v = free_volume (inst, id); assert (v!=NULL); } free_instance (&inst); assert(inst==NULL); } printf ("OK\n"); return 0; }