Esempio n. 1
0
    def __init__(self):

        if platform.system() == 'Windows':
            pipe_name = '\\\\.\\pipe\\procd_pipe.' + str(os.getpid())
        else:
            pipe_name = 'procd_pipe'

        self.drone_tree = DroneTree()

        init_pid = self.drone_tree.get_init_pid()
        procd_pid = self.drone_tree.spawn(
            init_pid, "./condor_procd -A " + pipe_name + " -L procd_log -S -1")

        self.procd_reference = ProcDReference(init_pid)
        self.procd_reference.spawn(procd_pid, init_pid)

        self.procd_interface = ProcDInterface(pipe_name)

        self.tag_mappings = {'INIT': init_pid, 'PROCD': procd_pid}
Esempio n. 2
0
    def __init__(self):

        if platform.system() == 'Windows':
            pipe_name = '\\\\.\\pipe\\procd_pipe.' + str(os.getpid())
        else:
            pipe_name = 'procd_pipe'

        self.drone_tree = DroneTree()

        init_pid = self.drone_tree.get_init_pid()
        procd_pid = self.drone_tree.spawn(init_pid,
            "./condor_procd -A " + pipe_name + " -L procd_log -S -1")

        self.procd_reference = ProcDReference(init_pid)
        self.procd_reference.spawn(procd_pid, init_pid)

        self.procd_interface = ProcDInterface(pipe_name)

        self.tag_mappings = {'INIT': init_pid, 'PROCD': procd_pid}
Esempio n. 3
0
# an example of a file that can be used as input to this script.

import random
import sys

from procd_test_state import ProcDReference

def random_choice(command, choices):
    if not choices:
        sys.stderr.write('WARNING: ' + command + ' not possible; skipping\n')
        return None
    return random.choice(choices)

if __name__ == '__main__':

    ref = ProcDReference('INIT')
    next_proc = 0
    while True:
        line = sys.stdin.readline()
        if not line:
            break
        line = line.rstrip()
        if line == 'SPAWN':
            parent = random_choice(line, ref.get_all_procs())
            if not parent:
                continue
            child = 'P' + str(next_proc)
            next_proc += 1
            sys.stdout.write('SPAWN ' + child + ' ' + parent + '\n')
            ref.spawn(child, parent)
        elif line == 'KILL':
Esempio n. 4
0
import random
import sys

from procd_test_state import ProcDReference


def random_choice(command, choices):
    if not choices:
        sys.stderr.write('WARNING: ' + command + ' not possible; skipping\n')
        return None
    return random.choice(choices)


if __name__ == '__main__':

    ref = ProcDReference('INIT')
    next_proc = 0
    while True:
        line = sys.stdin.readline()
        if not line:
            break
        line = line.rstrip()
        if line == 'SPAWN':
            parent = random_choice(line, ref.get_all_procs())
            if not parent:
                continue
            child = 'P' + str(next_proc)
            next_proc += 1
            sys.stdout.write('SPAWN ' + child + ' ' + parent + '\n')
            ref.spawn(child, parent)
        elif line == 'KILL':
Esempio n. 5
0
class ProcDTester:
    def __init__(self):

        if platform.system() == 'Windows':
            pipe_name = '\\\\.\\pipe\\procd_pipe.' + str(os.getpid())
        else:
            pipe_name = 'procd_pipe'

        self.drone_tree = DroneTree()

        init_pid = self.drone_tree.get_init_pid()
        procd_pid = self.drone_tree.spawn(
            init_pid, "./condor_procd -A " + pipe_name + " -L procd_log -S -1")

        self.procd_reference = ProcDReference(init_pid)
        self.procd_reference.spawn(procd_pid, init_pid)

        self.procd_interface = ProcDInterface(pipe_name)

        self.tag_mappings = {'INIT': init_pid, 'PROCD': procd_pid}

    def spawn(self, tag, parent_tag):
        ppid = self.tag_mappings[parent_tag]
        pid = self.drone_tree.spawn(ppid)
        self.procd_reference.spawn(pid, ppid)
        self.tag_mappings[tag] = pid

    def kill(self, tag):
        pid = self.tag_mappings[tag]
        self.drone_tree.kill(pid)
        self.procd_reference.kill(pid)

    def register(self, tag, watcher):
        pid = self.tag_mappings[tag]
        watcher_pid = 0
        if watcher is not None:
            watcher_pid = self.tag_mappings[watcher]
        self.procd_interface.register(pid, watcher_pid)
        self.procd_reference.register(pid, watcher_pid)

    def unregister(self, tag):
        pid = self.tag_mappings[tag]
        self.procd_interface.unregister(pid)
        self.procd_reference.unregister(pid)

    def snapshot(self):
        self.procd_interface.snapshot()

    def show_state(self, procd_dump=None):
        if procd_dump is None:
            procd_dump = self.procd_interface.dump()
        print '------ ProcD State ------'
        procd_dump.dump()
        print '------ Reference State ------'
        self.procd_reference.dump()
        print '------ Tag-to-PID Mappings ------'
        for tag, pid in sorted(self.tag_mappings.iteritems()):
            print '%s: %s' % (tag, pid)
        print '------------------------------------'

    def check_state(self):
        dump = self.procd_interface.dump()
        if not dump.equals(self.procd_reference):
            print 'ProcD state is incorrect!'
            self.show_state(dump)
            return False
        return True

    # run the test; commands are read from the given file;
    # if interactive is True, the test will wait for "Enter"
    # to be pressed in between each command
    def run(self, filename, interactive):
        ok = True
        f = open(filename, 'r')
        while True:
            line = f.readline()
            tokens = line.split()
            if interactive:
                self.show_state()
            if not tokens:
                break
            print 'Next command: ' + line.rstrip()
            if interactive:
                raw_input()
            if tokens[0] == 'SPAWN':
                self.spawn(tokens[1], tokens[2])
            elif tokens[0] == 'KILL':
                self.kill(tokens[1])
            elif tokens[0] == 'REGISTER':
                watcher = None
                if len(tokens) > 2:
                    watcher = tokens[2]
                self.register(tokens[1], watcher)
                ok = self.check_state()
            elif tokens[0] == 'UNREGISTER':
                self.unregister(tokens[1])
                ok = self.check_state()
            elif tokens[0] == 'SNAPSHOT':
                self.snapshot()
                ok = self.check_state()
            if not ok:
                break
        f.close()
        self.procd_interface.quit()
        return ok
