file-checker: add error report and new report types
authorThiago Santos <thiago.sousa.santos@collabora.com>
Tue, 6 Aug 2013 13:36:02 +0000 (10:36 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Tue, 6 Aug 2013 13:36:02 +0000 (10:36 -0300)
Add a list of new report types and use them in the file-checker.
The errors are mostly related to testing file attributes against
expected values

validate/gst/qa/gst-qa-file-checker.c
validate/gst/qa/gst-qa-report.c
validate/gst/qa/gst-qa-report.h

index d885184..80c2e3c 100644 (file)
@@ -250,23 +250,35 @@ check_file_size (GstQaFileChecker * fc)
   gchar *filepath;
   guint64 size = 0;
   gboolean ret = TRUE;
+  GError *err;
 
-  filepath = g_filename_from_uri (fc->uri, NULL, NULL);
+  filepath = g_filename_from_uri (fc->uri, NULL, &err);
   if (!filepath) {
-    /* TODO is this an error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_NOT_FOUND,
+        "Failed to get filepath from uri %s. %s", fc->uri, err->message);
+    g_error_free (err);
     return FALSE;
   }
 
   if (g_stat (filepath, &statbuf) == 0) {
     size = statbuf.st_size;
+  } else {
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_NOT_FOUND,
+        "Failed to get file stats from uri %s", fc->uri);
+    ret = FALSE;
+    goto end;
   }
 
   if (size == 0) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_SIZE_IS_ZERO, "File %s has size 0",
+        fc->uri);
     ret = FALSE;
   } else if (size < fc->file_size - fc->file_size_tolerance ||
       size > fc->file_size + fc->file_size_tolerance) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_SIZE_INCORRECT,
+        "File %s has size %" G_GUINT64_FORMAT ", it was expected to have %"
+        G_GUINT64_FORMAT " (+-%" G_GUINT64_FORMAT ")",
+        fc->uri, size, fc->file_size, fc->file_size_tolerance);
     ret = FALSE;
     goto end;
   }
@@ -287,7 +299,11 @@ check_file_duration (GstQaFileChecker * fc, GstDiscovererInfo * info)
   real_duration = gst_discoverer_info_get_duration (info);
   if (real_duration < fc->duration - fc->duration_tolerance ||
       real_duration > fc->duration + fc->duration_tolerance) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_SIZE_INCORRECT,
+        "File %s has duration %" GST_TIME_FORMAT ", it was expected to have %"
+        GST_TIME_FORMAT " (+-%" GST_TIME_FORMAT ")",
+        fc->uri, GST_TIME_ARGS (real_duration), GST_TIME_ARGS (fc->duration),
+        GST_TIME_ARGS (fc->duration_tolerance));
     return FALSE;
   }
   return TRUE;
@@ -300,7 +316,9 @@ check_seekable (GstQaFileChecker * fc, GstDiscovererInfo * info)
 
   real_seekable = gst_discoverer_info_get_seekable (info);
   if (real_seekable != fc->seekable) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_SEEKABLE_INCORRECT,
+        "File was expected to %s be seekable, but it %s",
+        fc->seekable ? "" : "not", real_seekable ? "is" : "isn't");
     return FALSE;
   }
   return TRUE;
@@ -320,7 +338,8 @@ check_encoding_profile (GstQaFileChecker * fc, GstDiscovererInfo * info)
 
   /* TODO doesn't do subtitle checks */
   if (!gst_encoding_profile_is_equal (result_profile, profile)) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_PROFILE_INCORRECT, "Wrong profile "
+        "found on file %s", fc->uri);
     ret = FALSE;
   }
 
@@ -337,15 +356,20 @@ gst_qa_file_checker_run (GstQaFileChecker * fc)
   GstDiscoverer *discoverer = gst_discoverer_new (GST_SECOND * 60, &err);
   gboolean ret = TRUE;
 
+  g_return_val_if_fail (fc->uri != NULL, FALSE);
+
   if (!discoverer) {
-    /* TODO set error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_ALLOCATION_FAILURE,
+        "Failed to create GstDiscoverer");
     return FALSE;
   }
 
   info = gst_discoverer_discover_uri (discoverer, fc->uri, &err);
 
   if (gst_discoverer_info_get_result (info) != GST_DISCOVERER_OK) {
-    /* TODO error */
+    GST_QA_REPORT (fc, GST_QA_ISSUE_ID_FILE_CHECK_FAILURE,
+        "Discoverer failed to discover the file, result: %d",
+        gst_discoverer_info_get_result (info));
     return FALSE;
   }
 
