def test_get_hash_stats_returns_updated_stats_4020(self):
        url = self.base_url + ':' + self.port + '/' + 'stats'
        response = get_hash_stats(url)
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        # validate reponse against the json schema
        jsonschema.validate(response.json(), self.stats_schema)
        job_count, avgTime = response.json()['TotalRequests'], response.json(
        )['AverageTime']

        for i in range(3):
            password = gen_password()
            post_url = self.base_url + ':' + self.port + '/' + 'hash'
            payload = {'password': password}
            post_hash(post_url, self.headers, payload)

        time.sleep(5)
        response = get_hash_stats(url)
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        # validate reponse against the json schema
        jsonschema.validate(response.json(), self.stats_schema)
        new_job_count, avgTime = response.json(
        )['TotalRequests'], response.json()['AverageTime']
        self.assertEqual(new_job_count, job_count + 3,
                         'Invalid TotalRequests Returned')
        self.assertTrue(avgTime > 0,
                        'BUG: Invalid AverageTime Returned in Stats')
Пример #2
0
    def test_new_post_rejected_during_pending_shutdown_6040(self):
        self._restart_app()
        url = self.base_url + ':' + self.port + '/' + 'hash'
        payload = {'password': '******'}
        for i in range(5):
            response = post_hash(url, self.headers, payload, 1)
        payload = 'shutdown'
        response = post_shutdown(url, None, payload)
        # verify it shuts down gracefully when there are in-flight hashing
        self.assertEqual(response.status_code, codes.OK,
                         'Bug: INVALID Status Code')

        # Verify new post hash is not accepted when shutdown is in progress
        url = self.base_url + ':' + self.port + '/' + 'hash'
        payload = {'password': '******'}
        response = post_hash(url, self.headers, payload, 1)
        print(response.text)
        self.assertEqual(response.status_code, codes.SERVICE_UNAVAILABLE,
                         'INVALID Status Code')
        self.assertEqual(response.text.strip(), 'Service Unavailable',
                         'Invalid Error Message')

        # verify stats reflects in-flight hashing before shutdown
        time.sleep(3)
        url = self.base_url + ':' + self.port + '/' + 'stats'
        response = get_hash_stats(url)
        job_count, avgTime = response.json()['TotalRequests'], response.json(
        )['AverageTime']
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        self.assertTrue(job_count >= 4, 'Invalid TotalRequests')
Пример #3
0
    def test_valid_post_increments_job_id_by_one_2030(self):
        url = self.base_url + ':' + self.port + '/' + 'hash'
        payload = {'password': '******'}
        response = post_hash(url, self.headers, payload)
        id1 = int(response.text)
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        self.assertGreater(id1, 0, 'Invalid Job Id Returned')

        payload = {'password': '******'}
        response = post_hash(url, self.headers, payload)
        id2 = int(response.text)
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        self.assertGreater(id2, 0, 'Invalid Job Id Returned')
        self.assertEqual(id2 - id1, 1, 'Wrong Job Id increment')
Пример #4
0
 def test_post_with_empty_password_2040(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'password': ''}
     response = post_hash(url, self.headers, payload)
     id = int(response.text)
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(id, 0, 'Invalid Job Id Returned')
Пример #5
0
 def test_post_without_password_2060(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'something': 'else'}
     response = post_hash(url, self.headers, payload)
     self.assertEqual(response.status_code, codes.BAD_REQUEST,
                      'INVALID Status Code')
     self.assertEqual(response.text.strip(), 'Malformed Input',
                      'Invalid Error Message')
Пример #6
0
 def test_post_with_invalid_payload_2110(self):
     invalid_payload = "{'password': }"
     url = self.base_url + ':' + self.port + '/' + 'hash'
     response = post_hash(url, self.headers, invalid_payload)
     self.assertEqual(response.status_code, codes.BAD_REQUEST,
                      'INVALID Status Code')
     self.assertEqual(response.text.strip(), 'Malformed Input',
                      'Invalid Error Message')
