work in progress on unit tests for parse event...
authorJan Pospíšil <honik@ntc.zcu.cz>
Tue, 26 Oct 2004 16:41:57 +0000 (16:41 +0000)
committerJan Pospíšil <honik@ntc.zcu.cz>
Tue, 26 Oct 2004 16:41:57 +0000 (16:41 +0000)
org.glite.lb.common/src/context.c
org.glite.lb.common/src/events_parse.c.T
org.glite.lb.common/test/parse.cpp.T

index 73eafa1..cb1a385 100644 (file)
@@ -90,6 +90,7 @@ static const char* const errTexts[] = {
        "Duplicate ULM key",
        "Misuse of ULM key",
        "Warning: extra ULM fields",
+       "Compared events differ",
        "XML Parse error",
        "Server response error",
        "Bad JobId format",
index 87512b2..71e3e99 100644 (file)
@@ -319,7 +319,7 @@ for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
 }
 
 /* put it all together (inc. the ending LF) */
-if (asprintf(&logline,"%s%s%s\n",common,user,var) == -1) NOMEM
+if (trio_asprintf(&logline,"%s%s%s\n",common,user,var) == -1) NOMEM
 
 clean:
        if (date) free(date);
@@ -418,6 +418,58 @@ end:
        return ret;
 }
 
+/**
+ * edg_wll_CompareEvents - compare two event structures
+ * Calls: 
+ * Algorithm:
+ */
+edg_wll_ErrorCode edg_wll_CompareEvents(
+       edg_wll_Context context,        /* context IN */
+       const edg_wll_Event *e1,        /* event 1 IN */ 
+       const edg_wll_Event *e2         /* event 2 IN */
+)
+{
+       if (e1->any.type != e2->any.type) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,"Different event types");
+@@@{
+       selectType $event '_common_';
+       for ($event->getFieldsOrdered) {
+               my $f = selectField $event $_;
+               my $fn = getName $f;
+               my $ft = $f->{type};
+
+               my $a = "e1->any.$fn";
+               my $b = "e2->any.$fn";
+
+               gen "\tif (!(".eval($main::compare{C}->{$ft}).")) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,\"Different $fn\");\n";
+       }
+       
+       gen "\tswitch(e1->any.type) {\n";
+       for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
+               $event->getTypes)
+       {
+               my $tu = uc $t;
+               my $tl = lcfirst $t;
+
+               selectType $event $t;
+               gen "\t\tcase EDG_WLL_EVENT\_$tu :\n";
+               for ($event->getFieldsOrdered) {
+                       my $f = selectField $event $_;
+                       my $fn = $f->{name};
+                       my $ft = $f->{type};
+
+                       my $a = "e1->$tl.$fn";
+                       my $b = "e2->$tl.$fn";
+
+                       gen "\t\t\tif (!(".eval($main::compare{C}->{$ft}).")) return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,\"Different $fn\");\n";
+               }
+               gen "\t\tbreak;\n";
+       }
+@@@}
+               default: return edg_wll_SetError(context,EDG_WLL_ERROR_COMPARE_EVENTS,"Unknown difference");
+       } /* switch */
+       return edg_wll_ResetError(context);
+}
+
 
 /**
  * my_edg_wll_ULMGetValueAt - get value at index, but also
@@ -721,7 +773,7 @@ $indent = "   ";
 @@@}
 
 /* put it all together (inc. the ending LF) */
-if (asprintf(&logline,"%s%s\n",common,var) == -1) NOMEM
+if (trio_asprintf(&logline,"%s%s\n",common,var) == -1) NOMEM
 
 clean:
         if (date) free(date);
