@@ -367,6 +367,82 @@ def test_reader_state_with_invalid_native_pointer(self):
367367 # assert active_manifest is not None, "Active manifest should not be null"
368368 # assert len(active_manifest) > 0, "Active manifest should not be empty"
369369
370+ def test_reader_is_embedded (self ):
371+ """Test the is_embedded method returns correct values for embedded and remote manifests."""
372+
373+ with open (self .testPath , "rb" ) as file :
374+ reader = Reader ("image/jpeg" , file )
375+ self .assertTrue (reader .is_embedded (),)
376+ reader .close ()
377+
378+ # Test remote manifest
379+ with open (os .path .join (self .data_dir , "es256_certs.pem" ), "rb" ) as cert_file :
380+ certs = cert_file .read ()
381+ with open (os .path .join (self .data_dir , "es256_private.key" ), "rb" ) as key_file :
382+ key = key_file .read ()
383+
384+ # Create signer info and signer
385+ signer_info = C2paSignerInfo (
386+ alg = b"es256" ,
387+ sign_cert = certs ,
388+ private_key = key ,
389+ ta_url = b"http://timestamp.digicert.com"
390+ )
391+ signer = Signer .from_info (signer_info )
392+
393+ # Define a simple manifest
394+ manifest_definition = {
395+ "claim_generator" : "python_test" ,
396+ "claim_generator_info" : [{
397+ "name" : "python_test" ,
398+ "version" : "0.0.1" ,
399+ }],
400+ "claim_version" : 1 ,
401+ "format" : "image/jpeg" ,
402+ "title" : "Python Test Image" ,
403+ "ingredients" : [],
404+ "assertions" : [
405+ {
406+ "label" : "c2pa.actions" ,
407+ "data" : {
408+ "actions" : [
409+ {
410+ "action" : "c2pa.opened"
411+ }
412+ ]
413+ }
414+ }
415+ ]
416+ }
417+
418+ # Test remote manifest
419+ with open (self .testPath , "rb" ) as file :
420+ builder = Builder (manifest_definition )
421+ builder .set_no_embed ()
422+ with io .BytesIO () as output_buffer :
423+ manifest_data = builder .sign (
424+ signer , "image/jpeg" , file , output_buffer )
425+ output_buffer .seek (0 )
426+ read_buffer = io .BytesIO (output_buffer .getvalue ())
427+
428+ with Reader ("image/jpeg" , read_buffer , manifest_data ) as reader :
429+ self .assertFalse (reader .is_embedded (), "Remote manifest should return False" )
430+
431+ def test_reader_get_remote_url (self ):
432+ """Test the get_remote_url method returns correct values for embedded and remote manifests."""
433+
434+ # Test embedded manifest (should return None)
435+ with open (self .testPath , "rb" ) as file :
436+ reader = Reader ("image/jpeg" , file )
437+ self .assertIsNone (reader .get_remote_url (), "Embedded manifest should return None for remote URL" )
438+ reader .close ()
439+
440+ # Test remote manifest using cloud.jpg fixture which has a remote URL
441+ cloud_fixture_path = os .path .join (self .data_dir , "files-for-reading-tests" , "cloud.jpg" )
442+ with Reader ("image/jpeg" , cloud_fixture_path ) as reader :
443+ remote_url = reader .get_remote_url ()
444+ self .assertFalse (reader .is_embedded (), "This should be a remote manifest" )
445+
370446
371447class TestBuilderWithSigner (unittest .TestCase ):
372448 def setUp (self ):
0 commit comments