index d03b183..0d406a6 100644 (file)
@@ -172,6 +172,31 @@ gst_qa_report_load_issues (void)
 
   REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_STATE_CHANGE_FAILURE,
       _("state change failed"), NULL, GST_QA_REPORT_LEVEL_CRITICAL);
+
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_SIZE_IS_ZERO,
+      _("resulting file size is 0"), NULL, GST_QA_REPORT_LEVEL_CRITICAL);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_SIZE_INCORRECT,
+      _("resulting file size wasn't within the expected values"),
+      NULL, GST_QA_REPORT_LEVEL_WARNING);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_DURATION_INCORRECT,
+      _("resulting file duration wasn't within the expected values"),
+      NULL, GST_QA_REPORT_LEVEL_WARNING);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_SEEKABLE_INCORRECT,
+      _("resulting file wasn't seekable or not seekable as expected"),
+      NULL, GST_QA_REPORT_LEVEL_WARNING);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_PROFILE_INCORRECT,
+      _("resulting file stream profiles didn't match expected values"),
+      NULL, GST_QA_REPORT_LEVEL_CRITICAL);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_NOT_FOUND,
+      _("resulting file could not be found for testing"), NULL,
+      GST_QA_REPORT_LEVEL_CRITICAL);
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_FILE_CHECK_FAILURE,
+      _("an error occured while checking the file for conformance"), NULL,
+      GST_QA_REPORT_LEVEL_CRITICAL);
+
+  REGISTER_QA_ISSUE (GST_QA_ISSUE_ID_ALLOCATION_FAILURE,
+      _("a memory allocation failed during QA run"),
+      NULL, GST_QA_REPORT_LEVEL_CRITICAL);
 }
 
 void
@@ -235,6 +260,12 @@ gst_qa_report_area_get_name (GstQaReportArea area)
       return "caps";
     case GST_QA_AREA_SEEK:
       return "seek";
+    case GST_QA_AREA_STATE:
+      return "state";
+    case GST_QA_AREA_FILE_CHECK:
+      return "file-check";
+    case GST_QA_AREA_RUN_ERROR:
+      return "run-error";
     case GST_QA_AREA_OTHER:
       return "other";
     default:
index fe02745..a698acf 100644 (file)
@@ -55,6 +55,8 @@ typedef enum {
   GST_QA_AREA_CAPS,
   GST_QA_AREA_SEEK,
   GST_QA_AREA_STATE,
+  GST_QA_AREA_FILE_CHECK,
+  GST_QA_AREA_RUN_ERROR,
   GST_QA_AREA_OTHER=100,
 } GstQaReportArea;
 
@@ -89,6 +91,16 @@ typedef guintptr GstQaIssueId;
 
 #define GST_QA_ISSUE_ID_STATE_CHANGE_FAILURE (((GstQaIssueId) GST_QA_AREA_STATE) << GST_QA_ISSUE_ID_SHIFT | 1)
 
+#define GST_QA_ISSUE_ID_FILE_SIZE_IS_ZERO    (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 1)
+#define GST_QA_ISSUE_ID_FILE_SIZE_INCORRECT      (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 2)
+#define GST_QA_ISSUE_ID_FILE_DURATION_INCORRECT  (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 3)
+#define GST_QA_ISSUE_ID_FILE_SEEKABLE_INCORRECT  (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 4)
+#define GST_QA_ISSUE_ID_FILE_PROFILE_INCORRECT  (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 5)
+#define GST_QA_ISSUE_ID_FILE_NOT_FOUND  (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 6)
+#define GST_QA_ISSUE_ID_FILE_CHECK_FAILURE  (((GstQaIssueId) GST_QA_AREA_FILE_CHECK) << GST_QA_ISSUE_ID_SHIFT | 7)
+
+#define GST_QA_ISSUE_ID_ALLOCATION_FAILURE (((GstQaIssueId) GST_QA_AREA_RUN_ERROR) << GST_QA_ISSUE_ID_SHIFT | 1)
+
 #define GST_QA_ISSUE_ID_AREA(id) ((guintptr)(id >> GST_QA_ISSUE_ID_SHIFT))
 
 typedef struct {