index 18f2736..ad37a40 100644 (file)
@@ -13,56 +13,30 @@ class EventParseTest: public  CppUnit::TestFixture
 {
        CPPUNIT_TEST_SUITE(EventParseTest);
        CPPUNIT_TEST(regJob);
+/*
+@@@{
+        for my $e ($event->getTypesOrdered) {
+                my $u = lcfirst $e;
+                my $c = getTypeComment $event $e;
+                gen "\tCPPUNIT_TEST($u);\n";
+        }
+@@@}
+*/
        CPPUNIT_TEST_SUITE_END();
 
 public:
        void regJob();
-
-
-};
-
-static char * compare_events(const edg_wll_Event *e1, const edg_wll_Event *e2)
-{
-       if (e1->any.type != e2->any.type) return "type";
+/*
 @@@{
-       selectType $event '_common_';
-       for ($event->getFieldsOrdered) {
-               my $f = selectField $event $_;
-               my $fn = getName $f;
-               my $ft = $f->{type};
-
-               my $a = "e1->any.$fn";
-               my $b = "e2->any.$fn";
-
-               gen "\tif (!(".eval($main::compare{C}->{$ft}).")) return \"$fn\";\n";
-       }
-       
-       gen "\tswitch(e1->any.type) {\n";
-       for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
-               $event->getTypes)
-       {
-               my $tu = uc $t;
-               my $tl = lcfirst $t;
-
-               selectType $event $t;
-               gen "\t\tcase EDG_WLL_EVENT\_$tu :\n";
-               for ($event->getFieldsOrdered) {
-                       my $f = selectField $event $_;
-                       my $fn = $f->{name};
-                       my $ft = $f->{type};
-
-                       my $a = "e1->$tl.$fn";
-                       my $b = "e2->$tl.$fn";
-
-                       gen "\t\t\tif (!(".eval($main::compare{C}->{$ft}).")) return \"$fn\";\n";
-               }
-               gen "\t\tbreak;\n";
-       }
+        for my $e ($event->getTypesOrdered) {
+                my $u = lcfirst $e;
+                my $c = getTypeComment $event $e;
+                gen "\tvoid $u();\n";
+        }
 @@@}
-               default: return "default";
-       } /* switch */
-       return NULL;
-}
+*/
+
+};
 
 void EventParseTest::regJob()
 {
@@ -95,19 +69,77 @@ void EventParseTest::regJob()
        
        if (!line) {
                edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("UnparseEvent():") + et + " " + ed, line);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_UnparseEvent():") + et + " " + ed, line);
        }
 
        if (edg_wll_ParseEvent(ctx,line,&e2)) {
                edg_wll_Error(ctx,&et,&ed);
-               CPPUNIT_ASSERT_MESSAGE(std::string("ParseEvent():") + et + " " + ed, 0);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_ParseEvent():") + et + " " + ed, 0);
        }
 
-       if ((et = compare_events(e1,e2))) {
-               CPPUNIT_ASSERT_MESSAGE(std::string("compare_events():") + et, 0);
+       if ((edg_wll_CompareEvents(ctx,e1,e2))) {
+               edg_wll_Error(ctx,&et,&ed);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_CompareEvents():") + et + " " + ed, 0);
        }
 }
 
+/*
+@@@{
+        for my $e ($event->getTypesOrdered) {
+                my $l = lcfirst $e;
+                my $u = uc $e;
+                my $c = getTypeComment $event $e;
+                gen "
+void EventParseTest::$l(){
+       edg_wll_Context ctx;
+       edg_wll_Event   *e1,*e2;
+       char    *line,*et,*ed;
+
+       edg_wll_InitContext(&ctx);
+       e1 = edg_wll_InitEvent(EDG_WLL_EVENT_$u);
+       e1->any.type = EDG_WLL_EVENT_$u;
+";
+
+               selectType $event '_common_';
+               for ($event->getFieldsOrdered) {
+                       my $f = selectField $event $_;
+                       my $fn = getName $f;
+                       my $value = getDefaultTestValue $f;
+                       if (!$f->{codes}) {
+                               if (!$f->hasAlias('ULM')) {
+                                       my $fu = uc $fn;
+                                       gen "\te1->any.$fn = $value;\n";
+#                                      gen "\tif (". $f->isNULL("e1->any.$fn") .") MISSING(EDG_WLL\_COMMON\_$fu)\n";
+                               } else {
+                                       my $fa = $f->getName('ULM');
+                                       my $fu = uc $fa;
+#                                      gen "\tif (". $f->isNULL("e1->any.$fn") .") MISSING(ULM\_$fu)\n";
+                               }
+                       }
+               }
+               gen '
+       if (!line) {
+               edg_wll_Error(ctx,&et,&ed);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_UnparseEvent():") + et + " " + ed, line);
+       }
+
+       if (edg_wll_ParseEvent(ctx,line,&e2)) {
+               edg_wll_Error(ctx,&et,&ed);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_ParseEvent():") + et + " " + ed, 0);
+       }
+
+       if ((edg_wll_CompareEvents(ctx,e1,e2))) {
+               edg_wll_Error(ctx,&et,&ed);
+               CPPUNIT_ASSERT_MESSAGE(std::string("edg_wll_CompareEvents():") + et + " " + ed, 0);
+       }
+}
+
+';
+
+        }
+@@@}
+*/
+
 CPPUNIT_TEST_SUITE_REGISTRATION( EventParseTest );
 
 int main (int ac,const char *av[])