@@ -123,46 +123,51 @@ def test_verification_parameters(self, verify_mock):
123123 request .build_absolute_uri (), 'POST' , body .encode ('utf-8' ), headers )
124124
125125
126- @patch ('lms.djangoapps.lti_provider.signature_validator.time.time' , return_value = FIXED_TIMESTAMP )
127126class TimestampAndNonceValidatorTest (CacheIsolationMixin , TestCase ):
128- ENABLED_CACHES = ['default' ]
129127 """
130- Tests for validate_timestamp_and_nonce. The clock is frozen via a class-level
131- patch so every test method receives a consistent `time.time` return value.
128+ Tests for the validate_timestamp_and_nonce method in SignatureValidator.
132129 """
133130
131+ ENABLED_CACHES = ['default' ]
132+
134133 def setUp (self ):
135134 super ().setUp ()
135+ patcher = patch (
136+ 'lms.djangoapps.lti_provider.signature_validator.time.time' ,
137+ return_value = FIXED_TIMESTAMP ,
138+ )
139+ patcher .start ()
140+ self .addCleanup (patcher .stop )
136141 self .validator = SignatureValidator (get_lti_consumer ())
137142
138143 def _call (self , timestamp , nonce , client_key = 'Consumer Key' ):
139144 return self .validator .validate_timestamp_and_nonce (
140145 client_key , str (timestamp ), nonce , request = None ,
141146 )
142147
143- def test_valid_timestamp_and_new_nonce (self , _mock_time ):
148+ def test_valid_timestamp_and_new_nonce (self ):
144149 assert self ._call (FIXED_TIMESTAMP , 'nonce-a' )
145150
146- def test_stale_timestamp_rejected (self , _mock_time ):
151+ def test_stale_timestamp_rejected (self ):
147152 assert not self ._call (FIXED_TIMESTAMP - 301 , 'nonce-b' )
148153
149- def test_future_timestamp_rejected (self , _mock_time ):
154+ def test_future_timestamp_rejected (self ):
150155 assert not self ._call (FIXED_TIMESTAMP + 301 , 'nonce-c' )
151156
152- def test_malformed_timestamp_rejected (self , _mock_time ):
157+ def test_malformed_timestamp_rejected (self ):
153158 assert not self .validator .validate_timestamp_and_nonce (
154159 'Consumer Key' , 'not-a-number' , 'nonce-d' , request = None ,
155160 )
156161
157- def test_replay_rejected (self , _mock_time ):
162+ def test_replay_rejected (self ):
158163 assert self ._call (FIXED_TIMESTAMP , 'nonce-e' )
159164 assert not self ._call (FIXED_TIMESTAMP , 'nonce-e' )
160165
161- def test_different_nonce_same_consumer_accepted (self , _mock_time ):
166+ def test_different_nonce_same_consumer_accepted (self ):
162167 assert self ._call (FIXED_TIMESTAMP , 'nonce-f1' )
163168 assert self ._call (FIXED_TIMESTAMP , 'nonce-f2' )
164169
165- def test_same_nonce_different_consumer_accepted (self , _mock_time ):
170+ def test_same_nonce_different_consumer_accepted (self ):
166171 # Nonces are scoped per client_key; the same nonce string from two
167172 # different consumers must not block each other.
168173 assert self ._call (FIXED_TIMESTAMP , 'nonce-g' , client_key = 'Consumer Key' )
0 commit comments