Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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