| 
					
				 | 
			
			
				@@ -173,6 +173,54 @@ class RepositoryTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.assert_equal(self.repository.get(H(0)), max_data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.assert_raises(IntegrityError, lambda: self.repository.put(H(1), max_data + b"x")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_set_flags(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id = H(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(id, b"") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000000)  # init == all zero 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(id, mask=0x00000001, value=0x00000001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(id, mask=0x00000002, value=0x00000002) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000003) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(id, mask=0x00000001, value=0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000002) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(id, mask=0x00000002, value=0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_get_flags(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id = H(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(id, b"") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id), 0x00000000)  # init == all zero 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(id, mask=0xC0000003, value=0x80000001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id, mask=0x00000001), 0x00000001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id, mask=0x00000002), 0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id, mask=0x40000008), 0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(self.repository.flags(id, mask=0x80000000), 0x80000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_flags_many(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ids_flagged = [H(0), H(1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ids_default_flags = [H(2), H(3)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [self.repository.put(id, b"") for id in ids_flagged + ids_default_flags] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags_many(ids_flagged, mask=0xFFFFFFFF, value=0xDEADBEEF) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(list(self.repository.flags_many(ids_default_flags)), [0x00000000, 0x00000000]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(list(self.repository.flags_many(ids_flagged)), [0xDEADBEEF, 0xDEADBEEF]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(list(self.repository.flags_many(ids_flagged, mask=0xFFFF0000)), [0xDEAD0000, 0xDEAD0000]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assert_equal(list(self.repository.flags_many(ids_flagged, mask=0x0000FFFF)), [0x0000BEEF, 0x0000BEEF]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_flags_persistence(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(0), b"default") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.put(H(1), b"one one zero") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # we do not set flags for H(0), so we can later check their default state. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.flags(H(1), mask=0x00000007, value=0x00000006) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.commit(compact=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.repository = self.open() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        with self.repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # we query all flags to check if the initial flags were all zero and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # only the ones we explicitly set to one are as expected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.assert_equal(self.repository.flags(H(0), mask=0xFFFFFFFF), 0x00000000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.assert_equal(self.repository.flags(H(1), mask=0xFFFFFFFF), 0x00000006) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class LocalRepositoryTestCase(RepositoryTestCaseBase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # test case that doesn't work with remote repositories 
			 |