iotests: Add assert_json_filename_equal() method
Since the order of keys in JSON filenames is not necessarily fixed, they should not be compared to fixed strings. This method takes a Python dict as a reference, parses a given JSON filename and compares both. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									d35172b425
								
							
						
					
					
						commit
						e07375f552
					
				| @ -222,6 +222,19 @@ class QMPTestCase(unittest.TestCase): | ||||
|                     self.fail('invalid index "%s" in path "%s" in "%s"' % (idx, path, str(d))) | ||||
|         return d | ||||
| 
 | ||||
|     def flatten_qmp_object(self, obj, output=None, basestr=''): | ||||
|         if output is None: | ||||
|             output = dict() | ||||
|         if isinstance(obj, list): | ||||
|             for i in range(len(obj)): | ||||
|                 self.flatten_qmp_object(obj[i], output, basestr + str(i) + '.') | ||||
|         elif isinstance(obj, dict): | ||||
|             for key in obj: | ||||
|                 self.flatten_qmp_object(obj[key], output, basestr + key + '.') | ||||
|         else: | ||||
|             output[basestr[:-1]] = obj # Strip trailing '.' | ||||
|         return output | ||||
| 
 | ||||
|     def assert_qmp_absent(self, d, path): | ||||
|         try: | ||||
|             result = self.dictpath(d, path) | ||||
| @ -252,6 +265,13 @@ class QMPTestCase(unittest.TestCase): | ||||
|         self.assertTrue(False, "Cannot find %s %s in result:\n%s" % \ | ||||
|                 (node_name, file_name, result)) | ||||
| 
 | ||||
|     def assert_json_filename_equal(self, json_filename, reference): | ||||
|         '''Asserts that the given filename is a json: filename and that its | ||||
|            content is equal to the given reference object''' | ||||
|         self.assertEqual(json_filename[:5], 'json:') | ||||
|         self.assertEqual(self.flatten_qmp_object(json.loads(json_filename[5:])), | ||||
|                          self.flatten_qmp_object(reference)) | ||||
| 
 | ||||
|     def cancel_and_wait(self, drive='drive0', force=False, resume=False): | ||||
|         '''Cancel a block job and wait for it to finish, returning the event''' | ||||
|         result = self.vm.qmp('block-job-cancel', device=drive, force=force) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Max Reitz
						Max Reitz