use of com.github.noraui.cucumber.annotation.RetryOnFailure in project NoraUi by NoraUi.
the class HelloByeSteps method readBlog.
@RetryOnFailure(attempts = 3)
@Given("me any article, please. '(.*)' of '(.*)'.")
public void readBlog(String jsonArticles, String blog) throws FailureException {
Articles articles = new Articles();
articles.deserialize(jsonArticles);
for (Article article : articles) {
if ("anonymous".equals(article.getAuthor())) {
new Result.Failure<>("anonymous", "anonymous is prohibited in demo blog!!", true, this.demoPage.getCallBack());
} else {
logger.info("> " + blog);
logger.info(" > " + article.getTitle() + ": " + article.getText());
}
}
}
use of com.github.noraui.cucumber.annotation.RetryOnFailure in project NoraUi by NoraUi.
the class StepInterceptor method invoke.
/**
* {@inheritDoc}
*/
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
Object result = null;
Method m = invocation.getMethod();
Annotation[] annotations = m.getAnnotations();
if (annotations.length > 0) {
Annotation stepAnnotation = annotations[annotations.length - 1];
for (Annotation a : annotations) {
if (a.annotationType().getName().startsWith("cucumber.api.java." + Context.getLocale().getLanguage())) {
stepAnnotation = a;
break;
}
}
if (stepAnnotation.annotationType().isAnnotationPresent(StepDefAnnotation.class)) {
Matcher matcher = Pattern.compile("value=(.*)\\)").matcher(stepAnnotation.toString());
if (matcher.find()) {
logger.info("> " + stepAnnotation.annotationType().getSimpleName() + " " + String.format(matcher.group(1).replace("(.*)", "%s").replace("[\\.|\\?]", ""), invocation.getArguments()));
}
}
}
if (m.isAnnotationPresent(RetryOnFailure.class)) {
RetryOnFailure retryAnnotation = m.getAnnotation(RetryOnFailure.class);
if (retryAnnotation.verbose()) {
logger.info("NORAUI StepInterceptor invoke method " + m);
}
for (int i = 0; i < retryAnnotation.attempts(); i++) {
try {
if (retryAnnotation.verbose()) {
logger.info("NORAUI StepInterceptor attempt n° " + i);
}
return invocation.proceed();
} catch (FailureException e) {
if (retryAnnotation.verbose()) {
logger.info("NORAUI StepInterceptor Exception " + e.getMessage());
}
if (i == retryAnnotation.attempts() - 1) {
e.getFailure().fail();
}
Thread.sleep(retryAnnotation.unit().toMillis(retryAnnotation.delay()));
}
}
} else {
try {
return invocation.proceed();
} catch (FailureException e) {
if (Modifier.isPublic(m.getModifiers())) {
e.getFailure().fail();
} else {
throw e;
}
}
}
return result;
}
use of com.github.noraui.cucumber.annotation.RetryOnFailure in project NoraUi by NoraUi.
the class MailSteps method validActivationEmail.
/**
* Valid activation email.
*
* @param mailHost
* example: imap.gmail.com
* @param mailUser
* login of mail box
* @param mailPassword
* password of mail box
* @param firstCssQuery
* the first matching element
* @param conditions
* list of 'expected' values condition and 'actual' values ({@link com.github.noraui.gherkin.GherkinStepCondition}).
* @throws TechnicalException
* is throws if you have a technical error (format, configuration, datas, ...) in NoraUi.
* Exception with message and with screenshot and with exception if functional error but no screenshot and no exception if technical error.
* @throws FailureException
* if the scenario encounters a functional error
*/
@RetryOnFailure(attempts = 3, delay = 60)
@Conditioned
@Et("Je valide le mail d'activation '(.*)'[\\.|\\?]")
@And("I valid activation email '(.*)'[\\.|\\?]")
public void validActivationEmail(String mailHost, String mailUser, String mailPassword, String senderMail, String subjectMail, String firstCssQuery, List<GherkinStepCondition> conditions) throws FailureException, TechnicalException {
RestTemplate restTemplate = createRestTemplate();
try {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imap");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect(mailHost, mailUser, mailPassword);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
SearchTerm filterA = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
SearchTerm filterB = new FromTerm(new InternetAddress(senderMail));
SearchTerm filterC = new SubjectTerm(subjectMail);
SearchTerm[] filters = { filterA, filterB, filterC };
SearchTerm searchTerm = new AndTerm(filters);
Message[] messages = inbox.search(searchTerm);
for (Message message : messages) {
Document doc = Jsoup.parse(getTextFromMessage(message));
Element link = doc.selectFirst(firstCssQuery);
HttpHeaders headers = new HttpHeaders();
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(link.attr("href"), HttpMethod.GET, entity, String.class);
if (!response.getStatusCode().equals(HttpStatus.OK)) {
new Result.Failure<>("", Messages.format(Messages.getMessage(Messages.FAIL_MESSAGE_MAIL_ACTIVATION), subjectMail), false, Context.getCallBack(Callbacks.RESTART_WEB_DRIVER));
}
}
} catch (Exception e) {
new Result.Failure<>("", Messages.format(Messages.getMessage(Messages.FAIL_MESSAGE_MAIL_ACTIVATION), subjectMail), false, Context.getCallBack(Callbacks.RESTART_WEB_DRIVER));
}
}
Aggregations