Пример #7
0
 def test_post_password_in_other_language_2100(self):
     special_chars = 'パスワード'
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'password': special_chars}
     response = post_hash(url, self.headers, payload)
     id = int(response.text)
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(id, 0, 'Invalid Job Id Returned')
Пример #8
0
 def test_post_password_with_special_chars_2090(self):
     special_chars = '! @#$%^&*()-_+=[{]}\|;:,./?'
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'password': special_chars}
     response = post_hash(url, self.headers, payload)
     id = int(response.text)
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(id, 0, 'Invalid Job Id Returned')
Пример #9
0
 def test_post_with_non_string_password_2070(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = "{'password': abcd}"  # abcd without quotes
     response = post_hash(url, self.headers, payload)
     self.assertEqual(response.status_code, codes.BAD_REQUEST,
                      'INVALID Status Code')
     self.assertEqual(response.text.strip(), 'Malformed Input',
                      'Invalid Error Message')
Пример #10
0
    def test_first_post_returns_job_id_one_2020_1000_1020_1030(self):
        new_port = 9099

        self._restart_app(9099)
        url = self.base_url + ':' + str(new_port) + '/' + 'hash'
        payload = {'password': '******'}
        response = post_hash(url, self.headers, payload)
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        self.assertEqual(int(response.text), 1, 'Invalid Job Id Returned')
Пример #11
0
 def test_post_with_wrong_header_2130(self):
     payload = None
     url = self.base_url + ':' + self.port + '/' + 'hash'
     wrong_headers = {'Content-Type': 'multipart/form-data'}
     response = post_hash(url, wrong_headers, payload)
     self.assertEqual(response.status_code, codes.BAD_REQUEST,
                      'INVALID Status Code')
     self.assertEqual(response.text.strip(), 'Malformed Input',
                      'Invalid Error Message')
Пример #12
0
 def test_valid_post_returns_id_immediately_2010(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'password': '******'}
     before_post = datetime.now()
     response = post_hash(url, self.headers, payload)
     after_post = datetime.now()
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(int(response.text), 0, 'Invalid Job Id Returned')
     self.assertTrue((after_post - before_post).total_seconds() < 5,
                     'Job Id Did not Return Immediately')
Пример #13
0
 def test_get_valid_job_id_returns_correct_hash_3020(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     pwd = gen_password(12)
     payload = {'password': pwd}
     response = post_hash(url, self.headers, payload)
     job_id = response.text
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(int(job_id), 0, 'Invalid Job Id Returned')
     sha512_hash = get_sha512_hashing(pwd)
     base64_hash = get_base64_encoding(sha512_hash)
     response = get_hash_by_id(url, job_id)
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertEqual(response.text, base64_hash, 'Invalid Hash Returned')
Пример #14
0
 def test_get_valid_job_id_works_5_seconds_after_hash_3010(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     pwd = gen_password(12)
     payload = {'password': pwd}
     before_post = datetime.now()
     response = post_hash(url, self.headers, payload)
     job_id = response.text
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(int(job_id), 0, 'Invalid Job Id Returned')
     sha512_hash = get_sha512_hashing(pwd)
     base64_hash = get_base64_encoding(sha512_hash)
     response = get_hash_by_id(url, job_id)
     after_post = datetime.now()
     time_delta = (after_post - before_post).total_seconds()
     self.assertTrue(5 < time_delta < 6,
                     'Job Id Did not Return Immediately')
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertEqual(response.text, base64_hash, 'Invalid Hash Returned')
Пример #15
0
    def test_post_shutdown_stops_app_gracefully_6010_6030(self):
        self._restart_app()
        url = self.base_url + ':' + self.port + '/' + 'hash'
        payload = {'password': '******'}
        for i in range(5):
            response = post_hash(url, self.headers, payload, 1)
        payload = 'shutdown'
        response = post_shutdown(url, None, payload)
        # verify it shuts down gracefully when there are in-flight hashing
        self.assertEqual(response.status_code, codes.OK,
                         'Bug: INVALID Status Code')

        # verify stats reflects in-flight hashing before shutdown
        time.sleep(3)
        url = self.base_url + ':' + self.port + '/' + 'stats'
        response = get_hash_stats(url)
        job_count, avgTime = response.json()['TotalRequests'], response.json(
        )['AverageTime']
        self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
        self.assertTrue(job_count >= 4, 'Invalid TotalRequests')
Пример #16
0
 def test_valid_post_2000(self):
     url = self.base_url + ':' + self.port + '/' + 'hash'
     payload = {'password': '******'}
     response = post_hash(url, self.headers, payload)
     self.assertEqual(response.status_code, codes.OK, 'INVALID Status Code')
     self.assertGreater(int(response.text), 0, 'Invalid Job Id Returned')