Example #1
0
def generate_vhd(vdi_mb, pattern, vhd_name="tmp.vhd"):
    REFERENCE_FILE = "reference.tmp"
    logging.debug("Creating VHD...")
    vhd.create(vhd_name, vdi_mb)
    logging.debug("Filling VHD...")
    vhd.fill(vhd_name, REFERENCE_FILE, vdi_mb, pattern)
    logging.debug("Generated %s" % vhd_name)
    return vhd_name
Example #2
0
def generate_vhd(vdi_mb, pattern, vhd_name="tmp.vhd"):
    REFERENCE_FILE = "reference.tmp"
    logging.debug("Creating VHD...")
    vhd.create(vhd_name, vdi_mb)
    logging.debug("Filling VHD...")
    vhd.fill(vhd_name, REFERENCE_FILE, vdi_mb, pattern)
    logging.debug("Generated %s" % vhd_name)
    return vhd_name
Example #3
0
    def _testFragment(self, pattern, frag_size):
        TMP_RAW_RESPONSE_FILE = "response.tmp"
        TMP_VHD_RESPONSE_FILE = "response.vhd"
        REFERENCE_FILE = "reference.tmp"
        VHD_FILE = "tmp.vhd"
        VDI_MB = 16
        frag_variable = False

        if not frag_size:
            frag_variable = True
            frag_size = random.randint(1, 100*K)

        vdi_mb = VDI_MB
        vhd.create(VHD_FILE, vdi_mb)
        vhd.fill(VHD_FILE, REFERENCE_FILE, vdi_mb, pattern)
        f = open(VHD_FILE, 'r')
        data = f.read()
        f.close()

        record, resp = do_test(self, packet_type='CREATE-SESSION',
                      headers={'BITS-Supported-Protocols': BITS_PROTOCOL},
                      expected_status=200,
                      expected_headers={'BITS-Protocol': BITS_PROTOCOL.lower(),
                                        'BITS-Host-ID': None,
                                        'BITS-Host-Id-Fallback-Timeout': None},
                      vhd=True, vdi_raw=self.VDI_RAW, ret_headers=True)

        session_id = resp['bits-session-id']
        
        range_start = 0
        range_end = frag_size
        total = len(data)
        while (range_start < total):
            if range_end > total:
                range_end = total
            rangeheader = http_test.content_range_header(range_start, range_end, total)
            record = do_test(self, packet_type='FRAGMENT',
                                   session_id=session_id,
                                   data=data[range_start:range_end],
                                   headers={'Content-Range': rangeheader},
                                   expected_status=200,
                                   expected_headers={'BITS-Received-Content-Range': str(range_end),
                                                     'BITS-Reply-URL': None},
                                   record=record, vhd=True)
            range_start = range_end
            if frag_variable:
                frag_size = random.randint(1, 100*K)
            range_end += frag_size

        f = open(REFERENCE_FILE, 'r')
        data = f.read()
        f.close()
        assertVdiData(self, record, data)
        clean_up()
