From 4a3baad4f94a6ec8396027f73ec35e01159a1776 Mon Sep 17 00:00:00 2001 From: "Michael J. Simons" Date: Sat, 13 Jan 2018 12:28:24 +0100 Subject: [PATCH] Migrate xml-ldap groovy->java See #4939. --- .../spring-security-samples-xml-ldap.gradle | 17 +++- .../security/samples/LdapXmlTests.groovy | 60 -------------- .../security/samples/pages/HomePage.groovy | 31 ------- .../security/samples/pages/LoginPage.groovy | 37 --------- .../security/samples/pages/LogoutPage.groovy | 25 ------ .../security/samples/pages/SecurePage.groovy | 31 ------- .../security/samples/LdapXmlTests.java | 83 +++++++++++++++++++ .../security/samples/pages/HomePage.java | 68 +++++++++++++++ .../security/samples/pages/LoginPage.java | 76 +++++++++++++++++ .../security/samples/pages/LogoutPage.java | 44 ++++++++++ .../security/samples/pages/SecurePage.java | 55 ++++++++++++ 11 files changed, 342 insertions(+), 185 deletions(-) delete mode 100644 samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/LdapXmlTests.groovy delete mode 100644 samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/HomePage.groovy delete mode 100644 samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LoginPage.groovy delete mode 100644 samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LogoutPage.groovy delete mode 100644 samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/SecurePage.groovy create mode 100644 samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/LdapXmlTests.java create mode 100644 samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/HomePage.java create mode 100644 samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LoginPage.java create mode 100644 samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LogoutPage.java create mode 100644 samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/SecurePage.java diff --git a/samples/xml/ldap/spring-security-samples-xml-ldap.gradle b/samples/xml/ldap/spring-security-samples-xml-ldap.gradle index 5fc778106e..ef5de17fdc 100644 --- a/samples/xml/ldap/spring-security-samples-xml-ldap.gradle +++ b/samples/xml/ldap/spring-security-samples-xml-ldap.gradle @@ -1,3 +1,18 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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. + */ apply plugin: 'io.spring.convention.spring-sample-war' dependencies { @@ -12,5 +27,5 @@ dependencies { providedCompile 'javax.servlet:javax.servlet-api' - integrationTestCompile gebDependencies + integrationTestCompile seleniumDependencies } diff --git a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/LdapXmlTests.groovy b/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/LdapXmlTests.groovy deleted file mode 100644 index 8cf2fec760..0000000000 --- a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/LdapXmlTests.groovy +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2002-2011 the original author or authors. - * - * 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 org.springframework.security.samples - -import geb.spock.* -import spock.lang.Stepwise -import org.springframework.security.samples.pages.* - -/** - * Tests the CAS sample application using service tickets. - * - * @author Rob Winch - */ -@Stepwise -class LdapXmlTests extends GebReportingSpec { - def 'access home page with unauthenticated user success'() { - when: 'Unauthenticated user accesses the Home Page' - to HomePage - then: 'The page is displayed' - at HomePage - } - - def 'access manage page with unauthenticated user sends to login page'() { - when: 'Unauthenticated user accesses the Manage Page' - secure.click(LoginPage) - then: 'The login page is displayed' - at LoginPage - } - - def 'authenticated user is sent to original page'() { - when: 'user authenticates' - login() - then: 'The secure page is displayed' - at SecurePage - } - - def 'authenticated user logs out'() { - when: 'user logs out' - logout.click() - then: 'the default logout success page is displayed' - at LogoutPage - when: 'Unauthenticated user accesses the Manage Page' - via SecurePage - then: 'The login page is displayed' - at LoginPage - } -} diff --git a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/HomePage.groovy b/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/HomePage.groovy deleted file mode 100644 index 9505292b28..0000000000 --- a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/HomePage.groovy +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2002-2011 the original author or authors. - * - * 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 org.springframework.security.samples.pages; - -import geb.* - -/** - * The home page - * - * @author Rob Winch - */ -class HomePage extends Page { - static url = '' - static at = { assert driver.title == 'Home Page'; true} - static content = { - secure(to: [SecurePage,LoginPage]) { $('a', text: 'Secure page') } - } -} diff --git a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LoginPage.groovy b/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LoginPage.groovy deleted file mode 100644 index 8e56afcb02..0000000000 --- a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LoginPage.groovy +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2002-2011 the original author or authors. - * - * 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 org.springframework.security.samples.pages; - -import geb.* - -/** - * The login page. - * - * @author Rob Winch - */ -class LoginPage extends Page { - static url = 'login' - static at = { assert driver.title == 'Login Page'; true} - static content = { - login(required:false) { user='rod', password='koala' -> - loginForm.username = user - loginForm.password = password - submit.click() - } - loginForm { $('form') } - submit { $('input', type: 'submit') } - } -} diff --git a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LogoutPage.groovy b/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LogoutPage.groovy deleted file mode 100644 index 4b14b4a625..0000000000 --- a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/LogoutPage.groovy +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2002-2011 the original author or authors. - * - * 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 org.springframework.security.samples.pages -/** - * The login page. - * - * @author Rob Winch - */ -class LogoutPage extends LoginPage { - static url = 'login' - static at = { assert driver.title == 'Login Page' && $('p').text() == 'You have been logged out'; true} -} diff --git a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/SecurePage.groovy b/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/SecurePage.groovy deleted file mode 100644 index 5ba6cafab0..0000000000 --- a/samples/xml/ldap/src/integration-test/groovy/org/springframework/security/samples/pages/SecurePage.groovy +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2002-2011 the original author or authors. - * - * 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 org.springframework.security.samples.pages - -import geb.* - -/** - * The home page - * - * @author Rob Winch - */ -class SecurePage extends Page { - static url = 'secure/' - static at = { assert driver.title == 'Secure Page'; true} - static content = { - logout { $("input[type=submit]", value: "Logoff") } - } -} diff --git a/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/LdapXmlTests.java b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/LdapXmlTests.java new file mode 100644 index 0000000000..6fd18d2916 --- /dev/null +++ b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/LdapXmlTests.java @@ -0,0 +1,83 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 org.springframework.security.samples; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.htmlunit.HtmlUnitDriver; +import org.springframework.security.samples.pages.HomePage; +import org.springframework.security.samples.pages.LoginPage; +import org.springframework.security.samples.pages.LogoutPage; +import org.springframework.security.samples.pages.SecurePage; + +/** + * @author Michael Simons + */ +public class LdapXmlTests { + private WebDriver driver; + + private int port; + + @Before + public void setup() { + this.port = Integer.parseInt(System.getProperty("app.httpPort")); + this.driver = new HtmlUnitDriver(); + } + + @After + public void tearDown() { + this.driver.quit(); + } + + @Test + public void accessHomepageWithUnauthenticatedUserSuccess() { + final HomePage homePage = HomePage.to(this.driver, this.port); + homePage.assertAt(); + } + + @Test + public void accessManagePageWithUnauthenticatedUserSendsToLoginPage() { + final LoginPage loginPage = SecurePage.to(this.driver, this.port); + loginPage.assertAt(); + } + + @Test + public void authenticatedUserIsSentToOriginalPage() { + final SecurePage securePage = SecurePage.to(this.driver, this.port) + .loginForm() + .username("rod") + .password("koala") + .submit(); + securePage + .assertAt(); + } + + @Test + public void authenticatedUserLogsOut() { + final LogoutPage logoutPage = SecurePage.to(this.driver, this.port) + .loginForm() + .username("rod") + .password("koala") + .submit() + .logout(); + logoutPage.assertAt(); + + final LoginPage loginPage = SecurePage.to(this.driver, this.port); + loginPage.assertAt(); + } +} diff --git a/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/HomePage.java b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/HomePage.java new file mode 100644 index 0000000000..c26f50c888 --- /dev/null +++ b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/HomePage.java @@ -0,0 +1,68 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 org.springframework.security.samples.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * The home page. + * + * @author Michael Simons + */ +public class HomePage { + + public static HomePage to(WebDriver driver, int port) { + driver.get("http://localhost:" + port +"/"); + return PageFactory.initElements(driver, HomePage.class); + } + + private final WebDriver webDriver; + + @FindBy(css = "p") + private WebElement message; + + @FindBy(css = "input[type=submit]") + private WebElement logoutButton; + + public HomePage(WebDriver webDriver) { + this.webDriver = webDriver; + } + + public Content assertAt() { + assertThat(this.webDriver.getTitle()).isEqualTo("Home Page"); + return PageFactory.initElements(this.webDriver, Content.class); + } + + public LoginPage logout() { + this.logoutButton.submit(); + return PageFactory.initElements(this.webDriver, LoginPage.class); + } + + public static class Content { + @FindBy(css = "p") + private WebElement message; + + public Content andTheUserNameIsDisplayed() { + assertThat(message.getText()).isEqualTo("Hello user"); + return this; + } + } +} diff --git a/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LoginPage.java b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LoginPage.java new file mode 100644 index 0000000000..6a13e93eca --- /dev/null +++ b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LoginPage.java @@ -0,0 +1,76 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 org.springframework.security.samples.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * The login page. + * + * @author Michael Simons + */ +public class LoginPage { + + private final WebDriver webDriver; + + private final LoginForm loginForm; + + public LoginPage(WebDriver webDriver) { + this.webDriver = webDriver; + this.loginForm = PageFactory.initElements(this.webDriver, LoginForm.class); + } + + public LoginPage assertAt() { + assertThat(this.webDriver.getTitle()).isEqualTo("Login Page"); + return this; + } + + public LoginForm loginForm() { + return this.loginForm; + } + + public static class LoginForm { + private WebDriver webDriver; + private WebElement username; + private WebElement password; + @FindBy(css = "input[type=submit]") + private WebElement submit; + + public LoginForm(WebDriver webDriver) { + this.webDriver = webDriver; + } + + public LoginForm username(String username) { + this.username.sendKeys(username); + return this; + } + + public LoginForm password(String password) { + this.password.sendKeys(password); + return this; + } + + public SecurePage submit() { + this.submit.click(); + return PageFactory.initElements(this.webDriver, SecurePage.class); + } + } +} diff --git a/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LogoutPage.java b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LogoutPage.java new file mode 100644 index 0000000000..abaf6ccdb3 --- /dev/null +++ b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/LogoutPage.java @@ -0,0 +1,44 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 org.springframework.security.samples.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Logout Page is the same as login page with an additional message. + * + * @author Michael Simons + */ +public class LogoutPage extends LoginPage { + @FindBy(css = "p") + private WebElement p; + + public LogoutPage(WebDriver webDriver) { + super(webDriver); + } + + @Override + public LogoutPage assertAt() { + super.assertAt(); + + assertThat(p.getText()).isEqualTo("You have been logged out"); + return this; + } +} diff --git a/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/SecurePage.java b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/SecurePage.java new file mode 100644 index 0000000000..7fd90a16a9 --- /dev/null +++ b/samples/xml/ldap/src/integration-test/java/org/springframework/security/samples/pages/SecurePage.java @@ -0,0 +1,55 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 org.springframework.security.samples.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * A secure page. + * + * @author Michael Simons + */ +public class SecurePage { + + public static LoginPage to(WebDriver driver, int port) { + driver.get("http://localhost:" + port + "/secure"); + return PageFactory.initElements(driver, LoginPage.class); + }; + + private final WebDriver webDriver; + + @FindBy(css = "input[type=submit]") + private WebElement submit; + + public SecurePage(WebDriver webDriver) { + this.webDriver = webDriver; + } + + public SecurePage assertAt() { + assertThat(this.webDriver.getTitle()).isEqualTo("Secure Page"); + return this; + } + + public LogoutPage logout() { + this.submit.click(); + return PageFactory.initElements(this.webDriver, LogoutPage.class); + } +}