diff --git a/lib/execution_engine2/db/models/models.py b/lib/execution_engine2/db/models/models.py index 99e115412..e2845c6c2 100644 --- a/lib/execution_engine2/db/models/models.py +++ b/lib/execution_engine2/db/models/models.py @@ -339,9 +339,13 @@ class Job(Document): meta = {"collection": "ee2_jobs"} def save(self, *args, **kwargs): - self.updated = time.time() + self.updated = datetime.utcnow().timestamp() return super(Job, self).save(*args, **kwargs) + def modify(self, query=None, **update): + update["updated"] = datetime.utcnow().timestamp() + return super(Job, self).modify(query=None, **update) + def __repr__(self): return self.to_json() diff --git a/test/tests_for_db/ee2_MongoUtil_test.py b/test/tests_for_db/ee2_MongoUtil_test.py index 9591f16a1..ee6e77668 100644 --- a/test/tests_for_db/ee2_MongoUtil_test.py +++ b/test/tests_for_db/ee2_MongoUtil_test.py @@ -3,7 +3,7 @@ import os import unittest from datetime import datetime - +import json from bson.objectid import ObjectId from execution_engine2.db.MongoUtil import MongoUtil @@ -58,17 +58,55 @@ def test_init_ok(self): mongo_util = self.getMongoUtil() self.assertTrue(set(class_attri) <= set(mongo_util.__dict__.keys())) + def test_save_and_modify_updates_timestamp(self): + job = get_example_job(status=Status.created.value) + updated_ts = job.updated + job.save() + job.reload() + new_updated_ts = job.updated + assert new_updated_ts > updated_ts + # Now check modify + job.modify(add_to_set__child_jobs=["a"]) + assert job.updated > new_updated_ts + def test_insert_jobs(self): """Check to see that jobs are inserted into mongo""" job = get_example_job(status=Status.created.value) job2 = get_example_job(status=Status.created.value) + job3 = get_example_job(status=Status.created.value) + # job3.updated = datetime.utcnow().timestamp() + + json_repr = [job.to_json(), job2.to_json(), job3.to_json()] + mongo_repr = [job.to_mongo(), job2.to_mongo(), job3.to_mongo()] + jobs_to_insert = [job, job2] job_ids = self.getMongoUtil().insert_jobs(jobs_to_insert) assert len(job_ids) == len(jobs_to_insert) retrieved_jobs = self.getMongoUtil().get_jobs(job_ids=job_ids) for i, retrieved_job in enumerate(retrieved_jobs): - assert jobs_to_insert[i].to_json() == retrieved_job.to_json() + original_job_json = json.loads(json_repr[i]) + original_job_mongo = mongo_repr[i] + + retrieved_job_json = json.loads(retrieved_job.to_json()) + retrieved_job_mongo = retrieved_job.to_mongo() + + # Cannot compare `id` or `updated` for a job that wasn't yet saved, + # and save/updates over-write the updated timestamp + # so we should remove them before comparison + + for item in [ + original_job_json, + original_job_mongo, + retrieved_job_mongo, + retrieved_job_json, + ]: + for field in ["updated", "_id"]: + if field in item: + del item[field] + + assert original_job_json == retrieved_job_json + assert original_job_mongo == retrieved_job_mongo def test_update_jobs_enmasse(self): """Check to see that created jobs get updated to queued"""