File indexing completed on 2024-04-06 12:01:54
0001
0002
0003 from __future__ import print_function
0004 import sqlite3
0005 import subprocess
0006 import json
0007 import os
0008 import shutil
0009 import datetime
0010
0011 fileName = 'copy_test.db'
0012
0013 class DB:
0014 def __init__(self):
0015 pass
0016
0017 def setSynchronizationType( self, tag, synchType ):
0018 db = sqlite3.connect(fileName)
0019 cursor = db.cursor()
0020 cursor.execute('UPDATE TAG SET SYNCHRONIZATION =? WHERE NAME =?',(synchType,tag,))
0021 db.commit()
0022
0023 def getLastInsertedSince( self, tag, snapshot ):
0024 db = sqlite3.connect(fileName)
0025 cursor = db.cursor()
0026 cursor.execute('SELECT SINCE, INSERTION_TIME FROM IOV WHERE TAG_NAME =? AND INSERTION_TIME >? ORDER BY INSERTION_TIME DESC',(tag,snapshot))
0027 row = cursor.fetchone()
0028 return row
0029
0030 def prepareFile( inputTag, sourceTag, startingSince ):
0031 command = "conddb --yes copy %s %s --destdb %s -f %s" %(inputTag,sourceTag,fileName,startingSince)
0032 pipe = subprocess.Popen( command, shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
0033 out = pipe.communicate()[0]
0034
0035 def copy( sourceTag, destTag, since, logFileName ):
0036 command = "conddb --yes --db %s copy %s %s -f %s --synchronize" %(fileName,sourceTag,destTag,since)
0037 pipe = subprocess.Popen( command, shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
0038 out = pipe.communicate()[0]
0039 lines = out.split('\n')
0040 ret = pipe.returncode
0041 for line in lines:
0042 print(line)
0043 with open(logFileName,'a') as logFile:
0044 logFile.write(out)
0045 return ret==0
0046
0047 class CopyTest:
0048 def __init__(self, db):
0049 self.db = db
0050 self.errors = 0
0051 self.logFileName = 'conddbCopyTest.log'
0052
0053 def log( self, msg ):
0054 print(msg)
0055 with open(self.logFileName,'a') as logFile:
0056 logFile.write(msg)
0057 logFile.write('\n')
0058
0059 def execute( self, sourceTag, baseFile, destTag, synchro, destSince, success, expectedAction ):
0060 insertedSince = None
0061 metaDestFile = '%s.txt' %destTag
0062
0063 self.log( '# ---------------------------------------------------------------------------')
0064 self.log( '# Testing tag %s with synch=%s, destSince=%s - expecting ret=%s action=%s' %(destTag,synchro,destSince,success,expectedAction))
0065
0066 descr = 'Testing conditionsUpload with synch:%s - expected action: %s' %(synchro,expectedAction)
0067 beforeUpload = datetime.datetime.utcnow()
0068 ret = copy( sourceTag, destTag, destSince, self.logFileName )
0069 if ret != success:
0070 self.log( 'ERROR: the return value for the copy of tag %s with sychro %s was %s, while the expected result is %s' %(destTag,synchro,ret,success))
0071 self.errors += 1
0072 else:
0073 row = self.db.getLastInsertedSince( destTag, beforeUpload )
0074 if ret == True:
0075 if expectedAction == 'CREATE' or expectedAction == 'INSERT' or expectedAction == 'APPEND':
0076 if destSince != row[0]:
0077 self.log( 'ERROR: the since inserted is %s, expected value is %s - expected action: %s' %(row[0],destSince,expectedAction))
0078 self.errors += 1
0079 else:
0080 self.log( '# OK: Found expected value for last since inserted: %s timestamp: %s' %(row[0],row[1]))
0081 insertedSince = row[0]
0082 elif expectedAction == 'SYNCHRONIZE':
0083 if destSince == row[0]:
0084 self.log( 'ERROR: the since inserted %s has not been synchronized with the FCSR - expected action: %s' %(row[0],expectedAction))
0085 self.errors += 1
0086 else:
0087 self.log( '# OK: Found synchronized value for the last since inserted: %s timestamp: %s' %(row[0],row[1]))
0088 insertedSince = row[0]
0089 else:
0090 self.log( 'ERROR: found an appended since %s - expected action: %s' %(row[0],expectedAction))
0091 self.errors += 1
0092 else:
0093 if not row is None:
0094 self.log( 'ERROR: found new insered since: %s timestamp: %s' %(row[0],row[1]))
0095 self.errors += 1
0096 if expectedAction != 'FAIL':
0097 self.log( 'ERROR: Upload failed. Expected value: %s' %(destSince))
0098 self.errors += 1
0099 else:
0100 self.log( '# OK: Upload failed as expected.')
0101 return insertedSince
0102
0103
0104 def main():
0105 print('Testing...')
0106 bfile0 = fileName
0107 bfile1 = fileName
0108 db = DB()
0109 inputTag = 'runinfo_31X_mc'
0110 inputTag0 ='runinfo_0'
0111 inputTag1 = 'runinfo_1'
0112 prepareFile( inputTag,inputTag0,1)
0113 prepareFile( inputTag,inputTag1,100)
0114 test = CopyTest( db )
0115
0116 tag = 'test_CondUpload_any'
0117 test.execute( inputTag0, bfile0, tag, 'any', 1, True, 'CREATE' )
0118 test.execute( inputTag0, bfile0, tag, 'any', 200, True, 'APPEND' )
0119 test.execute( inputTag0, bfile0, tag, 'any', 100, True, 'INSERT')
0120 test.execute( inputTag0, bfile0, tag, 'any', 200, True, 'INSERT')
0121
0122 tag = 'test_CondUpload_validation'
0123 test.execute( inputTag0, bfile0, tag, 'validation', 1, True, 'CREATE')
0124 db.setSynchronizationType( tag, 'validation' )
0125 test.execute( inputTag0, bfile0, tag, 'validation', 1, True, 'INSERT')
0126 test.execute( inputTag0, bfile0, tag, 'validation', 200, True, 'APPEND')
0127 test.execute( inputTag0, bfile0, tag, 'validation', 100, True, 'INSERT')
0128
0129 tag = 'test_CondUpload_mc'
0130 test.execute( inputTag0, bfile0, tag, 'mc', 1, True, 'CREATE')
0131 db.setSynchronizationType( tag, 'mc' )
0132 test.execute( inputTag1, bfile1, tag, 'mc', 1, False, 'FAIL')
0133 test.execute( inputTag0, bfile0, tag, 'mc', 1, False, 'FAIL')
0134 test.execute( inputTag0, bfile0, tag, 'mc', 200, False, 'FAIL')
0135
0136 tag = 'test_CondUpload_hlt'
0137 test.execute( inputTag0, bfile0, tag, 'hlt', 1, True, 'CREATE')
0138 db.setSynchronizationType( tag, 'hlt' )
0139 test.execute( inputTag0, bfile0, tag, 'hlt', 200, True, 'SYNCHRONIZE')
0140 fcsr = test.execute( inputTag0, bfile0, tag, 'hlt', 100, True, 'SYNCHRONIZE')
0141 if not fcsr is None:
0142 since = fcsr + 200
0143 test.execute( inputTag0, bfile0, tag, 'hlt', since, True, 'APPEND')
0144 since = fcsr + 100
0145 test.execute( inputTag0, bfile0, tag, 'hlt', since, True, 'INSERT')
0146
0147 tag = 'test_CondUpload_express'
0148 test.execute( inputTag0, bfile0, tag, 'express', 1, True, 'CREATE')
0149 db.setSynchronizationType( tag, 'express' )
0150 test.execute( inputTag0, bfile0, tag, 'express', 200, True, 'SYNCHRONIZE')
0151 fcsr = test.execute( inputTag0, bfile0, tag, 'express', 100, True, 'SYNCHRONIZE')
0152 if not fcsr is None:
0153 since = fcsr + 200
0154 test.execute( inputTag0, bfile0, tag, 'express', since, True, 'APPEND')
0155 since = fcsr + 100
0156 test.execute( inputTag0, bfile0, tag, 'express', since, True, 'INSERT')
0157
0158 tag = 'test_CondUpload_prompt'
0159 test.execute( inputTag0, bfile0, tag, 'prompt', 1, True, 'CREATE')
0160 db.setSynchronizationType( tag, 'prompt' )
0161 test.execute( inputTag0, bfile0, tag, 'prompt', 200, True, 'SYNCHRONIZE')
0162 fcsr = test.execute( inputTag0, bfile0, tag, 'prompt', 100, True, 'SYNCHRONIZE')
0163 if not fcsr is None:
0164 since = fcsr + 200
0165 test.execute( inputTag0, bfile0, tag, 'prompt', since, True, 'APPEND')
0166 since = fcsr + 100
0167 test.execute( inputTag0, bfile0, tag, 'prompt', since, True, 'INSERT')
0168
0169 tag = 'test_CondUpload_pcl'
0170 test.execute( inputTag0, bfile0, tag, 'pcl', 1, True, 'CREATE')
0171 db.setSynchronizationType( tag, 'pcl' )
0172 test.execute( inputTag0, bfile0, tag, 'pcl', 200, False, 'FAIL')
0173 if not fcsr is None:
0174 since = fcsr + 200
0175 test.execute( inputTag0, bfile0, tag, 'pcl', since, True, 'APPEND')
0176 since = fcsr + 100
0177 test.execute( inputTag0, bfile0, tag, 'pcl', since, True, 'INSERT')
0178
0179 tag = 'test_CondUpload_offline'
0180 test.execute( inputTag0, bfile0, tag, 'offline', 1, True, 'CREATE')
0181 db.setSynchronizationType( tag, 'offline' )
0182 test.execute( inputTag0, bfile0, tag, 'offline', 1000, True, 'APPEND')
0183 test.execute( inputTag0, bfile0, tag, 'offline', 500, False, 'FAIL' )
0184 test.execute( inputTag0, bfile0, tag, 'offline', 1000, False, 'FAIL' )
0185 test.execute( inputTag0, bfile0, tag, 'offline', 2000, True, 'APPEND' )
0186
0187 tag = 'test_CondUpload_runmc'
0188 test.execute( inputTag0, bfile0, tag, 'runmc', 1, True, 'CREATE')
0189 db.setSynchronizationType( tag, 'runmc' )
0190 test.execute( inputTag0, bfile0, tag, 'runmc', 1000, True, 'APPEND')
0191 test.execute( inputTag0, bfile0, tag, 'runmc', 500, False, 'FAIL' )
0192 test.execute( inputTag0, bfile0, tag, 'runmc', 1000, False, 'FAIL' )
0193 test.execute( inputTag0, bfile0, tag, 'runmc', 2000, True, 'APPEND' )
0194 os.remove( fileName )
0195 print('Done. Errors: %s' %test.errors)
0196
0197
0198 if __name__ == '__main__':
0199 main()