Lower correlation threshold in flush-finish tests again am: 6455e6f987 am: 84373d7748...
[platform/upstream/VK-GL-CTS.git] / scripts / khr_util / registry_cache.py
1 # -*- coding: utf-8 -*-
2
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
6 #
7 # Copyright 2015-2017 The Android Open Source Project
8 #
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #      http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20 #
21 #-------------------------------------------------------------------------
22
23 import os
24 import urllib2
25 import hashlib
26
27 import registry
28
29 BASE_URL = ""
30
31 class RegistrySource:
32         def __init__(self, repository, filename, revision, checksum):
33                 self.repository = repository
34                 self.filename   = filename
35                 self.revision   = revision
36                 self.checksum   = checksum
37
38         def __hash__(self):
39                 return hash((self.repository, self.filename, self.revision, self.checksum))
40
41         def __eq__(self, other):
42                 return (self.repository, self.filename, self.revision, self.checksum) == (other.repository, other.filename, other.revision, other.checksum)
43
44         def getFilename (self):
45                 return os.path.basename(self.filename)
46
47         def getCacheFilename (self):
48                 return "r%s-%s" % (self.revision, self.getFilename())
49
50         def getChecksum (self):
51                 return self.checksum
52
53         def getRevision (self):
54                 return self.revision
55
56         def getSourceUrl (self):
57                 return "%s/%s/%s" % (self.repository, self.revision, self.filename)
58
59 def computeChecksum (data):
60         return hashlib.sha256(data).hexdigest()
61
62 def fetchUrl (url):
63         req             = urllib2.urlopen(url)
64         data    = req.read()
65         return data
66
67 def fetchFile (dstPath, url, checksum):
68         def writeFile (filename, data):
69                 f = open(filename, 'wb')
70                 f.write(data)
71                 f.close()
72
73         if not os.path.exists(os.path.dirname(dstPath)):
74                 os.makedirs(os.path.dirname(dstPath))
75
76         print "Fetching %s" % url
77         data            = fetchUrl(url)
78         gotChecksum     = computeChecksum(data)
79
80         if checksum != gotChecksum:
81                 raise Exception("Checksum mismatch, expected %s, got %s" % (checksum, gotChecksum))
82
83         writeFile(dstPath, data)
84
85 def checkFile (filename, checksum):
86         def readFile (filename):
87                 f = open(filename, 'rb')
88                 data = f.read()
89                 f.close()
90                 return data
91
92         if os.path.exists(filename):
93                 return computeChecksum(readFile(filename)) == checksum
94         else:
95                 return False
96
97 g_registryCache = {}
98
99 def getRegistry (source):
100         global g_registryCache
101
102         if source in g_registryCache:
103                 return g_registryCache[source]
104
105         cacheDir        = os.path.join(os.path.dirname(__file__), "cache")
106         cachePath       = os.path.join(cacheDir, source.getCacheFilename())
107
108         if not checkFile(cachePath, source.checksum):
109                 fetchFile(cachePath, source.getSourceUrl(), source.getChecksum())
110
111         parsedReg       = registry.parse(cachePath)
112
113         g_registryCache[source] = parsedReg
114
115         return parsedReg