Ejemplo n.º 1
0
def test_record_result():
    tr1 = TestResult(False, 'failed', 'failed detail')
    tr2 = TestResult(True, 'testing', 'testing detail')
    tr3 = None
    r = Report()
    r.record_result(tr1)
    r.record_result(tr2)
    r.record_result(tr3)
    assert len(r.results) == 2
    assert r.results[0] is tr1
    assert r.results[1] is tr2
    r.log()
Ejemplo n.º 2
0
class Certifier:
    def __init__(self, document, iface):
        self.logger = logging.getLogger(__name__)
        self.document = document
        self.active_tests = list()
        self.link_tests = list()
        self.dhcp_tests = list()
        self.packet_tests = list()
        self.exit_code = 0
        self.report = Report()

        self.iface = iface

        self.link = LinkControl(self.iface)

        self.packet_queue = Queue()
        self.packet_capture = PacketCapture(iface, self.packet_queue)

        self.finished = False
        self.passed = False
        self.load_document(document)

    def load_document(self, document):
        for statement in document.statements:
            # TODO a better way of marshaling the types?
            type_name = type(statement).__name__
            if type_name == "HostDefineStatement":
                DefineMap.add_host(statement.name, statement.value)
            elif type_name == "NetworkDefineStatement":
                DefineMap.add_network(statement.name, statement.value)
            elif type_name == "LinkDuplexStatement":
                self.link_tests.append(LinkDuplexTest(statement, self.iface))
            elif type_name == "LinkSpeedStatement":
                self.link_tests.append(LinkSpeedTest(statement, self.iface))
            elif type_name == "PortOpenStatement":
                self.active_tests.append(PortOpenTest(statement))
            elif type_name == "IperfStatement":
                self.active_tests.append(IperfTest(statement))
            elif type_name == "PingStatement":
                self.active_tests.append(PingTest(statement))
            elif type_name == "TraceRouteStatement":
                self.active_tests.append(TraceRouteTest(statement))
            elif type_name == "FileFetchStatement":
                self.active_tests.append(FileFetchTest(statement))
            elif type_name == "DHCPStatement":
                self.dhcp_tests.append(DHCPTest(statement))
            elif type_name == "DNSStatement":
                self.active_tests.append(DNSTest(statement))
            elif type_name == "PacketFromStatement":
                self.packet_tests.append(PacketFromTest(statement))
            elif type_name == "PacketTypeStatement":
                self.packet_tests.append(PacketTypeTest(statement))
            elif type_name == "FrameTypeStatement":
                self.packet_tests.append(FrameTypeTest(statement))
            elif type_name == "PacketPortStatement":
                self.packet_tests.append(PacketPortTest(statement))

    def log_report(self):
        self.report.log()

    def run(self):

        # start packet capture
        self.packet_capture.start()

        # give the packet capture time to spin up
        time.sleep(2)

        # elicit DHCP responses
        self.link.dhcp()

        # make link assertions
        for test in self.link_tests:
            self.report.record_result(test.run())

        # perform active tests
        active_tests = []
        for test in self.active_tests:
            active_tests.append(test.start())

        # wait for active tests to complete
        num_active_results = 0
        while num_active_results < len(active_tests):
            self.report.record_result(ActiveTest.get_from_queue())
            num_active_results += 1
            print "{0} of {1} active tests finished".format(
                num_active_results, len(active_tests))
        for t in active_tests:
            t.join()
        print "Active Tests Joined"
        self.packets = self.packet_queue.get()
        self.packet_capture.end()

        # make dhcp assertions
        for test in self.dhcp_tests:
            self.report.record_result(test.run(self.packets))

        for test in self.packet_tests:
            self.report.record_result(test.run(self.packets))