Esempio n. 1
0
def do_put_test(self, vdi_mb, put_data_size, put_offset, check_border_size, unexpose_reexpose=False):
    self.assert_(put_data_size + put_offset <= vdi_mb * M, 'Test has invalid data offsets.')

    lower_border_size = min(put_offset, check_border_size)
    upper_border_size = min(vdi_mb * M - put_offset - put_data_size, check_border_size)

    put_data = 'abcdefgh' * (put_data_size / 8)
    expect_data = ('\0' * lower_border_size) + put_data + ('\0' * upper_border_size)

    hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=vdi_mb)
    transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')
    record = transferclient.get_record(hostname, vdi_uuid=vdi)

    put_status, put_headers = http_put(record, put_data, put_offset, vdi_mb * M)
    self.assertEqual(put_status, 200)
    if unexpose_reexpose:
        transferclient.unexpose(hostname, vdi_uuid=vdi)
        transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')
        record = transferclient.get_record(hostname, vdi_uuid=vdi)

    get_status, get_headers, get_respdata = http_get(record, (put_offset - lower_border_size, put_offset + put_data_size + upper_border_size))
    self.assert_(get_status == 200 or get_status == 206, 'GET status code %d is not success.' % get_status)
    self.assertEquals(len(get_respdata), len(expect_data))
    self.assertEquals(get_respdata, expect_data)
    clean_up()
Esempio n. 2
0
 def testVdiRecordStatusIsUnusedAfterUnexpose(self):
     hostname, network, vdi = testsetup.setup_host_and_network(templates=1,
                                                               vdi_mb=10)
     transferclient.expose(hostname,
                           vdi_uuid=vdi,
                           network_uuid=network,
                           transfer_mode='http')
     transferclient.unexpose(hostname, vdi_uuid=vdi)
     record = transferclient.get_record(hostname, vdi_uuid=vdi)
     self.assertEqual(record['status'], 'unused')
Esempio n. 3
0
 def testThereAreNoPluggedInVbdsAfterUnexpose(self):
     hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=10)
     transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')
     transferclient.unexpose(hostname, vdi_uuid=vdi)
     vbds = vbd_uuids_and_attached_flags_by_vdi_uuid(hostname, vdi)
     for vbd, attached in vbds:
         self.assertFalse(attached, 'VBD %s is still attached' % vbd)
     if vbds:
         logging.info('testThereAreNoPluggedInVbdsAfterUnexpose passed because all %d VBDs are unattached.' % len(vbds))
     else:
         logging.info('testThereAreNoPluggedInVbdsAfterUnexpose passed because there are no VBDs.')
Esempio n. 4
0
 def testTargetHostUUIDConfig(self):
     hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=10)
     if self.REMOVE_TEMPLATE:
         #Remove the TVM template to catch errors that would occur on first run (when the template doesn't exist)
         testsetup.remove_tvm_template(hostname)
     host_uuid = get_host_uuids(hostname)
     transfer_mode=self.TRANSFER_MODE
     asyncexpose = ExposeThread(hostname, network, vdi, transfer_mode=transfer_mode, target_host_uuid=host_uuid)
     asyncexpose.start()
     while asyncexpose.isAlive():
         time.sleep(1)
     record = transferclient.get_record(hostname, vdi_uuid=vdi)
     logging.debug(record)
     transferclient.unexpose(hostname, vdi_uuid=vdi)
     testsetup.clean_host(hostname)
Esempio n. 5
0
def do_put_test(self,
                vdi_mb,
                put_data_size,
                put_offset,
                check_border_size,
                unexpose_reexpose=False):
    self.assert_(put_data_size + put_offset <= vdi_mb * M,
                 'Test has invalid data offsets.')

    lower_border_size = min(put_offset, check_border_size)
    upper_border_size = min(vdi_mb * M - put_offset - put_data_size,
                            check_border_size)

    put_data = 'abcdefgh' * (put_data_size / 8)
    expect_data = ('\0' * lower_border_size) + put_data + ('\0' *
                                                           upper_border_size)

    hostname, network, vdi = testsetup.setup_host_and_network(templates=1,
                                                              vdi_mb=vdi_mb)
    transferclient.expose(hostname,
                          vdi_uuid=vdi,
                          network_uuid=network,
                          transfer_mode='http')
    record = transferclient.get_record(hostname, vdi_uuid=vdi)

    put_status, put_headers = http_put(record, put_data, put_offset,
                                       vdi_mb * M)
    self.assertEqual(put_status, 200)
    if unexpose_reexpose:
        transferclient.unexpose(hostname, vdi_uuid=vdi)
        transferclient.expose(hostname,
                              vdi_uuid=vdi,
                              network_uuid=network,
                              transfer_mode='http')
        record = transferclient.get_record(hostname, vdi_uuid=vdi)

    get_status, get_headers, get_respdata = http_get(
        record, (put_offset - lower_border_size,
                 put_offset + put_data_size + upper_border_size))
    self.assert_(get_status == 200 or get_status == 206,
                 'GET status code %d is not success.' % get_status)
    self.assertEquals(len(get_respdata), len(expect_data))
    self.assertEquals(get_respdata, expect_data)
    clean_up()