Example #4
0
def do_vhd_put_get_test(self, vdi_mb, vdi_raw, pattern, blocks = None):
    MAX_FRAG_SIZE = 100*K
    TMP_RAW_RESPONSE_FILE = "response.tmp"
    TMP_VHD_RESPONSE_FILE = "response.vhd"
    REFERENCE_FILE = "reference.tmp"
    VHD_FILE = "tmp.vhd"
    bitmap = None

    vhd.create(VHD_FILE, vdi_mb)
    vhd.fill(VHD_FILE, REFERENCE_FILE, vdi_mb, pattern)
    hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=vdi_mb, vdi_raw=vdi_raw)
    args = {'vdi_uuid': vdi, 'network_uuid': network, 'transfer_mode': 'http'}
    if blocks:
        bitmap = vhd.to_bitmap(blocks, vdi_mb * M)
        args['vhd_blocks'] = base64.b64encode(zlib.compress(bitmap))
	args['vhd_uuid'] = vdi #vhd uuid needed for get - using vdi value for test purposes
    transferclient.expose(hostname, **args)
    record = transferclient.get_record(hostname, vdi_uuid=vdi)
    url_path = record['url_path']

    # test "put"
    f = open(VHD_FILE, 'r')
    put_data = f.read()
    f.close()

    record['url_path'] = url_path + ".vhd"
    put_status, put_headers = http_put(record, put_data, None, vdi_mb * M)
    self.assertEqual(put_status, 200)

    record['url_path'] = url_path
    get_status, get_headers, get_respdata = http_get(record)
    if len(get_respdata) > vdi_mb * M:
        # raw VDIs can be larger than requested size
        get_respdata = get_respdata[:vdi_mb * M]
    f = open(TMP_RAW_RESPONSE_FILE, 'w')
    f.write(get_respdata)
    f.close()

    cmd = "diff %s %s" % (TMP_RAW_RESPONSE_FILE, REFERENCE_FILE)
    util.doexec(cmd, 0)

    # test "get"
    record['url_path'] = url_path + ".vhd"
    frag_size = random.randint(1, MAX_FRAG_SIZE)
    range_start = 0
    range_end = frag_size
    head_status, head_headers = http_head(record)
    vhd_size = int(head_headers['content-length'])
    total = vhd_size 
    total_received = 0
    total_chunks = 0
    f = open(TMP_VHD_RESPONSE_FILE, 'w')
    while range_start < total:
        if range_end > total:
            range_end = total
        
        #print "Getting range %d-%d" % (range_start, range_end)
        get_status, get_headers, get_respdata = http_get(record, content_range=(range_start, range_end, total))
        self.assertEquals(get_status, 200)
        #print "Got response of length %d" % len(get_respdata)
        total_received += len(get_respdata)
        total_chunks += 1
        f.write(get_respdata)

        range_start = range_end
        frag_size = random.randint(1, MAX_FRAG_SIZE)
        range_end += frag_size

    f.close()
    #print "Got total length %d in %d chunks" % (total_received, total_chunks)

    if blocks:
        vhd.mask(REFERENCE_FILE, vdi_mb * M, blocks)
        vhd.extract(TMP_VHD_RESPONSE_FILE, TMP_RAW_RESPONSE_FILE)
        cmd = "diff %s %s" % (TMP_RAW_RESPONSE_FILE, REFERENCE_FILE)
        util.doexec(cmd, 0)
    else:
        vhd.diff(TMP_VHD_RESPONSE_FILE, VHD_FILE)

    clean_up()
Example #5
0
    def _testFragment(self, pattern, frag_size):
        TMP_RAW_RESPONSE_FILE = "response.tmp"
        TMP_VHD_RESPONSE_FILE = "response.vhd"
        REFERENCE_FILE = "reference.tmp"
        VHD_FILE = "tmp.vhd"
        VDI_MB = 16
        frag_variable = False

        if not frag_size:
            frag_variable = True
            frag_size = random.randint(1, 100 * K)

        vdi_mb = VDI_MB
        vhd.create(VHD_FILE, vdi_mb)
        vhd.fill(VHD_FILE, REFERENCE_FILE, vdi_mb, pattern)
        f = open(VHD_FILE, 'r')
        data = f.read()
        f.close()

        record, resp = do_test(
            self,
            packet_type='CREATE-SESSION',
            headers={'BITS-Supported-Protocols': BITS_PROTOCOL},
            expected_status=200,
            expected_headers={
                'BITS-Protocol': BITS_PROTOCOL.lower(),
                'BITS-Host-ID': None,
                'BITS-Host-Id-Fallback-Timeout': None
            },
            vhd=True,
            vdi_raw=self.VDI_RAW,
            ret_headers=True)

        session_id = resp['bits-session-id']

        range_start = 0
        range_end = frag_size
        total = len(data)
        while (range_start < total):
            if range_end > total:
                range_end = total
            rangeheader = http_test.content_range_header(
                range_start, range_end, total)
            record = do_test(self,
                             packet_type='FRAGMENT',
                             session_id=session_id,
                             data=data[range_start:range_end],
                             headers={'Content-Range': rangeheader},
                             expected_status=200,
                             expected_headers={
                                 'BITS-Received-Content-Range': str(range_end),
                                 'BITS-Reply-URL': None
                             },
                             record=record,
                             vhd=True)
            range_start = range_end
            if frag_variable:
                frag_size = random.randint(1, 100 * K)
            range_end += frag_size

        f = open(REFERENCE_FILE, 'r')
        data = f.read()
        f.close()
        assertVdiData(self, record, data)
        clean_up()
