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