def test_post_upload_delete_of_datafile(self): ''' Test the ability to delete an uploaded file ''' json_file = open(self.get_support_file('odd_srid_shapefile.zip'), 'r') username, password = self.getUsernamePassword() user_uri = self._create_user(username, password) client = NMTKClient(self.site_url) client.login(username=username, password=password) files = [('file', ('shapefile.zip', json_file, 'application/zip')), ] response = client.post(self.api_file_url, files=files) logger.debug('Response from POST was %s', response) self.assertEqual(response.status_code, 201) data_file_url = response.headers['location'] logger.debug('Response was %s', response.status_code) logger.debug('Location of data file is %s', data_file_url) end = time.time() + self.timeout # 2 minutes for processing while time.time() < end: response = client.get(data_file_url, params={'format': 'json'}) logger.debug('Response is %s', response.json()) if response.json()['status'] == 'Import Complete': break time.sleep(1) self.assertEqual( response.json()['status'], 'Import Complete', 'Expected import to successfully complete within %s seconds' % (self.timeout, )) response = client.delete(data_file_url) logger.debug('Delete of file returned %s', response.status_code) self.assertEqual( response.status_code, 204, 'Expected response code of 204, not %s' % (response.status_code)) response = client.get(data_file_url) self.assertEqual( response.status_code, 404, 'Expected response code of 404, not %s' % (response.status_code))
def test_post_upload_delete_of_datafile(self): ''' Test the ability to delete an uploaded file ''' json_file=open(self.get_support_file('odd_srid_shapefile.zip'),'r') username, password=self.getUsernamePassword() user_uri=self._create_user(username,password) client=NMTKClient(self.site_url) client.login(username=username, password=password) files=[('file', ('shapefile.zip', json_file, 'application/zip')),] response=client.post(self.api_file_url, files=files) logger.debug('Response from POST was %s', response) self.assertEqual(response.status_code, 201) data_file_url=response.headers['location'] logger.debug('Response was %s', response.status_code) logger.debug('Location of data file is %s', data_file_url) end=time.time() + self.timeout # 2 minutes for processing while time.time() < end : response=client.get(data_file_url, params={'format': 'json'}) logger.debug('Response is %s', response.json()) if response.json()['status'] == 'Import Complete': break time.sleep(1) self.assertEqual(response.json()['status'], 'Import Complete', 'Expected import to successfully complete within %s seconds' % (self.timeout,)) response=client.delete(data_file_url) logger.debug('Delete of file returned %s', response.status_code) self.assertEqual(response.status_code, 204, 'Expected response code of 204, not %s' % (response.status_code)) response=client.get(data_file_url) self.assertEqual(response.status_code, 404, 'Expected response code of 404, not %s' % (response.status_code))
class NMTKTestCase(unittest.TestCase): def _id_generator(self, size=6, chars=(string.ascii_lowercase + string.ascii_uppercase + string.digits)): return ''.join(random.choice(chars) for x in range(size)) def getUsernamePassword(self): return (self._id_generator(), self._id_generator()) def getClient(self): return NMTKClient(self.site_url, verify_ssl=self.verify_ssl) def _getSiteConfigDynamic(self): try: command = ['python', self.settings_command, 'create_config'] proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate() config = json.loads(err) self.delusers.append(config['username']) # Stderr contains the config output. return config except Exception as e: logger.exception('Failed to get dynamic config!') return None def _getSiteConfigStatic(self): config_file = os.path.join(nmtk_path, 'tests/config.json') if os.path.exists(config_file): try: config = json.loads(open(config_file).read()) return config except: pass return None def _getSiteConfig(self): config = self._getSiteConfigDynamic() or self._getSiteConfigStatic() if config: return config raise Exception('No valid config found (tried both dynamic and static') def getNMTKClient(self, *args, **kwargs): return NMTKClient(self.site_url, verify_ssl=self.verify_ssl) def setUp(self): self.settings_command = os.path.join(nmtk_path, 'NMTK_apps/manage.py') self.delusers = [] config = self._getSiteConfig() self.support_files = os.path.join(nmtk_path, 'tests/support_files') self.site_url = config['site_url'] self.username = config['username'] self.password = config['password'] self.verify_ssl = config['verify_ssl'] self.client = NMTKClient(self.site_url, verify_ssl=self.verify_ssl) self.client.login(self.username, self.password) self.api_user_url = self.client.getURL('api', 'user/') self.api_file_url = self.client.getURL('api', 'datafile/') def get_support_file(self, fn): return os.path.join(self.support_files, fn) def tearDown(self): ''' Use the management purge_users command to purge the users created during testing from the database. ''' if self.delusers: command = ['python', self.settings_command, 'purge_users'] + self.delusers with open(os.devnull, "w") as fnull: subprocess.call(command, stdout=fnull, stderr=fnull) def _create_user(self, *args, **kwargs): ''' A helper method to create a new user, given a password and userid ''' if len(args) == 2: kwargs['username'] = args[0] kwargs['password'] = args[1] for key in ('username', 'password'): kwargs.setdefault(key, self._id_generator()) response = self.client.create_user(**kwargs) self.delusers.append(kwargs['username']) return response def _delete_user(self, url): response = self.client.delete(url) logger.debug('Deleted %s with status code of %s', url, response.status_code) return response
class NMTKTestCase(unittest.TestCase): def _id_generator(self, size=6, chars=(string.ascii_lowercase + string.ascii_uppercase + string.digits)): return ''.join(random.choice(chars) for x in range(size)) def getUsernamePassword(self): return (self._id_generator(), self._id_generator()) def _getSiteConfigDynamic(self): try: command = ['python', self.settings_command, 'create_config'] proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate() config = json.loads(err) self.delusers.append(config['username']) # Stderr contains the config output. return config except Exception as e: logger.exception('Failed to get dynamic config!') return None def _getSiteConfigStatic(self): config_file = os.path.join(nmtk_path, 'tests/config.json') if os.path.exists(config_file): try: config = json.loads(open(config_file).read()) return config except: pass return None def _getSiteConfig(self): config = self._getSiteConfigDynamic() or self._getSiteConfigStatic() if config: return config raise Exception('No valid config found (tried both dynamic and static') def setUp(self): self.settings_command = os.path.join(nmtk_path, 'NMTK_apps/manage.py') self.delusers = [] config = self._getSiteConfig() self.support_files = os.path.join(nmtk_path, 'tests/support_files') self.site_url = config['site_url'] self.username = config['username'] self.password = config['password'] self.client = NMTKClient(self.site_url) self.client.login(self.username, self.password) self.api_user_url = self.client.getURL('api', 'user/') self.api_file_url = self.client.getURL('api', 'datafile/') def get_support_file(self, fn): return os.path.join(self.support_files, fn) def tearDown(self): ''' Use the management purge_users command to purge the users created during testing from the database. ''' if self.delusers: command = ['python', self.settings_command, 'purge_users'] + self.delusers with open(os.devnull, "w") as fnull: subprocess.call(command, stdout=fnull, stderr=fnull) def _create_user(self, *args, **kwargs): ''' A helper method to create a new user, given a password and userid ''' if len(args) == 2: kwargs['username'] = args[0] kwargs['password'] = args[1] for key in ('username', 'password'): kwargs.setdefault(key, self._id_generator()) response = self.client.create_user(**kwargs) self.delusers.append(kwargs['username']) return response def _delete_user(self, url): response = self.client.delete(url) logger.debug('Deleted %s with status code of %s', url, response.status_code) return response