Esempio n. 6
0
class ProcDTester:

    def __init__(self):

        if platform.system() == 'Windows':
            pipe_name = '\\\\.\\pipe\\procd_pipe.' + str(os.getpid())
        else:
            pipe_name = 'procd_pipe'

        self.drone_tree = DroneTree()

        init_pid = self.drone_tree.get_init_pid()
        procd_pid = self.drone_tree.spawn(init_pid,
            "./condor_procd -A " + pipe_name + " -L procd_log -S -1")

        self.procd_reference = ProcDReference(init_pid)
        self.procd_reference.spawn(procd_pid, init_pid)

        self.procd_interface = ProcDInterface(pipe_name)

        self.tag_mappings = {'INIT': init_pid, 'PROCD': procd_pid}

    def spawn(self, tag, parent_tag):
        ppid = self.tag_mappings[parent_tag]
        pid = self.drone_tree.spawn(ppid)
        self.procd_reference.spawn(pid, ppid)
        self.tag_mappings[tag] = pid

    def kill(self, tag):
        pid = self.tag_mappings[tag]
        self.drone_tree.kill(pid)
        self.procd_reference.kill(pid)

    def register(self, tag, watcher):
        pid = self.tag_mappings[tag]
        watcher_pid = 0
        if watcher is not None:
            watcher_pid = self.tag_mappings[watcher]
        self.procd_interface.register(pid, watcher_pid)
        self.procd_reference.register(pid, watcher_pid)

    def unregister(self, tag):
        pid = self.tag_mappings[tag]
        self.procd_interface.unregister(pid)
        self.procd_reference.unregister(pid)

    def snapshot(self):
        self.procd_interface.snapshot()

    def show_state(self, procd_dump = None):
        if procd_dump is None:
            procd_dump = self.procd_interface.dump()
        print '------ ProcD State ------'
        procd_dump.dump()
        print '------ Reference State ------'
        self.procd_reference.dump()
        print '------ Tag-to-PID Mappings ------'
        for tag, pid in sorted(self.tag_mappings.iteritems()):
            print '%s: %s' % (tag, pid)
        print '------------------------------------'

    def check_state(self):
        dump = self.procd_interface.dump()
        if not dump.equals(self.procd_reference):
            print 'ProcD state is incorrect!'
            self.show_state(dump)
            return False
        return True

    # run the test; commands are read from the given file;
    # if interactive is True, the test will wait for "Enter"
    # to be pressed in between each command
    def run(self, filename, interactive):
        ok = True
        f = open(filename, 'r')
        while True:
            line = f.readline()
            tokens = line.split()
            if interactive:
                self.show_state()
            if not tokens:
                break
            print 'Next command: ' + line.rstrip()
            if interactive:
                raw_input()
            if tokens[0] == 'SPAWN':
                self.spawn(tokens[1], tokens[2])
            elif tokens[0] == 'KILL':
                self.kill(tokens[1])
            elif tokens[0] == 'REGISTER':
                watcher = None
                if len(tokens) > 2:
                    watcher = tokens[2]
                self.register(tokens[1], watcher)
                ok = self.check_state()
            elif tokens[0] == 'UNREGISTER':
                self.unregister(tokens[1])
                ok = self.check_state()
            elif tokens[0] == 'SNAPSHOT':
                self.snapshot()
                ok = self.check_state()
            if not ok:
                break
        f.close()
        self.procd_interface.quit()
        return ok