Esempio n. 6
0
 def testThereAreNoPluggedInVbdsAfterUnexpose(self):
     hostname, network, vdi = testsetup.setup_host_and_network(templates=1,
                                                               vdi_mb=10)
     transferclient.expose(hostname,
                           vdi_uuid=vdi,
                           network_uuid=network,
                           transfer_mode='http')
     transferclient.unexpose(hostname, vdi_uuid=vdi)
     vbds = vbd_uuids_and_attached_flags_by_vdi_uuid(hostname, vdi)
     for vbd, attached in vbds:
         self.assertFalse(attached, 'VBD %s is still attached' % vbd)
     if vbds:
         logging.info(
             'testThereAreNoPluggedInVbdsAfterUnexpose passed because all %d VBDs are unattached.'
             % len(vbds))
     else:
         logging.info(
             'testThereAreNoPluggedInVbdsAfterUnexpose passed because there are no VBDs.'
         )
Esempio n. 7
0
    def testGetRecordWorksWhenReexposingVDIMultipleTimes(self):
        hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=10)

        transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')
        retval = transferclient.unexpose(hostname, vdi_uuid=vdi)
        self.assertEquals(retval, 'OK', 'Unexpose failed, never got to get_record testing.')
        transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')

        record = transferclient.get_record(hostname, vdi_uuid=vdi)
        self.assertVdiStatus(record, vdi, 'exposed')
        clean_up()
Esempio n. 8
0
    def testUnexposeWaitsUntilPartialExposeHasFinished(self):
        hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=10)
        asyncexpose = ExposeThread(hostname, network, vdi)
        asyncexpose.start()

        response = None
        while not response:
            logging.debug('VDI status still unused, unexposing')
            try:
                response = transferclient.unexpose(hostname, vdi_uuid=vdi)
            except XenAPI.Failure, e:
                if e.details[2] != 'VDINotInUse':
                    raise
Esempio n. 9
0
    def testGetRecordWorksWhenReexposingVDIMultipleTimes(self):
        hostname, network, vdi = testsetup.setup_host_and_network(templates=1,
                                                                  vdi_mb=10)

        transferclient.expose(hostname,
                              vdi_uuid=vdi,
                              network_uuid=network,
                              transfer_mode='http')
        retval = transferclient.unexpose(hostname, vdi_uuid=vdi)
        self.assertEquals(retval, 'OK',
                          'Unexpose failed, never got to get_record testing.')
        transferclient.expose(hostname,
                              vdi_uuid=vdi,
                              network_uuid=network,
                              transfer_mode='http')

        record = transferclient.get_record(hostname, vdi_uuid=vdi)
        self.assertVdiStatus(record, vdi, 'exposed')
        clean_up()
