@VisibleForTesting
    int execute(String[] args) {
        return commander.execute(args);
    }
@Test(dataProvider = "desiredExpireTime")
    public void commandCreateToken_WhenCreatingATokenWithExpiryTime_ShouldHaveTheDesiredExpireTime(String expireTime, int expireAsSec) throws Exception {
        PrintStream oldStream = System.out;
        try {
            //Arrange
            ByteArrayOutputStream baoStream = new ByteArrayOutputStream();
            System.setOut(new PrintStream(baoStream));

            String[] command = {"create", "--secret-key",
                    "data:;base64,u+FxaxYWpsTfxeEmMh8fQeS3g2jfXw4+sGIv+PTY+BY=",
                    "--subject", "test",
                    "--expiry-time", expireTime,
            };

            new TokensCliUtils().execute(command);
            String token = baoStream.toString();

            Instant start = (new Date().toInstant().plus(expireAsSec - 5, ChronoUnit.SECONDS));
            Instant stop = (new Date().toInstant().plus(expireAsSec + 5, ChronoUnit.SECONDS));

            //Act
            Claims jwt = Jwts.parserBuilder()
                    .setSigningKey(Decoders.BASE64.decode("u+FxaxYWpsTfxeEmMh8fQeS3g2jfXw4+sGIv+PTY+BY="))
                    .build()
                    .parseClaimsJws(token)
                    .getBody();

            //Assert
            //Checks if the token expires within +-5 sec.
            assertTrue(( ! jwt.getExpiration().toInstant().isBefore( start ) ) && ( jwt.getExpiration().toInstant().isBefore( stop ) ));

        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            System.setOut(oldStream);
        }
    }