You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
5.3 KiB
237 lines
5.3 KiB
#!/usr/bin/env python3
|
|
# This script aims to help to run locktests with several clients.
|
|
#
|
|
# Report bugs to Vincent ROQUETA : vincent.roqueta@ext.bull.net
|
|
|
|
import encodings
|
|
import shutil
|
|
import os, sys
|
|
import getopt, sys
|
|
import string
|
|
import socket
|
|
from stat import *
|
|
from sys import *
|
|
from os import *
|
|
|
|
NFS4_PATH="/mnt/nfsv4"
|
|
NFS4_SERVER=""
|
|
TEST_HOME="/home/vincent/locks/"
|
|
testfile=NFS4_PATH+"/testfile"
|
|
|
|
app="locktests"
|
|
SRC="locktests.tar.gz"
|
|
SRC_PATH="deploy"
|
|
install="'tar xzf "+SRC+"; cd locks; make `"
|
|
user="root"
|
|
|
|
|
|
|
|
|
|
|
|
class Machine:
|
|
|
|
def mkdir(self,dir):
|
|
self.command="mkdir -p "+dir
|
|
self.do()
|
|
def rmdir(self,dir):
|
|
self.command="rm -rf "+dir
|
|
self.do()
|
|
|
|
def printc(self):
|
|
print("->"+self.command)
|
|
print("\n")
|
|
|
|
class Client(Machine):
|
|
|
|
def __init__(self, machine):
|
|
self.command=""
|
|
self.machine=machine
|
|
self.mountPath=NFS4_PATH
|
|
|
|
def do(self):
|
|
self.command="ssh "+user+"@"+self.machine+" "+self.command
|
|
os.system(self.command)
|
|
|
|
def isomount(self, dir):
|
|
export=NFS4_SERVER
|
|
mntpoint=NFS4_PATH
|
|
self.command="'mkdir -p "+mntpoint+"; mount -t nfs4 "+export+" "+mntpoint+"'"
|
|
self.do()
|
|
|
|
def umount(self, dir):
|
|
mntpoint=self.mountPath+"/"+dir
|
|
self.command="umount "+mntpoint
|
|
self.do()
|
|
def install(self, path):
|
|
self.command="'cd "+path+"; tar xzf "+SRC+"; cd locks; make'"
|
|
self.do()
|
|
|
|
def run(self, appli):
|
|
self.command=appli
|
|
self.do()
|
|
def cp(self, fichier, path):
|
|
command="scp "+fichier+" "+user+"@"+self.machine+":"+path
|
|
os.system(command)
|
|
|
|
|
|
class Serveur(Machine):
|
|
|
|
def __init__(self, ip, exportPath):
|
|
self.SERVEUR=ip
|
|
self.exportPath=exportPath
|
|
|
|
def do(self):
|
|
self.command="ssh "+self.SERVEUR+" "+self.command
|
|
os.system(self.command)
|
|
|
|
def configure(self, dir):
|
|
exportDir=self.exportPath+'/'+dir
|
|
self. mkdir(exportDir)
|
|
#self.printc()
|
|
self.export(exportDir)
|
|
#self.printc()
|
|
def clean(self, dir):
|
|
unexportDir=self.exportPath+'/'+dir
|
|
self.unexport(unexportDir)
|
|
self.rmdir(unexportDir)
|
|
def usage():
|
|
print("\n")
|
|
print("usage:")
|
|
print("locktests.py <-n process -f testfile ><--setup -s fs_server> -c host1, host2, host3 ... ")
|
|
print("--setup : setup the configuration, deploy test on other test machines; This option also requires -c and -s")
|
|
print("-c <machine> : host list to deploy/run/clean the test")
|
|
print("-s <machine> : NFS server to use to setup the test")
|
|
print("-n <num> : number of processes each test machine will lauch to perform the test")
|
|
print("-f <file> : test file. This must be the same on each machine")
|
|
print(" ")
|
|
print("Example :")
|
|
print("=========")
|
|
print("*Setup machines for testing")
|
|
print("./locktests.py --setup -c testmachine1 testmachine2 testmachine3 -s my_nfs_server:/")
|
|
print("\n")
|
|
print("*Run test on testmachine1,testmachine2 with 50 process on each machine using /mnt/nfsv4/testfile")
|
|
print("./locktests.py -n 50 -f /mnt/nfsv4/testfile -c testmachine1 testmachine2")
|
|
print("\n")
|
|
print("_________________________________")
|
|
print("Vincent ROQUETA - Bull SA - 2005\n")
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def setup():
|
|
path=os.path.abspath(".")
|
|
fichier=SRC_PATH+"/"+SRC
|
|
commande=""
|
|
for i in clients:
|
|
print("Setting up machine "+i)
|
|
c=Client(i)
|
|
c.mkdir(path)
|
|
c.cp(fichier, path)
|
|
c.install(path)
|
|
c.isomount(NFS4_PATH)
|
|
#Setup localhost
|
|
print("Setting up localhost")
|
|
commande="make; mkdir -p "+NFS4_PATH+" ; mount -t nfs4 "+NFS4_SERVER+" "+NFS4_PATH+" &"
|
|
os.system(commande)
|
|
|
|
|
|
def run():
|
|
path=os.path.abspath(".")
|
|
nbreClients=len(clients)
|
|
hostname=socket.gethostname()
|
|
# Lancement du serveur en local
|
|
# Launch the server locally
|
|
commande=path+"/"+app+" -n "+nbreProcess+" -f "+filename+" -c "+str(nbreClients)+" &"
|
|
os.system(commande)
|
|
commande=path+"/locks/"+app+" --server "+hostname
|
|
for i in clients:
|
|
c=Client(i)
|
|
c.run(commande)
|
|
|
|
def clean():
|
|
for i in clients:
|
|
client.umount(NFS4_PATH)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args=sys.argv[1:]
|
|
rge=list(range(len(args)))
|
|
a=""
|
|
r=True
|
|
s=False
|
|
nfsServer=False
|
|
c=False
|
|
f=False
|
|
n=False
|
|
clients=[]
|
|
for i in rge:
|
|
if args[i] in ("--install", "-i", "--setup"):
|
|
r=False
|
|
s=True
|
|
continue
|
|
if args[i] in ("-s", "--server"):
|
|
a="nfsServer"
|
|
nfsServer=True
|
|
continue
|
|
if args[i] in ("-h", "--help"):
|
|
usage()
|
|
sys.exit(1)
|
|
if args[i] in ("--clients", "-c"):
|
|
a="clients"
|
|
c=True
|
|
continue
|
|
if args[i] == "-n":
|
|
a="nbre"
|
|
n=True
|
|
continue
|
|
if args[i] == "-f":
|
|
a="file"
|
|
f=True
|
|
continue
|
|
|
|
if a=="clients":
|
|
clients.append(args[i])
|
|
continue
|
|
if a=="file":
|
|
filename=args[i]
|
|
continue
|
|
if a=="nbre":
|
|
nbreProcess=args[i]
|
|
continue
|
|
if a=="nfsServer":
|
|
NFS4_SERVER=args[i]
|
|
continue
|
|
|
|
|
|
usage()
|
|
# For ...
|
|
if s:
|
|
if (not c) or (not nfsServer):
|
|
usage()
|
|
sys.exit(1)
|
|
print("Setup")
|
|
print(NFS4_SERVER)
|
|
setup()
|
|
print("Setup complete")
|
|
|
|
if r:
|
|
if (not c) or (not f) or (not n):
|
|
usage()
|
|
sys.exit(1)
|
|
|
|
print("Running test")
|
|
run()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|