def test_error_response_code_404_with_non_existant_args(self): ''' Ensure all non-existant args return 404 ''' for ep in self.routes_only_args: if "/verb" in ep: rt = re.sub(self.arg_match, self.non_existant_tag, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 404) logger.info("Non-existant arg on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?") elif "/aff-option" in ep: rt = re.sub(self.arg_match, self.non_existant_tag, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 404) logger.info("Non-existant arg on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?") elif "/affix" in ep: rt = re.sub(self.arg_match, self.non_existant_tag, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 404) logger.info("Non-existant arg on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?") elif "/pronoun" in ep: rt = re.sub(self.arg_match, self.non_existant_tag, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 404) logger.info("Non-existant arg on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?") elif "/conjugations": rt = re.sub(self.arg_match, self.non_existant_tag, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 404) logger.info("Non-existant arg on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?") else: logger.warning("Route " + self.host + ep + " was registered, but not tested.")
def test_fst(self): ''' Check if all tags are deemed valid by FST ''' for tag in self.fst_tags: try: list(self.fp.down(tag))[0] except IndexError: logger.warning("The tag " + tag + " caused an error with the FST.") except NullFomaTransducerException: return skip("FST not found on this machine")
def test_error_response_code_405_with_disallowed_methods(self): ''' Ensure all disallowed methods return 405s ''' for rt in self.routes_no_fst_no_args: try: r = requests.delete(self.host + rt) self.assertEqual(r.status_code, 405) logger.info("'DELETE' method on route " + self.host + rt + " returned " + str(r.status_code)) r = requests.put(self.host + rt) self.assertEqual(r.status_code, 405) logger.info("'PUT' method on route " + self.host + rt + " returned " + str(r.status_code)) r = requests.post(self.host + rt) self.assertEqual(r.status_code, 405) logger.info("'POST' method on route " + self.host + rt + " returned " + str(r.status_code)) except AssertionError: logger.warning("Route " + self.host + rt + " returned " + str(r.status_code)) except: logger.error("Couldn't connect. Is flask running?")
def test_wrong_person_with_command(self): ''' If anything other than 2nd person is used with command, response should be a 400 **this is unclear, and TBD. Currently returns nothing** ''' params = { 'verb': self.all_blue_verb_tags[0], 'aff-option': self.command_tag, 'patient': self.first_pers_tag } for host in self.servers: try: r = requests.get(host + self.route, params=params, headers=self.headers) self.assertEqual(r.status_code, 400) logger.info("Request to " + r.url + " returned " + str(r.status_code)) except Exception as e: logger.warning("Request to " + host + self.route + " returned " + str(e))
from tqdm import tqdm from wordweaver.app import app from wordweaver import VERSION from wordweaver.buildtools.swagger_spec_gen import SwaggerSpecGenerator from wordweaver import __file__ as ww_file from wordweaver.fst.utils.foma_access_python import foma_access_python as foma_access from wordweaver.config import ENV_CONFIG from wordweaver.log import logger from wordweaver.resources.utils import return_plain DATA_DIR = os.environ.get('WW_DATA_DIR') if not DATA_DIR: logger.warning( 'WW_DATA_DIR environment variable is not set, using default sample data instead.' ) DATA_DIR = os.path.join(os.path.dirname(ww_file), 'sample', 'data') FOMABINS_DIR = os.path.join(DATA_DIR, 'fomabins') def create_app(): return app @click.version_option(version=VERSION, prog_name="wordweaver") @click.group(cls=FlaskGroup, create_app=create_app) def cli(): '''Management script for WordWeaver'''
def test_response_code_with_args(self): ''' Ensure all args return 200 ''' for ep in self.routes_only_args: if "/verb" in ep: for x in self.all_verb_tags: rt = re.sub(self.arg_match, x, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 200) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code) + ". Is the FST running?") except: logger.error("Couldn't connect. Is flask running?") logger.info("Successfully tested " + str(len(self.all_verb_tags)) + " verb resources at route " + self.host + ep + " .") elif "/aff-option" in ep: for x in self.all_affopt_tags: rt = re.sub(self.arg_match, x, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 200) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code) + ". Is the FST running?") except: logger.error("Couldn't connect. Is flask running?") logger.info("Successfully tested " + str(len(self.all_affopt_tags)) + " affix option resources at route " + self.host + ep + ".") elif "/affix" in ep: for x in self.all_affix_tags: rt = re.sub(self.arg_match, x, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 200) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code) + ". Is the FST running?") except: logger.error("Couldn't connect. Is flask running?") logger.info("Successfully tested " + str(len(self.all_affix_tags)) + " affix resources at route " + self.host + ep + ".") elif "/pronoun" in ep: for x in self.all_pronoun_tags: rt = re.sub(self.arg_match, x, ep) try: r = requests.get(self.host + rt) self.assertEqual(r.status_code, 200) except AssertionError: logger.error("Route " + self.host + rt + " returned " + str(r.status_code) + ". Is the FST running?") except: logger.error("Couldn't connect. Is flask running?") logger.info("Successfully tested " + str(len(self.all_pronoun_tags)) + " pronoun resources at route " + self.host + ep + ".") elif "/conjugations": logger.debug("Passing conjugations args for other test") pass else: logger.warning("Route " + ep + " was registered, but not tested.")