Example #6
0
def do_vhd_put_get_test(self, vdi_mb, vdi_raw, pattern, blocks=None):
    MAX_FRAG_SIZE = 100 * K
    TMP_RAW_RESPONSE_FILE = "response.tmp"
    TMP_VHD_RESPONSE_FILE = "response.vhd"
    REFERENCE_FILE = "reference.tmp"
    VHD_FILE = "tmp.vhd"
    bitmap = None

    vhd.create(VHD_FILE, vdi_mb)
    vhd.fill(VHD_FILE, REFERENCE_FILE, vdi_mb, pattern)
    hostname, network, vdi = testsetup.setup_host_and_network(templates=1,
                                                              vdi_mb=vdi_mb,
                                                              vdi_raw=vdi_raw)
    args = {'vdi_uuid': vdi, 'network_uuid': network, 'transfer_mode': 'http'}
    if blocks:
        bitmap = vhd.to_bitmap(blocks, vdi_mb * M)
        args['vhd_blocks'] = base64.b64encode(zlib.compress(bitmap))
        args[
            'vhd_uuid'] = vdi  #vhd uuid needed for get - using vdi value for test purposes
    transferclient.expose(hostname, **args)
    record = transferclient.get_record(hostname, vdi_uuid=vdi)
    url_path = record['url_path']

    # test "put"
    f = open(VHD_FILE, 'r')
    put_data = f.read()
    f.close()

    record['url_path'] = url_path + ".vhd"
    put_status, put_headers = http_put(record, put_data, None, vdi_mb * M)
    self.assertEqual(put_status, 200)

    record['url_path'] = url_path
    get_status, get_headers, get_respdata = http_get(record)
    if len(get_respdata) > vdi_mb * M:
        # raw VDIs can be larger than requested size
        get_respdata = get_respdata[:vdi_mb * M]
    f = open(TMP_RAW_RESPONSE_FILE, 'w')
    f.write(get_respdata)
    f.close()

    cmd = "diff %s %s" % (TMP_RAW_RESPONSE_FILE, REFERENCE_FILE)
    util.doexec(cmd, 0)

    # test "get"
    record['url_path'] = url_path + ".vhd"
    frag_size = random.randint(1, MAX_FRAG_SIZE)
    range_start = 0
    range_end = frag_size
    head_status, head_headers = http_head(record)
    vhd_size = int(head_headers['content-length'])
    total = vhd_size
    total_received = 0
    total_chunks = 0
    f = open(TMP_VHD_RESPONSE_FILE, 'w')
    while range_start < total:
        if range_end > total:
            range_end = total

        #print "Getting range %d-%d" % (range_start, range_end)
        get_status, get_headers, get_respdata = http_get(
            record, content_range=(range_start, range_end, total))
        self.assertEquals(get_status, 200)
        #print "Got response of length %d" % len(get_respdata)
        total_received += len(get_respdata)
        total_chunks += 1
        f.write(get_respdata)

        range_start = range_end
        frag_size = random.randint(1, MAX_FRAG_SIZE)
        range_end += frag_size

    f.close()
    #print "Got total length %d in %d chunks" % (total_received, total_chunks)

    if blocks:
        vhd.mask(REFERENCE_FILE, vdi_mb * M, blocks)
        vhd.extract(TMP_VHD_RESPONSE_FILE, TMP_RAW_RESPONSE_FILE)
        cmd = "diff %s %s" % (TMP_RAW_RESPONSE_FILE, REFERENCE_FILE)
        util.doexec(cmd, 0)
    else:
        vhd.diff(TMP_VHD_RESPONSE_FILE, VHD_FILE)

    clean_up()