Skip to content
This repository has been archived by the owner on Dec 1, 2022. It is now read-only.

[Minor] Add job-related pytest #1233

Merged
merged 7 commits into from
Jul 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ currdir:
sess: currdir
python3 -m pytest -m "not skip" -k "not tck" job/test_session.py

test: sess
jobs: currdir
python3 -m pytest -m "not skip" -k "not tck" job/test_jobs.py

test: sess jobs
python3 -m pytest -n$(J) --dist=loadfile -m "not skip" -k "not tck" $(TEST_DIR)

slow-query: currdir
Expand Down
54 changes: 24 additions & 30 deletions tests/job/test_jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,13 @@ def test_failed(self):
self.check_resp_failed(resp, ttypes.ErrorCode.E_EXECUTION_ERROR)

def test_succeeded(self):
resp = self.client.execute('CREATE SPACE space_for_jobs(partition_num=9, replica_factor=1);'
def check_jobs_resp_obj(resp_row, job_name):
assert resp_row[1].as_string() == job_name
assert resp_row[2].is_string()
assert resp_row[3].is_datetime()
assert resp_row[4].is_datetime()

resp = self.client.execute('CREATE SPACE IF NOT EXISTS space_for_jobs(partition_num=9, replica_factor=1, vid_type=FIXED_STRING(20));'
'USE space_for_jobs;')
self.check_resp_succeeded(resp)

Expand All @@ -34,13 +40,15 @@ def test_succeeded(self):
self.check_column_names(resp, expect_col_names)
expect_values = [[re.compile(r'\d+')]]
self.check_result(resp, expect_values, is_regex=True)
time.sleep(1)

resp = self.client.execute('SUBMIT JOB FLUSH;')
self.check_resp_succeeded(resp)
expect_col_names = ['New Job Id']
self.check_column_names(resp, expect_col_names)
expect_values = [[re.compile(r'\d+')]]
self.check_result(resp, expect_values, is_regex=True)
time.sleep(1)

resp = self.client.execute('SUBMIT JOB STATS;')
self.check_resp_succeeded(resp)
Expand All @@ -49,44 +57,30 @@ def test_succeeded(self):
expect_values = [[re.compile(r'\d+')]]
self.check_result(resp, expect_values, is_regex=True)

time.sleep(3)
time.sleep(10)
resp = self.client.execute('SHOW JOBS;')
self.check_resp_succeeded(resp)
expect_col_names = ['Job Id', 'Command', 'Status', 'Start Time', 'Stop Time']
self.check_column_names(resp, expect_col_names)
expect_values = [[re.compile(r'\d+'), re.compile(r'COMPACT'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')],
[re.compile(r'\d+'), re.compile(r'FLUSH'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')],
[re.compile(r'\d+'), re.compile(r'STATS'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')]]
self.search_result(resp, expect_values, is_regex=True)
check_jobs_resp_obj(resp.row_values(0), 'STATS')
check_jobs_resp_obj(resp.row_values(1), 'FLUSH')
check_jobs_resp_obj(resp.row_values(2), 'COMPACT')

job_id = resp.row_values(0)[0].as_int()
resp = self.client.execute('SHOW JOB {};'.format(job_id))
self.check_resp_succeeded(resp)
expect_col_names = ['Job Id(TaskId)', 'Command(Dest)', 'Status', 'Start Time', 'Stop Time']
self.check_column_names(resp, expect_col_names)
expect_values = [[re.compile(r'\d+'), re.compile(r'COMPACT|FLUSH|STATS'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')]]
self.search_result(resp, expect_values, is_regex=True)
check_jobs_resp_obj(resp.row_values(0), 'STATS')

job_id = resp.row_values(0)[0].as_int()
resp = self.client.execute('STOP JOB {};'.format(job_id))
self.check_resp_succeeded(resp)
expect_col_names = ['Result']
self.check_column_names(resp, expect_col_names)
expect_values = [['Job stopped']]
self.check_result(resp, expect_values)

resp = self.client.execute('SHOW JOBS;')
self.check_resp_succeeded(resp)
expect_col_names = ['Job Id', 'Command', 'Status', 'Start Time', 'Stop Time']
self.check_column_names(resp, expect_col_names)
expect_values = [[re.compile(r'\d+'), re.compile(r'COMPACT'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')],
[re.compile(r'\d+'), re.compile(r'FLUSH'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')],
[re.compile(r'\d+'), re.compile(r'STATS'), re.compile(r'\S+'), re.compile(r'\d+'), re.compile(r'\d+')]]
self.search_result(resp, expect_values, is_regex=True)

resp = self.client.execute('RECOVER JOB;')
self.check_resp_succeeded(resp)
expect_col_names = ['Recovered job num']
self.check_column_names(resp, expect_col_names)
expect_values = [[0]]
self.check_result(resp, expect_values)
# Executin error becuase the job is finished
self.check_resp_failed(resp, ttypes.ErrorCode.E_EXECUTION_ERROR)

# This is skipped becuase it is hard to simulate the situation
# resp = self.client.execute('RECOVER JOB;')
# self.check_resp_succeeded(resp)
# expect_col_names = ['Recovered job num']
# self.check_column_names(resp, expect_col_names)
# expect_values = [[0]]
# self.check_result(resp, expect_values)