Esempio n. 10
0
    def _doTest(self, src, frag_size, sleep_time, delta, randomise_delta=False):
        """Tests how we handle the client droping/losing packets
        when they are POSTing a BITS request"""

        physize = os.stat(src).st_size                
        vdi_mb = vhd.get_virtual_size(src)
        
        #Expose a new VDI
        record, hostname = create_and_expose(vdi_mb)
        url_path = record['url_path'] + ".vhd"

        #Create BITS Session
        conn, session = create_BITS_session(record)
        
        logging.debug("Frag_Size = %d" % frag_size)
        
        #Adjust frag size for the case we have small disks
        if physize < frag_size:
            frag_size = physize

        #Initialise Upload variables
        range_start = 0
        range_end = frag_size
        file_offset = 0
        fh = open(src, 'r')
        count = 0
        while file_offset < physize:
            if randomise_delta:
                #Generate a random number within the request range
                delta = random.randint(0, range_end - range_start)
                logging.debug("Random Delta = %d" % delta)

            if range_end == physize:
                delta = 0

            logging.debug("Uploading %d-%d/%d" % (range_start, range_end, physize))
            data_size = (range_end - range_start - delta)

            if count == 1:
                data_size = 10
            logging.debug("Actually uploading %d bytes" % data_size)
            data = fh.read(data_size)
            logging.debug("Data Read")
            try:
                bits.fragment(conn, session, url_path, data, range_start, range_end, physize)
            except:
                logging.debug("Fragment Sent partially %d-%d/%d" % (range_start, range_end, physize))

            file_offset += (range_end - range_start - delta)
            range_start = file_offset + 1

            count += 1

            if count > 1:
                sys.exit(1)
    
            #Condition for last frag upload
            range_end = file_offset + frag_size
            if physize < range_end:
                range_end = physize

            #Sleep before creating new connection 
            logging.debug("Sleeping for %d seconds" % sleep_time)
            time.sleep(sleep_time)

            #Garbage Collect to make sure we don't run out of memory
            data = ''
            gc.collect()
            
            #Create new connection
            logging.debug("Get a new connection...")
            conn = bits.open_connection(get_proto(record), record['ip'], record['port'])

        #Close file handle
        fh.close()
        
        #Unexpose the transfervm
        logging.debug("Unexposing the Transfer VM for vdi %s" % record['vdi_uuid'])
        transferclient.unexpose(hostname, vdi_uuid=record['vdi_uuid'])

        #Retrieve the blockmap to expose the VDI as a vhd
        bitmap = transferclient.get_vdi_bitmap(hostname, record['vdi_uuid'])
        logging.debug("Got bitmap %s" % bitmap)

        #Expose disk with vhd_block_map
        args = {'transfer_mode': 'bits',
                'vdi_uuid': record['vdi_uuid'],
                'network_uuid': 'management',
                'vhd_blocks': bitmap,
                'vhd_uuid': record['vdi_uuid']}

        transferclient.expose(hostname, **args)

        record = transferclient.get_record(hostname, vdi_uuid=record['vdi_uuid'])
        logging.debug("Got new record: %s" % record)

        dst = 'test-download.vhd'
        logging.debug("Destination file will be %s" % dst)
        request_size = 200*M
        vhd_tests.bits_download_vhd(record, dst, request_size)
        
        #Compare the two VHDs to check they are identical
        rc = vhd.diff(src, dst)
        logging.debug("Return Code %s" % rc)
        
        #Unexpose the transfervm
        logging.debug("Unexposing the Transfer VM for vdi %s" % record['vdi_uuid'])
        transferclient.unexpose(hostname, vdi_uuid=record['vdi_uuid'])
        
        #Cleanup Disks
        transferclient.remove_vdi(hostname, record['vdi_uuid'])
        
        #Remove Downloaded File
        os.unlink(dst)
Esempio n. 11
0
def unexpose(hostname, record):
    args= {'record_handle': record['record_handle']}
    logging.debug("Unexposeing %s" % record['vdi_uuid'])
    startTime = time.time()
    transferclient.unexpose(hostname, **args)
    logging.debug("Unexpose took %.3f seconds" % (time.time() - startTime))
Esempio n. 12
0
 def testVdiRecordStatusIsUnusedAfterUnexpose(self):
     hostname, network, vdi = testsetup.setup_host_and_network(templates=1, vdi_mb=10)
     transferclient.expose(hostname, vdi_uuid=vdi, network_uuid=network, transfer_mode='http')
     transferclient.unexpose(hostname, vdi_uuid=vdi)
     record = transferclient.get_record(hostname, vdi_uuid=vdi)
     self.assertEqual(record['status'], 'unused')
Esempio n. 13
0
 def _unexpose_vdi(self, hostname, record):
     transferclient.unexpose(hostname, vdi_uuid=record['vdi_uuid'])
     assertVdiKeyNotOnSR(hostname, record['vdi_uuid'])
Esempio n. 14
0
def unexpose(hostname, record):
    args = {'record_handle': record['record_handle']}
    logging.debug("Unexposeing %s" % record['vdi_uuid'])
    startTime = time.time()
    transferclient.unexpose(hostname, **args)
    logging.debug("Unexpose took %.3f seconds" % (time.time() - startTime))