Exemple #1
0
 def test_sync_some_submissions(self):
     """ Tests synchronizing some data from self (posts a few MD5s) """
     manager = XFormManager()
 
     # populate some files
     schema_1 = create_xsd_and_populate("pf_followup.xsd", "pf_followup_1.xml", path = DATA_DIR)
     schema_2 = create_xsd_and_populate("pf_new_reg.xsd", "pf_new_reg_1.xml", path = DATA_DIR)
     schema_3 = create_xsd_and_populate("pf_ref_completed.xsd", "pf_ref_completed_1.xml", path = DATA_DIR)
     
     # get MD5 of all current submissions
     MD5_buffer = rest_util.get_field_as_bz2(Submission, 'checksum')
     
     # populate a few more files
     submit_1 = populate("pf_followup_2.xml", path = DATA_DIR)
     submit_2 = populate("pf_new_reg_2.xml", path = DATA_DIR)
     submit_3 = populate("pf_ref_completed_2.xml", path = DATA_DIR)
     submit_4 = populate("pf_ref_completed_3.xml", path = DATA_DIR)
     starting_submissions_count = Submission.objects.all().count()
     starting_schemata_count = FormDefModel.objects.all().count()
     
     # get the difference between the first 3 files and the current
     # set of files (i.e. the last 4 files)
     submissions_file = "submissions.tar"
     self._POST_MD5s(MD5_buffer, submissions_file)
 
     # save checksums and delete the ones just populated (d,e,f)
     checksums = [ submit_1.checksum, submit_2.checksum, submit_3.checksum, submit_3.checksum ]
     
     manager.remove_data(schema_1.id, Metadata.objects.get(attachment=submit_1.xform).raw_data, \
                         remove_submission = True)
     manager.remove_data(schema_2.id, Metadata.objects.get(attachment=submit_2.xform).raw_data, \
                         remove_submission = True)
     manager.remove_data(schema_3.id, Metadata.objects.get(attachment=submit_3.xform).raw_data, \
                         remove_submission = True)
     manager.remove_data(schema_3.id, Metadata.objects.get(attachment=submit_4.xform).raw_data, \
                         remove_submission = True)
     
     # load data from sync file (d,e,f)
     load_submissions(submissions_file, "127.0.0.1:8000")
     
     try:
         # verify that the submissions etc. count are correct (d,e,f)
         self.assertEqual( starting_submissions_count, Submission.objects.all().count())
         submits = Submission.objects.all().order_by('-submit_time')[:4]
         # verify that the correct submissions were loaded
         Submission.objects.get(checksum=checksums[0])
         Submission.objects.get(checksum=checksums[1])
         Submission.objects.get(checksum=checksums[2])
         Submission.objects.get(checksum=checksums[3])
     except Submission.DoesNotExist:
         self.fail("Incorrect submission received")
     finally:
         # clean up
         manager = XFormManager()
         manager.remove_schema(schema_1.id, remove_submissions = True)
         manager.remove_schema(schema_2.id, remove_submissions = True)
         manager.remove_schema(schema_3.id, remove_submissions = True)
Exemple #2
0
 def test_sync_dupe_submissions(self):
     """ Tests synchronizing duplicate data from self"""
     manager = XFormManager()
 
     # populate some files
     schema_1 = create_xsd_and_populate("pf_followup.xsd", "pf_followup_1.xml", path = DATA_DIR)
     schema_2 = create_xsd_and_populate("pf_new_reg.xsd", "pf_new_reg_1.xml", path = DATA_DIR)
     schema_3 = create_xsd_and_populate("pf_ref_completed.xsd", "pf_ref_completed_1.xml", path = DATA_DIR)
     starting_submissions_count = Submission.objects.all().count()
     
     # <STATE 1/>
     # get MD5 of 3 populated files
     MD5_buffer = rest_util.get_field_as_bz2(Submission, 'checksum')
     
     # add 3 dupes and 1 new file
     submit_1 = populate("pf_followup_1.xml", path = DATA_DIR)
     submit_2 = populate("pf_new_reg_1.xml", path = DATA_DIR)
     submit_3 = populate("pf_ref_completed_1.xml", path = DATA_DIR)
     
     # <STATE 2/>
     submissions_file = "submissions.tar"
     self._POST_MD5s(MD5_buffer, submissions_file)
     self._assert_tar_count_equals(submissions_file, 0)
     
     submit_4 = populate("pf_ref_completed_3.xml", path = DATA_DIR)
     
     # <STATE 3/>
     # get the difference between state 1 and state 3
     self._POST_MD5s(MD5_buffer, submissions_file)
 
     # save checksum and delete the ones just populated
     checksum_4 = submit_4.checksum
     submit_1.delete()
     submit_2.delete()
     submit_3.delete()
     submit_4.delete()
     
     # should get the same 3 schemas we registered above
     self._assert_tar_count_equals(submissions_file, 1)
     # load data from sync file (d,e,f)
     load_submissions(submissions_file, "127.0.0.1:8000")
     
     try:
         # verify that we only have 4 submissions
         self.assertEqual( starting_submissions_count+1, Submission.objects.all().count() )
         Submission.objects.get(checksum=checksum_4)
     except Submission.DoesNotExist:
         self.fail("Incorrect submission received")
     finally:
         # clean up
         manager = XFormManager()
         manager.remove_schema(schema_1.id, remove_submissions = True)
         manager.remove_schema(schema_2.id, remove_submissions = True)
         manager.remove_schema(schema_3.id, remove_submissions = True)
