Sleds/buildvm/testtools/test_start.py

166 lines
5.1 KiB
Python

#!python3
'''
Created on Sep 21, 20-16
author: tpweis
file name: test_start.py
Input arguments
feeddir - Directory that supplies the package files to feed the testing
workorder - specifies the workorder name that is placed in the manifest.
interval - the time spacing between each copy action
copylimit - the number of times the contents of feeddir are copied to targetdir. A value of 0 means no limit to the repeated copies.
Output arguments
targetdir - Location to place package and manifest files
A manifest file is created for each package that is copied to the target directory.
'''
import os, time, datetime
import subprocess
import sys
import shutil
import json
def helpmessage():
"function helpmessage"
print("test_start.py <feed directory> <workorder name> <copy interval> <copy count> <target directory>")
sys.exit(1)
def writemanifest(fullname, workorder, targetdir):
"function writemanifest"
filename, file_ext = os.path.splitext(fullname)
manifest = dict()
originator = dict()
packages = dict()
originator["ipAddress"] = "127.0.0.1"
originator["jobId"] = filename
packages["package_name"] = filename
packages["files"] = [fullname]
manifest["data"] = {}
createtime = datetime.datetime.now().isoformat()
manifest["dateCreated"] = createtime
manifest["jobType"] = "loan"
manifest["originator"] = originator
manifest["packages"] = [packages]
manifest["type"] = "SNT_JOB"
manifest["workOrderName"] = workorder
# Save the manifest and return its name
newname = os.path.normpath(targetdir + "/" +filename + ".json")
print(createtime + " manifest: " + newname)
f = open(newname, 'w')
json.dump(manifest, f, sort_keys=True, indent=4)
f.close()
# We added the source_dir to the manifest file open, to ensure it is written in
# the correct location. However, subsequent processing of the manifest file will
# control the directories. Thuse, return only the basename.
return filename + ".json"
def main():
"function main"
arglist = sys.argv[1:]
if(len(arglist)< 1):
print("Missing Feed Directory argument. Try again")
helpmessage()
else:
feeddir = arglist[0]
if(len(arglist)< 2):
print("Missing Workorder name argument. Try again")
helpmessage()
else:
workorder = arglist[1]
if(len(arglist) < 3):
print("Missing copy interval parameter (seconds between copies). Try again")
helpmessage()
else:
interval =int(arglist[2])
if interval < 5 :
print("Minimum interval is 5 seconds")
interval = 5
elif interval > 1800:
print("Maximum interval is 1800 seconds (30 minutes)")
interval = 1800
if(len(arglist)< 4):
print("Missing copy count argument. Try again")
helpmessage()
else:
copylimit = int(arglist[3])
if(len(arglist) < 5):
print("Missing Target directory argument. Try again")
helpmessage()
else:
targetdir =arglist[4]
# Now ensure that both directories exist
if not os.path.isdir(feeddir):
print("First arg (Feed directory) " + feeddir + " is not a valid directory")
helpmessage()
if not os.path.isdir(targetdir):
print("Target directory " + targetdir + " is not a valid directory")
helpmessage()
print("Copy Package files from " + feeddir + " to " + targetdir + ", one every " + str(interval) + " seconds")
feedlist = dict ([(f, None) for f in os.listdir (feeddir)])
# Only proceed if the feedlist is none empty. If it is non-empty, but has no .pdf files in it,
# we will find that out later
if not feedlist:
print("Feed directory is empty. Try again")
helpmessage()
copyctr = 0
while copylimit == 0 or copyctr < copylimit:
copyctr += 1
print("Make copy # " + str(copyctr) +", limit = " + str(copylimit))
# No umlimited copies and we havent exceeded the copy limit yet
for sourcefile in feedlist:
try:
print("examine name contents: " + sourcefile)
file_name, sep, file_ext = sourcefile.rpartition('.')
print("File extension is " + file_ext)
except:
print("Could not get a valid filename from " + sourcefile)
helpmessage()
# We are only copying .pdf files. Check now
if file_ext == "pdf":
# begin the copying
# fiddle with the file name so that we can produce numbered copies
oldfile = os.path.normpath(feeddir + "/" + sourcefile)
newname = file_name + str(copyctr) + sep + file_ext
newfile = os.path.normpath(targetdir + "/" + newname)
print(oldfile + " to " + newfile)
shutil.copy(oldfile,newfile)
# Now generate the manifest file
manifest = writemanifest(newname, workorder, targetdir)
time.sleep(interval)
sys.exit(0)
if __name__ == '__main__':
# execute only if run as a script
main()