Browse Source

HPCC-19235 Remove timestamps from regression suite output

Remove times from exceptions, and some other details that change between
runs and versions.

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 6 years ago
parent
commit
6f9fc55f8b
4 changed files with 28 additions and 11 deletions
  1. 21 4
      common/workunit/workunit.cpp
  2. 1 1
      common/workunit/workunit.ipp
  3. 2 2
      ecl/hqlcpp/hqlcerrors.hpp
  4. 4 4
      ecl/hqlcpp/hqlhtcpp.cpp

+ 21 - 4
common/workunit/workunit.cpp

@@ -11568,7 +11568,7 @@ extern WORKUNIT_API StringBuffer &exportWorkUnitToXML(const IConstWorkUnit *wu,
         return str.append("Unrecognized workunit format");
 }
 
-extern WORKUNIT_API void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const char * filename, unsigned extraXmlFlags, bool unpack, bool includeProgress, bool hidePasswords, bool splitStats)
+extern WORKUNIT_API void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const char * filename, unsigned extraXmlFlags, bool unpack, bool includeProgress, bool hidePasswords, bool regressionTest)
 {
     const IExtendedWUInterface *ewu = queryExtendedWU(wu);
     if (ewu)
@@ -11576,20 +11576,37 @@ extern WORKUNIT_API void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const
         Linked<IPropertyTree> p;
         if (unpack||includeProgress)
             p.setown(ewu->getUnpackedTree(includeProgress));
+        else if (regressionTest)
+            p.setown(createPTreeFromIPT(ewu->queryPTree()));
         else
             p.set(ewu->queryPTree());
         if (hidePasswords)
             return exportWorkUnitToXMLFileWithHiddenPasswords(p, filename, extraXmlFlags);
-        if (splitStats)
+
+        if (regressionTest)
         {
-            StringBuffer statsFilename;
-            statsFilename.append(filename).append(".stats");
+            //This removes any items from the xml that will vary from run to run, so they can be binary compared from run to run
+            //The following attributes change with the build.  Simpler to remove rather than needing to updated each build
+            p->removeProp("@buildVersion");
+            p->removeProp("@eclVersion");
+            p->removeProp("@hash");
+
+            //Remove statistics, and extract them to a separate file
             IPropertyTree * stats = p->queryPropTree("Statistics");
             if (stats)
             {
+                StringBuffer statsFilename;
+                statsFilename.append(filename).append(".stats");
                 saveXML(statsFilename, stats, 0, (XML_Format|XML_SortTags|extraXmlFlags) & ~XML_LineBreakAttributes);
                 p->removeProp("Statistics");
             }
+            //Now remove timestamps from exceptions
+            Owned<IPropertyTreeIterator> elems = p->getElements("Exceptions/Exception", iptiter_sort);
+            ForEach(*elems)
+            {
+                IPropertyTree &elem = elems->query();
+                elem.removeProp("@time");
+            }
         }
         saveXML(filename, p, 0, XML_Format|XML_SortTags|extraXmlFlags);
     }

+ 1 - 1
common/workunit/workunit.ipp

@@ -189,7 +189,7 @@ template <>  struct CachedTags<CLocalWUAppValue, IConstWUAppValue>
 class WORKUNIT_API CLocalWorkUnit : implements IWorkUnit , implements IExtendedWUInterface, public CInterface
 {
     friend StringBuffer &exportWorkUnitToXML(const IConstWorkUnit *wu, StringBuffer &str, bool decodeGraphs, bool includeProgress, bool hidePasswords);
-    friend void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const char * filename, unsigned extraXmlFlags, bool decodeGraphs, bool includeProgress, bool hidePasswords, bool splitStats);
+    friend void exportWorkUnitToXMLFile(const IConstWorkUnit *wu, const char * filename, unsigned extraXmlFlags, bool decodeGraphs, bool includeProgress, bool hidePasswords, bool regressionTest);
 
 protected:
     Owned<IPropertyTree> p;

+ 2 - 2
ecl/hqlcpp/hqlcerrors.hpp

@@ -170,7 +170,7 @@
 #define HQLERR_CouldNotFindDataset              4158
 #define HQLERR_CouldNotAnyDatasetX              4159
 #define HQLERR_NestedThorNodes                  4160
-#define HQLERR_MissingTransformAssignXX         4161
+#define HQLERR_MissingTransformAssignX          4161
 #define HQLERR_JoinXTooComplex                  4162
 #define HQLERR_GlobalDedupFuzzy                 4163
 #define HQLERR_GlobalDedupNoEquality            4164
@@ -480,7 +480,7 @@
 #define HQLERR_CouldNotFindDataset_Text         "Could not find dataset %s"
 #define HQLERR_CouldNotAnyDatasetX_Text         "Could not find dataset %s (no tables in scope)"
 #define HQLERR_NestedThorNodes_Text             "INTERNAL: Thor nodes should not be nested"
-#define HQLERR_MissingTransformAssignXX_Text    "INTERNAL: Missing assignment from transform to %s[%p]"
+#define HQLERR_MissingTransformAssignX_Text     "INTERNAL: Missing assignment from transform to %s"
 #define HQLERR_JoinXTooComplex_Text             "JOIN%s contains no equality conditions - use ,ALL to allow"
 #define HQLERR_GlobalDedupFuzzy_Text            "A global DEDUP(ALL) or local hash dedup cannot include comparisons in the dedup criteria"
 #define HQLERR_GlobalDedupNoEquality_Text       "Global dedup,ALL must have a field to partition"

+ 4 - 4
ecl/hqlcpp/hqlhtcpp.cpp

@@ -862,9 +862,9 @@ protected:
 
     virtual void onMissingAssignment(IHqlExpression * expr)
     {
-            StringBuffer s;
-            expr->toString(s);
-            throwError2(HQLERR_MissingTransformAssignXX, s.str(), expr);
+        StringBuffer s;
+        expr->toString(s);
+        throwError1(HQLERR_MissingTransformAssignX, s.str());
     }
 
     void pushCondition(IHqlExpression * cond)
@@ -11407,7 +11407,7 @@ void HqlCppTranslator::buildXmlSerialize(BuildCtx & subctx, IHqlExpression * exp
                     {
                         StringBuffer s;
                         expr->toString(s);
-                        throwError2(HQLERR_MissingTransformAssignXX, s.str(), expr);
+                        throwError1(HQLERR_MissingTransformAssignX, s.str());
                     }
 
                     selected.set(match->queryChild(0));