
import sys
import os
import random
from subprocess import call
import pickle

class Server:
    url = ""
    indexing_install_type = ""
    machine_type = ""
    
    def __init__(self, url, index="", machine=""):
        self.url = url
        self.indexing_install_type = index
        self.machine_type = machine

class Result:
    server = None
    total_tries = 0
    total_errors = 0
    
    def __init__(self, serv, tries, errors):
        self.server = serv
        self.total_tries = tries
        self.total_errors = errors
        
    def __str__(self):
        return """{ 'url': '%s', 'indexing': '%s', 'machine': '%s', 'tries': %s, 'errors': %s}""" % (
            self.server.url,
            self.server.indexing_install_type,
            self.server.machine_type,
            self.total_tries,
            self.total_errors
        )

SERVERS = [
#    Server("http://141.233.238.172:12080/plone2/makeFolder", "collective_indexing", "Dual_G5_3Gig_RAM"),
#    Server("http://141.233.238.172:11080/plone1/makeFolder", "PloneQueueCatalog", "Dual_G5_3Gig_RAM"),
#    Server("http://141.233.238.172:12080/Plone/makeFolder", "", "Dual_G5_3Gig_RAM"),
#    Server("http://plonedev.uwosh.edu/plone1/makeFolder", "", "3GHZ_Quad_Core_4Gig_RAM"),
    Server("http://localhost:8080/Plone/folder/", "PloneQueueCatalog", "MacBook_Pro"),
    Server("http://localhost:8081/Plone/folder/", "collective.indexing", "MacBook_Pro"),
    Server("http://localhost:8082/Plone/folder/", "", "MacBook_Pro")
]

RESULTS = []
SIMULTANEOUS_HITS = [10, 25, 50, 75]
EXPECTED_RESULT = "booya!"
AMOUNT_OF_TIMES_TO_TEST = 5
REQUEST_SCRIPT = "makeFolder"
CLEAR_SCRIPT = "clearFolder"

def run_tests(run_number):
    for server in SERVERS:
        
        for sim_hits in SIMULTANEOUS_HITS:
            try:
                result_dir = '%s-%s-%s-%s' % (server.machine_type, server.indexing_install_type, sim_hits, run_number)
            
                if not os.path.exists(result_dir):
                    os.mkdir(result_dir)
            
                os.system('curl %s' % (server.url + CLEAR_SCRIPT))
                os.system("./NAIL.sh %s %i %s" % (server.url + REQUEST_SCRIPT, sim_hits, result_dir + "/output"))
            
                #read results
                num_errors = 0
                num_good = 0
            
                for result in os.listdir(result_dir):
                    f = open(result_dir + "/" + result)
                
                    lines = f.readlines()
                
                    if EXPECTED_RESULT not in lines[len(lines)-1]:
                        num_errors = num_errors + 1
                    else:
                        num_good = num_good + 1
                        
                result =Result(
                    server,
                    num_good + num_errors,
                    num_errors
                )
                print result
            
                f = open("RESULT_TEXT.txt", 'a')
                f.write(str(result) + os.linesep)
                f.write(",")
                f.close()
                
                RESULTS.append(result)

            except:
                f = open("RESULT_TEXT.txt", 'a')
                f.write("'Error while doing request... %s'" % (str(result) + os.linesep))
                f.write(",")
                f.close()
            
if __name__ == "__main__":
    f = open("RESULT_TEXT.txt", 'w')
    f.write("[")
    f.close()
    
    for i in range(AMOUNT_OF_TIMES_TO_TEST):
        run_tests(i)
            
    f = open("RESULT_TEXT.txt", 'a')
    f.write("]")
    f.close()
    result_file = open("COMPLETE_RESULTS.txt", 'w')
    pickle.dump(RESULTS, result_file)
    result_file.close()
    
