def verify(self, windowSize=None):
        """Verify that this protocol model is valid. Return 0 if sucessful,
        a failure message otherwise

        :param windowSize: acquistion window size (seconds), to check against duration, check is not performed is None provided
        :type windowSize: float
        :returns: 0 (int) for success, fail message (str) otherwise
        """
        if self.rowCount() == 0:
            return "Protocol must have at least one test"
        if self.caldb is None or self.calv is None:
            return "Protocol reference voltage not set"
        for test in self._tests:
            msg = test.verify(windowSize)
            if msg:
                return msg
        return 0