@@ -1839,6 +1839,11 @@ def test_get_one_valid_targetinfo(self):
18391839 # Restore the Root file.
18401840 shutil .move (backup_root_filepath , root_filepath )
18411841
1842+ # Test that the first mapping is skipped if it's irrelevant to the target
1843+ # file.
1844+ self .assertRaises (tuf .exceptions .UnknownTargetError ,
1845+ multi_repo_updater .get_one_valid_targetinfo , 'non-existent.txt' )
1846+
18421847 # Verify that a targetinfo is not returned for a non-existent target.
18431848 multi_repo_updater .map_file ['mapping' ][1 ]['terminating' ] = False
18441849 self .assertRaises (tuf .exceptions .UnknownTargetError ,
@@ -1850,6 +1855,49 @@ def test_get_one_valid_targetinfo(self):
18501855 multi_repo_updater .map_file ['mapping' ][0 ]['terminating' ] = True
18511856 self .assertRaises (tuf .exceptions .UnknownTargetError ,
18521857 multi_repo_updater .get_one_valid_targetinfo , 'bad3.txt' )
1858+ multi_repo_updater .map_file ['mapping' ][0 ]['terminating' ] = False
1859+
1860+ # Verify the case where two repositories provide different targetinfo.
1861+ # First, have 'role1' sign for a different 'file1.txt' (currently signed
1862+ # only by the Targets role).
1863+ repository = repo_tool .load_repository (self .repository_directory2 )
1864+
1865+ # Test for the case where multiple repos sign for the same target.
1866+ #self.assertTrue(tuf.formats.TARGETINFO_SCHEMA.matches(
1867+ # multi_repo_updater.get_one_valid_targetinfo('file1.txt')))
1868+ multi_repo_updater .get_one_valid_targetinfo ('file1.txt' )
1869+
1870+ # Modify file1.txt so that different a length and hashes are added signed
1871+ # role1.
1872+ target1 = os .path .join (self .repository_directory2 , 'targets' , 'file1.txt' )
1873+ with open (target1 , 'ab' ) as file_object :
1874+ file_object .write (b'append extra text' )
1875+ repository .targets .remove_target (target1 )
1876+ repository .targets .add_target (target1 )
1877+
1878+ repository .targets .load_signing_key (self .role_keys ['targets' ]['private' ])
1879+ repository .snapshot .load_signing_key (self .role_keys ['snapshot' ]['private' ])
1880+ repository .timestamp .load_signing_key (self .role_keys ['timestamp' ]['private' ])
1881+ repository .writeall ()
1882+
1883+ # Move the staged metadata to the "live" metadata.
1884+ shutil .rmtree (os .path .join (self .repository_directory2 , 'metadata' ))
1885+ shutil .copytree (os .path .join (self .repository_directory2 , 'metadata.staged' ),
1886+ os .path .join (self .repository_directory2 , 'metadata' ))
1887+
1888+ targets_file = securesystemslib .util .load_json_file (
1889+ os .path .join (self .repository_directory2 , 'metadata' , 'targets.json' ))
1890+
1891+ targets_file2 = securesystemslib .util .load_json_file (
1892+ os .path .join (self .repository_directory , 'metadata' , 'targets.json' ))
1893+
1894+ multi_repo_updater .get_one_valid_targetinfo ('file1.txt' )
1895+
1896+ multi_repo_updater .map_file ['mapping' ][0 ]['threshold' ] = 2
1897+ self .assertRaises (tuf .exceptions .UnknownTargetError ,
1898+ multi_repo_updater .get_one_valid_targetinfo , 'file1.txt' )
1899+
1900+
18531901
18541902
18551903
0 commit comments