Exemple #3
0
 def test_sync_no_submissions(self):
     """ Tests synchronizing no data from self (posts all MD5s) """
     manager = XFormManager()
 
     # load data
     schema_1 = create_xsd_and_populate("pf_followup.xsd", \
                             "pf_followup_1.xml", path = DATA_DIR)
     populate("pf_followup_2.xml", path = DATA_DIR)
     schema_2 = create_xsd_and_populate("pf_new_reg.xsd", \
                             "pf_new_reg_1.xml", path = DATA_DIR)
     populate("pf_new_reg_2.xml", path = DATA_DIR)
     schema_3 = create_xsd_and_populate("pf_ref_completed.xsd", \
                             "pf_ref_completed_1.xml", path = DATA_DIR)
     populate("pf_ref_completed_2.xml", path = DATA_DIR)
     populate("pf_ref_completed_3.xml", path = DATA_DIR)
     starting_submissions_count = Submission.objects.all().count()
     
     # get sync file from self
     submissions_file = "submissions.tar"
     generate_submissions(serverhost, 'brian', 'test', download=True, to=submissions_file)
     
     # test that the received submissions file is empty
     self._assert_tar_count_equals(submissions_file, 0)
 
     load_submissions(submissions_file, "127.0.0.1:8000")    
     try:
         # verify that no new submissions were loaded
         self.assertEqual( starting_submissions_count, Submission.objects.all().count())
     finally:            
         # clean up
         manager.remove_schema(schema_1.id, remove_submissions = True)
         manager.remove_schema(schema_2.id, remove_submissions = True)
         manager.remove_schema(schema_3.id, remove_submissions = True)
Exemple #4
0
 def test_generate_debug_submissions(self):
     """ Tests downloading some submissions from self 
         This is only useful to make sure that the test_load_diff_submissions test
         below is working properly.
     """
     #setup
     schema_1 = create_xsd_and_populate("pf_followup.xsd", \
                             "pf_followup_1.xml", path = DATA_DIR)
     populate("pf_followup_2.xml", path = DATA_DIR)
     schema_2 = create_xsd_and_populate("pf_new_reg.xsd", \
                             "pf_new_reg_1.xml", path = DATA_DIR)
     populate("pf_new_reg_2.xml", path = DATA_DIR)
     schema_3 = create_xsd_and_populate("pf_ref_completed.xsd", \
                             "pf_ref_completed_1.xml", path = DATA_DIR)
     populate("pf_ref_completed_2.xml", path = DATA_DIR)
     
     # the 'debug' flag limits the generated MD5s to a count of 5
     submissions_file = "submissions.tar"
     # debug means we only post 5 submissions (instead of all)
     generate_submissions(serverhost, 'brian', 'test', debug=True, download=True, to=submissions_file)
     try:
         self._assert_tar_count_equals(submissions_file, Submission.objects.all().count()-5)
         
     # cleanup
     finally:    
         # delete all data on self
         manager = XFormManager()
         manager.remove_schema(schema_1.id, remove_submissions = True)
         manager.remove_schema(schema_2.id, remove_submissions = True)
         manager.remove_schema(schema_3.id, remove_submissions = True)
Exemple #5
0
 def test_generate_all_submissions(self):
     """ Tests downloading all submissions from self """
     # setup
     schema_1 = create_xsd_and_populate("pf_followup.xsd", path = DATA_DIR)
     submit_1 = populate("pf_followup_1.xml", path = DATA_DIR)
     submit_2 = populate("pf_followup_2.xml", path = DATA_DIR)
     schema_2 = create_xsd_and_populate("pf_new_reg.xsd", path = DATA_DIR)
     submit_3 = populate("pf_new_reg_1.xml", path = DATA_DIR)
     submit_4 = populate("pf_new_reg_2.xml", path = DATA_DIR)
     schema_3 = create_xsd_and_populate("pf_ref_completed.xsd", path = DATA_DIR)
     submit_5 = populate("pf_ref_completed_1.xml", path = DATA_DIR)
     submit_6 = populate("pf_ref_completed_2.xml", path = DATA_DIR)
     
     # download and check
     submissions_file = "submissions.tar"
     generate_submissions(serverhost, 'brian', 'test', latest=False, download=True, to=submissions_file)
     try:
         self._assert_tar_count_equals(submissions_file, Submission.objects.all().count())
         
     # cleanup
     finally:
         # delete all data on self
         manager = XFormManager()
         submit_1.delete()
         submit_2.delete()
         submit_3.delete()
         submit_4.delete()
         submit_5.delete()
         submit_6.delete()
         manager.remove_schema(schema_1.id, remove_submissions = True)
         manager.remove_schema(schema_2.id, remove_submissions = True)
         manager.remove_schema(schema_3.id, remove_submissions = True)