This kind of testing is more of stress testing. But you can also add normal unit tests.

E.g.

try_whenLicensesAvailable(){
    Semaphore s = .
    s.init

    boolean result = semaphore.tryAcquire()

    assertTrue(result)
    assertEquals(0, s.remaining())
}

This is where you tests all the scenario's. Don't go jumping immediately to 'stress' testing if the basics are not tested thoroughly. Have a look at the LockTest which is a good example of how clean tests are written. Only at the end there is some messy testing.