@@ -575,84 +575,6 @@ def test_link_condition_function(self):
575575 self .assertFalse (e .enforce ("alice" , "domain5" , "data5" , "read" ))
576576 self .assertFalse (e .enforce ("alice" , "domain5" , "data5" , "write" ))
577577
578- def test_enforce_ex_no_str_call_when_logging_disabled (self ):
579- """Test that str() is not called on rvals when logging is disabled."""
580- import logging
581-
582- # Create a custom class that tracks str() calls
583- class TrackedObject (str ):
584- """A string subclass that tracks when str() is called."""
585-
586- str_call_count = 0
587-
588- def __new__ (cls , value ):
589- instance = super ().__new__ (cls , value )
590- return instance
591-
592- def __str__ (self ):
593- TrackedObject .str_call_count += 1
594- return super ().__str__ ()
595-
596- e = self .get_enforcer (
597- get_examples ("basic_model.conf" ),
598- get_examples ("basic_policy.csv" ),
599- )
600-
601- # Get the actual enforcer (for SyncedEnforcer, it's wrapped in _e)
602- actual_enforcer = e ._e if hasattr (e , "_e" ) else e
603-
604- # Set logger to ERROR level (above INFO and WARNING)
605- actual_enforcer .logger .disabled = False
606- actual_enforcer .logger .setLevel (logging .ERROR )
607-
608- # Reset counter
609- TrackedObject .str_call_count = 0
610-
611- # Call enforce_ex with TrackedObject instances
612- obj1 = TrackedObject ("alice" )
613- obj2 = TrackedObject ("data1" )
614- obj3 = TrackedObject ("read" )
615-
616- result , explain = e .enforce_ex (obj1 , obj2 , obj3 )
617-
618- # str() should not be called when logging is disabled
619- self .assertEqual (TrackedObject .str_call_count , 0 , "str() should not be called when logging is disabled" )
620- self .assertTrue (result )
621-
622- # Now enable INFO level logging
623- actual_enforcer .logger .setLevel (logging .INFO )
624- TrackedObject .str_call_count = 0
625-
626- result , explain = e .enforce_ex (obj1 , obj2 , obj3 )
627-
628- # str() should be called when logging is enabled
629- self .assertGreater (TrackedObject .str_call_count , 0 , "str() should be called when logging is enabled" )
630- self .assertTrue (result )
631-
632- # Test with WARNING level (for failed enforce)
633- actual_enforcer .logger .setLevel (logging .WARNING )
634- TrackedObject .str_call_count = 0
635-
636- obj4 = TrackedObject ("alice" )
637- obj5 = TrackedObject ("data2" )
638- obj6 = TrackedObject ("read" )
639-
640- result , explain = e .enforce_ex (obj4 , obj5 , obj6 )
641-
642- # str() should be called for WARNING level
643- self .assertGreater (TrackedObject .str_call_count , 0 , "str() should be called for WARNING level" )
644- self .assertFalse (result )
645-
646- # Test with ERROR level (logging disabled for WARNING)
647- actual_enforcer .logger .setLevel (logging .ERROR )
648- TrackedObject .str_call_count = 0
649-
650- result , explain = e .enforce_ex (obj4 , obj5 , obj6 )
651-
652- # str() should not be called when logging is disabled
653- self .assertEqual (TrackedObject .str_call_count , 0 , "str() should not be called when WARNING logging is disabled" )
654- self .assertFalse (result )
655-
656578
657579class TestConfigSynced (TestConfig ):
658580 def get_enforcer (self , model = None , adapter = None ):
0 commit comments