Dale Emery created GEODE-9897:
---------------------------------

             Summary: ClientUserAuthsTest leaves some seemingly tested 
responsibilities untested
                 Key: GEODE-9897
                 URL: https://issues.apache.org/jira/browse/GEODE-9897
             Project: Geode
          Issue Type: Test
          Components: tests
            Reporter: Dale Emery


*Problem 1:* The test class's {{before()}} method uses the {{spy()}} mechanism 
to override {{getNextId()}} on the {{ClientUserAuths}} it is testing. This 
bypasses the actual implementation for all tests, leaving untested the 
following important {{ClientUserAuths}} responsibilities:
 - Detect when all IDs have all been used.
 - Clear all existing authentications when all IDs have been used, to force 
reauthentication.
 - Re-seed the ID generator when all IDs have been used.

The tests are likely doing this because {{getNextId()}} relies on a 
{{{}Random{}}}, which is uncontrollable by design. Because {{ClientUserAuths}} 
creates the {{{}Random{}}}, the tests are unable to inject a testable instance, 
and so instead must bypass the {{ClientUserAuths}} methods that interact with 
the {{{}Random{}}}.

The solution to this problem is to extract and test an ID generator that 
accepts a {{Random}} as a constructor parameter, thus allowing tests to control 
it.

This also frees {{ClientUserAuths}} from the responsibility to generate IDs, so 
it can instead focus on how it uses the IDs. Then it will be straightforward to 
write tests to verify that {{ClientUserAuths}} forces reauthentication when the 
generator runs out of IDs.

*Problem 2:* Several tests in this class attempt to verify certain 
responsibilities only by spying on how the {{ClientUserAuths}} interacts with 
itself. Verifying only these internal interactions leaves the actual 
responsibilities (how the {{ClientUserAuths}} responds to subsequent calls) 
untested.

The tests can instead verify the actual responsibilities by calling public 
methods and making assertions about the returned values.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to