/* * Copyright 2000-2016 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.tests.widgetset.server.csrf.ui; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import com.vaadin.tests.tb3.MultiBrowserTest; import com.vaadin.tests.widgetset.client.csrf.CsrfButtonConnector; public abstract class AbstractCsrfTokenUITest extends MultiBrowserTest { static final Logger LOGGER = Logger .getLogger(AbstractCsrfTokenUITest.class.getName()); @Test public void testTokens() { openTestURL(); final By debugButton = By.id(CsrfButtonConnector.ID); final String debugMessage1 = getDriver().findElement(debugButton) .getText(); getDriver().findElement(By.id(CsrfTokenDisabled.PRESS_ID)).click(); waitUntil(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver input) { getDriver().findElement(debugButton).click(); String debugMessage2 = input.findElement(debugButton).getText(); LOGGER.log(Level.INFO, "1: " + debugMessage1); LOGGER.log(Level.INFO, "2: " + debugMessage2); if (!debugMessage1.equals(debugMessage2)) { compareMessage(split(debugMessage1), split(debugMessage2)); LOGGER.log(Level.INFO, "DONE"); return true; } else { return false; } } }); } private TokenGroup split(String debugMessage) { StringTokenizer tokenizer = new StringTokenizer(debugMessage, ", \""); return new TokenGroup(tokenizer.nextToken(), tokenizer.nextToken(), tokenizer.nextToken()); } /* * Just implement this. */ protected abstract boolean compareMessage(TokenGroup tokenGroup1, TokenGroup tokenGroup2); boolean isNullOrUndefined(String value) { return isNull(value) || isUndefined(value); } boolean isUndefined(String value) { return value.equals("undefined"); } boolean isNull(String value) { return value.equals("null"); } /* * Wrapps all tokens from the client app. */ static class TokenGroup { public final String clientToken; public final String tokenReceivedFromServer; public final String tokenSentToServer; public TokenGroup(String clientToken, String tokenReceivedFromServer, String tokenSentToServer) { this.clientToken = clientToken; this.tokenReceivedFromServer = tokenReceivedFromServer; this.tokenSentToServer = tokenSentToServer; } } }