1d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# -*- coding: utf-8 -*- 2d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 3d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos#------------------------------------------------------------------------- 4d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# Vulkan CTS 5d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# ---------- 6d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# 7d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# Copyright (c) 2016 Google Inc. 8d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# 9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# Licensed under the Apache License, Version 2.0 (the "License"); 10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# you may not use this file except in compliance with the License. 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# You may obtain a copy of the License at 12d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# 13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# http://www.apache.org/licenses/LICENSE-2.0 14d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# Unless required by applicable law or agreed to in writing, software 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# distributed under the License is distributed on an "AS IS" BASIS, 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# See the License for the specific language governing permissions and 19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos# limitations under the License. 20d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos# 21d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos#------------------------------------------------------------------------- 22d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 23d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulosimport os 24d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulosimport sys 25d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 269e115e335e74983f53e239162ae9143372548279Alexander Galazinsys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts", "verify")) 27d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 289e115e335e74983f53e239162ae9143372548279Alexander Galazinfrom package import getPackageDescription 299e115e335e74983f53e239162ae9143372548279Alexander Galazinfrom verify import * 309e115e335e74983f53e239162ae9143372548279Alexander Galazinfrom message import * 31d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 329e115e335e74983f53e239162ae9143372548279Alexander Galazindef verifyGitStatusFiles (package): 33d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages = [] 34d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 359e115e335e74983f53e239162ae9143372548279Alexander Galazin if len(package.gitStatus) > 1: 369e115e335e74983f53e239162ae9143372548279Alexander Galazin messages.append(error(package.basePath, "Exactly one git status file must be present, found %s" % len(package.gitStatus))) 37d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 389e115e335e74983f53e239162ae9143372548279Alexander Galazin messages += verifyGitStatus(package) 39d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 40d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos return messages 41d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 429e115e335e74983f53e239162ae9143372548279Alexander Galazindef verifyGitLogFiles (package): 43d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages = [] 44d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 459e115e335e74983f53e239162ae9143372548279Alexander Galazin if len(package.gitLog) > 1: 469e115e335e74983f53e239162ae9143372548279Alexander Galazin messages.append(error(package.basePath, "Exactly one git log file must be present, found %s" % len(package.gitLog))) 47d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 489e115e335e74983f53e239162ae9143372548279Alexander Galazin messages += verifyGitLog(package) 49d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 50d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos return messages 51d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 52d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulosdef verifyTestLogs (package, mustpass): 53d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages = [] 54d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 55d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos for testLogFile in package.testLogs: 56d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages += verifyTestLog(os.path.join(package.basePath, testLogFile), mustpass) 57d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 58d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos if len(package.testLogs) == 0: 59d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages.append(error(package.basePath, "No test log files found")) 60d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 61d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos return messages 62d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 63d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulosdef verifyPackage (package, mustpass): 64d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages = [] 65d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 66d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages += verifyStatement(package) 679e115e335e74983f53e239162ae9143372548279Alexander Galazin messages += verifyGitStatusFiles(package) 689e115e335e74983f53e239162ae9143372548279Alexander Galazin messages += verifyGitLogFiles(package) 69d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages += verifyPatches(package) 70d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages += verifyTestLogs(package, mustpass) 71d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 72d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos for item in package.otherItems: 73d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages.append(warning(os.path.join(package.basePath, item), "Unknown file")) 74d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 75d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos return messages 76d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 77d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulosif __name__ == "__main__": 78d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos if len(sys.argv) != 3: 79d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print "%s: [extracted submission package] [mustpass]" % sys.argv[0] 80d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos sys.exit(-1) 81d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 82d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos packagePath = os.path.normpath(sys.argv[1]) 83d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos mustpassPath = sys.argv[2] 84d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos package = getPackageDescription(packagePath) 85d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos mustpass = readMustpass(mustpassPath) 86d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos messages = verifyPackage(package, mustpass) 87d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 88d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos errors = [m for m in messages if m.type == ValidationMessage.TYPE_ERROR] 89d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos warnings = [m for m in messages if m.type == ValidationMessage.TYPE_WARNING] 90d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 91d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos for message in messages: 92d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print str(message) 93d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 94d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print "" 95d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos 96d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos if len(errors) > 0: 97d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print "Found %d validation errors and %d warnings!" % (len(errors), len(warnings)) 98d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos sys.exit(-2) 99d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos elif len(warnings) > 0: 100d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print "Found %d warnings, manual review required" % len(warnings) 101d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos sys.exit(-1) 102d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos else: 103d5faa03d11da12f3ab9d6e8cb4ef098511f6c212Pyry Haulos print "All validation checks passed" 104