]> source.dussan.org Git - sonarqube.git/commitdiff
Move remaining authentication ITs
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 9 Feb 2016 13:50:21 +0000 (14:50 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 11 Feb 2016 12:32:13 +0000 (13:32 +0100)
17 files changed:
it/it-tests/src/test/java/it/user/BaseIdentityProviderTest.java
it/it-tests/src/test/java/it/user/LocalAuthenticationTest.java
it/it-tests/src/test/java/util/user/UserRule.java
it/it-tests/src/test/resources/user/BaseIdentityProviderTest/authenticate_user.html
it/it-tests/src/test/resources/user/ExternalAuthenticationTest/create-and-delete-user.html
it/it-tests/src/test/resources/user/ExternalAuthenticationTest/external-user-details.html
it/it-tests/src/test/resources/user/ExternalAuthenticationTest/external-user-details2.html
it/it-tests/src/test/resources/user/ExternalAuthenticationTest/system-info.html
it/it-tests/src/test/resources/user/LocalAuthenticationTest/allow_users_to_sign_up.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/LocalAuthenticationTest/force-authentication.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_successful.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_wrong_password.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_direct_login.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_indirect_login.html [new file with mode: 0644]
it/it-tests/src/test/resources/user/MyAccountPageTest/should_change_password.html
it/it-tests/src/test/resources/user/MyAccountPageTest/should_display_issues.html
it/it-tests/src/test/resources/user/MyAccountPageTest/should_display_user_details.html

index 2636c925edcb05e66227a02b544cc98738f2142f..6cba8dd2cabb1fcf2418a07e53d1ad6210f53c41 100644 (file)
@@ -73,10 +73,7 @@ public class BaseIdentityProviderTest {
 
   @After
   public void removeUserAndCleanPluginProperties() throws Exception {
-    Optional<Users.User> user = userRule.getUserByLogin(USER_LOGIN);
-    if (user.isPresent()) {
-      userRule.deactivateUsers(user.get());
-    }
+    userRule.deactivateUsers(USER_LOGIN);
     setServerProperty(ORCHESTRATOR, "sonar.auth.fake-base-id-provider.enabled", null);
     setServerProperty(ORCHESTRATOR, "sonar.auth.fake-base-id-provider.user", null);
   }
index b8992049fb6ac0e8bd5d60315a0df0c9f8c7a893..0420e186ca77d7755d8398f562c3187a079dc689 100644 (file)
@@ -23,7 +23,9 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarRunner;
 import com.sonar.orchestrator.locator.FileLocation;
+import com.sonar.orchestrator.selenium.Selenese;
 import it.Category4Suite;
+import java.io.IOException;
 import java.util.UUID;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -35,7 +37,6 @@ import org.sonarqube.ws.WsUserTokens;
 import org.sonarqube.ws.client.GetRequest;
 import org.sonarqube.ws.client.HttpConnector;
 import org.sonarqube.ws.client.HttpWsClient;
-import org.sonarqube.ws.client.PostRequest;
 import org.sonarqube.ws.client.WsClient;
 import org.sonarqube.ws.client.WsResponse;
 import org.sonarqube.ws.client.permission.AddGroupWsRequest;
@@ -45,6 +46,8 @@ import org.sonarqube.ws.client.usertoken.GenerateWsRequest;
 import org.sonarqube.ws.client.usertoken.RevokeWsRequest;
 import org.sonarqube.ws.client.usertoken.SearchWsRequest;
 import org.sonarqube.ws.client.usertoken.UserTokensService;
+import util.selenium.SeleneseTest;
+import util.user.UserRule;
 
 import static java.lang.String.format;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -53,8 +56,13 @@ import static util.ItUtils.projectDir;
 import static util.ItUtils.setServerProperty;
 
 public class LocalAuthenticationTest {
+
   @ClassRule
   public static Orchestrator ORCHESTRATOR = Category4Suite.ORCHESTRATOR;
+
+  @ClassRule
+  public static UserRule userRule = UserRule.from(ORCHESTRATOR);
+
   private static WsClient adminWsClient;
   private static UserTokensService userTokensWsClient;
 
@@ -72,20 +80,21 @@ public class LocalAuthenticationTest {
     userTokensWsClient = adminWsClient.userTokens();
     removeGroupPermission("anyone", "scan");
 
-    createUser(LOGIN, "123456");
+    userRule.createUser(LOGIN, "123456");
     addUserPermission(LOGIN, "admin");
     addUserPermission(LOGIN, "scan");
   }
 
   @AfterClass
-  public static void deleteData() {
-    deactivateUser(LOGIN);
+  public static void deleteAndRestoreData() {
+    userRule.deactivateUsers(LOGIN, "signuplogin");
     addGroupPermission("anyone", "scan");
   }
 
   @After
   public void resetProperties() throws Exception {
     setServerProperty(ORCHESTRATOR, "sonar.forceAuthentication", null);
+    setServerProperty(ORCHESTRATOR, "sonar.allowUsersToSignUp", null);
   }
 
   @Test
@@ -94,7 +103,7 @@ public class LocalAuthenticationTest {
     String login = format("login-%s", userId);
     String name = format("name-%s", userId);
     String password = "!ascii-only:-)@";
-    createUser(login, name, password);
+    userRule.createUser(login, name, password);
 
     // authenticate
     WsClient wsClient = new HttpWsClient(new HttpConnector.Builder().url(ORCHESTRATOR.getServer().getUrl()).credentials(login, password).build());
@@ -163,18 +172,49 @@ public class LocalAuthenticationTest {
    */
   @Test
   public void basic_authentication_does_not_support_utf8_passwords() {
-    String userId = UUID.randomUUID().toString();
-    String login = format("login-%s", userId);
+    String login = LOGIN;
     // see http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
     String password = "κόσμε";
 
     // create user with a UTF-8 password
-    createUser(login, format("name-%s", userId), password);
+    userRule.createUser(login, LOGIN, password);
 
     // authenticate
     assertThat(checkAuthenticationThroughWebService(login, password)).isFalse();
   }
 
+  @Test
+  public void allow_users_to_sign_up() throws IOException {
+    setServerProperty(ORCHESTRATOR, "sonar.allowUsersToSignUp", "true");
+
+    new SeleneseTest(
+      Selenese.builder().setHtmlTestsInClasspath("allow_users_to_sign_up",
+        "/user/LocalAuthenticationTest/allow_users_to_sign_up.html").build()).runOn(ORCHESTRATOR);
+
+    // This check is failing because signup doesn't refresh the users ES index !
+    // Will be fixed by SONAR-7308
+//    userRule.verifyUserExists("signuplogin", "SignUpName", null);
+  }
+
+  @Test
+  public void authentication_through_ui() {
+    new SeleneseTest(Selenese.builder().setHtmlTestsInClasspath("authentication",
+      "/user/LocalAuthenticationTest/login_successful.html",
+      "/user/LocalAuthenticationTest/login_wrong_password.html",
+      // SONAR-2132
+      "/user/LocalAuthenticationTest/redirect_to_original_url_after_direct_login.html",
+      // SONAR-2009
+      "/user/LocalAuthenticationTest/redirect_to_original_url_after_indirect_login.html"
+    ).build()).runOn(ORCHESTRATOR);
+
+    setServerProperty(ORCHESTRATOR, "sonar.forceAuthentication", "true");
+
+    new SeleneseTest(Selenese.builder().setHtmlTestsInClasspath("force-authentication",
+      // SONAR-3473
+      "/user/LocalAuthenticationTest/force-authentication.html"
+    ).build()).runOn(ORCHESTRATOR);
+  }
+
   @Test
   public void authentication_with_web_service() {
     assertThat(checkAuthenticationThroughWebService("admin", "admin")).isTrue();
@@ -195,34 +235,12 @@ public class LocalAuthenticationTest {
     return result.contains("{\"valid\":true}");
   }
 
-  private static void createUser(String login, String password) {
-    adminWsClient.wsConnector().call(
-      new PostRequest("api/users/create")
-        .setParam("login", login)
-        .setParam("name", login)
-        .setParam("password", password));
-  }
-
-  private static void createUser(String login, String name, String password) {
-    adminWsClient.wsConnector().call(
-      new PostRequest("api/users/create")
-        .setParam("login", login)
-        .setParam("name", name)
-        .setParam("password", password));
-  }
-
   private static void addUserPermission(String login, String permission) {
     adminWsClient.permissions().addUser(new AddUserWsRequest()
       .setLogin(login)
       .setPermission(permission));
   }
 
-  private static void deactivateUser(String login) {
-    adminWsClient.wsConnector().call(
-      new PostRequest("api/users/deactivate")
-        .setParam("login", login));
-  }
-
   private static void removeGroupPermission(String groupName, String permission) {
     adminWsClient.permissions().removeGroup(new RemoveGroupWsRequest()
       .setGroupName(groupName)
index 87c93a5769be41dcf966e091c654e7f55b10b754..e8753b247d804522b32c37670a0f3ffa7ac00947 100644 (file)
@@ -23,9 +23,9 @@ import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.sonar.orchestrator.Orchestrator;
-import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.assertj.core.api.Assertions;
 import org.junit.rules.ExternalResource;
 import org.sonarqube.ws.client.GetRequest;
@@ -52,12 +52,14 @@ public class UserRule extends ExternalResource {
     return new UserRule(requireNonNull(orchestrator, "Orchestrator instance can not be null"));
   }
 
-  @Override
-  protected void before() throws Throwable {
-    adminWsClient = newAdminWsClient(orchestrator);
+  private WsClient adminWsClient(){
+    if (adminWsClient == null) {
+      adminWsClient = newAdminWsClient(orchestrator);
+    }
+    return adminWsClient;
   }
 
-  public void verifyUserExists(String login, String name, String email) {
+  public void verifyUserExists(String login, String name, @Nullable String email) {
     Optional<Users.User> user = getUserByLogin(login);
     assertThat(user).as("User with login '%s' hasn't been found", login).isPresent();
     Assertions.assertThat(user.get().getLogin()).isEqualTo(login);
@@ -69,45 +71,33 @@ public class UserRule extends ExternalResource {
     assertThat(getUserByLogin(login)).as("Unexpected user with login '%s' has been found", login).isAbsent();
   }
 
-  public Optional<Users.User> getUserByLogin(String login) {
-    return FluentIterable.from(getUsers().getUsers()).firstMatch(new MatchUserLogin(login));
+
+  public void createUser(String login, String name, String password) {
+    adminWsClient().wsConnector().call(
+      new PostRequest("api/users/create")
+        .setParam("login", login)
+        .setParam("name", name)
+        .setParam("password", password));
   }
 
-  public List<Users.User> getUsersByEmails(String... emails) {
-    List<Users.User> foundUsers = new ArrayList<>();
-    for (String email : emails) {
-      Optional<Users.User> user = FluentIterable.from(getUsers().getUsers()).firstMatch(new MatchUserLogin(email));
-      if (user.isPresent()) {
-        foundUsers.add(user.get());
-      }
-    }
-    return foundUsers;
+  public void createUser(String login, String password) {
+    createUser(login, login, password);
+  }
+
+  public Optional<Users.User> getUserByLogin(String login) {
+    return FluentIterable.from(getUsers().getUsers()).firstMatch(new MatchUserLogin(login));
   }
 
   public Users getUsers() {
-    WsResponse response = adminWsClient.wsConnector().call(
+    WsResponse response = adminWsClient().wsConnector().call(
       new GetRequest("api/users/search"));
     Assertions.assertThat(response.code()).isEqualTo(200);
     return Users.parse(response.content());
   }
 
-  private class MatchUserLogin implements Predicate<Users.User> {
-    private final String login;
-
-    private MatchUserLogin(String login) {
-      this.login = login;
-    }
-
-    @Override
-    public boolean apply(@Nonnull Users.User user) {
-      String login = user.getLogin();
-      return login != null && login.equals(this.login) && user.isActive();
-    }
-  }
-
   public void deactivateUsers(List<Users.User> users) {
     for (Users.User user : users) {
-      adminWsClient.wsConnector().call(
+      adminWsClient().wsConnector().call(
         new PostRequest("api/users/deactivate")
           .setParam("login", user.getLogin()));
     }
@@ -125,4 +115,18 @@ public class UserRule extends ExternalResource {
       }
     }
   }
+
+  private class MatchUserLogin implements Predicate<Users.User> {
+    private final String login;
+
+    private MatchUserLogin(String login) {
+      this.login = login;
+    }
+
+    @Override
+    public boolean apply(@Nonnull Users.User user) {
+      String login = user.getLogin();
+      return login != null && login.equals(this.login) && user.isActive();
+    }
+  }
 }
index dbb9a4f06b0bf26a034f8e9ac271740856dc5623..22876407cb31d3c78ef70a42efa0480ea0b53695 100644 (file)
@@ -10,7 +10,7 @@
   <thead>
   <tr>
        <td>open</td>
-       <td>sessions/new</td>
+       <td>/sessions/new</td>
        <td></td>
 </tr>
 <tr>
index 0e34b32d096ee0738323b53e1f1b2f1a3ac7d8c6..3f09f3e6779a138f5bc66f882a1b80d2aa80b616 100644 (file)
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>admin</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>admin</td>
 </tr>
 <tr>
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>tester</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>password</td>
 </tr>
 <tr>
index e28cf00af7a8396a311beb855864106eade3a5dc..da2ca5c6c197ddcb5b8177c5631a156b95a1f726 100644 (file)
   </tr>
   <tr>
     <td>type</td>
-    <td>login</td>
+    <td>id=login</td>
     <td>tester</td>
   </tr>
   <tr>
     <td>type</td>
-    <td>password</td>
+    <td>id=password</td>
     <td>123</td>
   </tr>
   <tr>
index edcad4d3c4350e8f27f78522a7fae61cefc34014..2d3d225e6283b2cf2be4af357920d824da538624 100644 (file)
   </tr>
   <tr>
     <td>type</td>
-    <td>login</td>
+    <td>id=login</td>
     <td>tester</td>
   </tr>
   <tr>
     <td>type</td>
-    <td>password</td>
+    <td>id=password</td>
     <td>123</td>
   </tr>
   <tr>
index f0d230b45d9137ffe1289df19ba81922964c2eb3..73539db0476c02e4d4f8bd74ffa79f0c6e3b3a74 100644 (file)
@@ -2,43 +2,43 @@
 <!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Strict/EN" "http:/www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http:/www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head profile="http:/selenium-ide.openqa.org/profiles/test-case">
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <title>external_user_details</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>external_user_details</title>
 </head>
 <body>
 <table cellpadding="1" cellspacing="1" border="1">
-    <thead>
-    <tr>
-        <td rowspan="1" colspan="3">external_user_details</td>
-    </tr>
-    </thead>
-    <tbody>
-    <tr>
-        <td>open</td>
-        <td>/system</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td>type</td>
-        <td>login</td>
-        <td>admin</td>
-    </tr>
-    <tr>
-        <td>type</td>
-        <td>password</td>
-        <td>admin</td>
-    </tr>
-    <tr>
-        <td>clickAndWait</td>
-        <td>commit</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td>waitForText</td>
-        <td>id=content</td>
-        <td>*External User Authentication*FakeRealm*</td>
-    </tr>
-    </tbody>
+  <thead>
+  <tr>
+    <td rowspan="1" colspan="3">external_user_details</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/system</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>id=content</td>
+    <td>*External User Authentication*FakeRealm*</td>
+  </tr>
+  </tbody>
 </table>
 </body>
 </html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/allow_users_to_sign_up.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/allow_users_to_sign_up.html
new file mode 100644 (file)
index 0000000..ec56647
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>allow_users_to_sign_up</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>bd</td>
+    <td>*Not a member*</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>link=Sign up</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=user_login</td>
+    <td>signuplogin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=user_name</td>
+    <td>SignUpName</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=user_password</td>
+    <td>password</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=user_password_confirmation</td>
+    <td>password</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>name=commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>infomsg</td>
+    <td>*Please log in*</td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>signuplogin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>password</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>name=commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*SignUpName*</td>
+  </tr>
+  <tr>
+    <td>click</td>
+    <td>Link=SignUpName</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*Log out*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/force-authentication.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/force-authentication.html
new file mode 100644 (file)
index 0000000..3b8f6cb
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>force-authentication</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <thead>
+  <tr>
+    <td rowspan="1" colspan="3">force-authentication</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertLocation</td>
+    <td>*/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>name=commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*Administrator*</td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertLocation</td>
+    <td>*/sessions/new</td>
+    <td></td>
+  </tr>
+
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_successful.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_successful.html
new file mode 100644 (file)
index 0000000..430e94a
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>login_successful</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <thead>
+  <tr>
+    <td rowspan="1" colspan="3">login_successful</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*Administrator*</td>
+  </tr>
+  <tr>
+    <td>click</td>
+    <td>Link=Administrator</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertTextPresent</td>
+    <td>Log out</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>link=Log out</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>link=Log in</td>
+    <td>Log in</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_wrong_password.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/login_wrong_password.html
new file mode 100644 (file)
index 0000000..077428d
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>login_wrong_password</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>wrong</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertTextPresent</td>
+    <td>Authentication failed</td>
+    <td></td>
+  </tr>
+
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_direct_login.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_direct_login.html
new file mode 100644 (file)
index 0000000..65fb94f
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>redirect-to-original-url-after-direct-login</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/settings?category=general</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>name=commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*Administrator*</td>
+  </tr>
+  <tr>
+    <td>assertLocation</td>
+    <td>glob:*/settings?category=general*</td>
+    <td></td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_indirect_login.html b/it/it-tests/src/test/resources/user/LocalAuthenticationTest/redirect_to_original_url_after_indirect_login.html
new file mode 100644 (file)
index 0000000..0200a72
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sessions/logout</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/settings/index</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertLocation</td>
+    <td>*/sessions/new</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>content</td>
+    <td>*Log In to SonarQube*</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=login</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>id=password</td>
+    <td>admin</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>commit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForText</td>
+    <td>css=.navbar</td>
+    <td>*Administrator*</td>
+  </tr>
+  <tr>
+    <td>assertLocation</td>
+    <td>*/settings/index</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertElementPresent</td>
+    <td>plugins</td>
+    <td></td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
index 12e4a89af7d42dd75f1035ea5cc1c5e6e9131bc5..7d224eb3b87c8fd53e15e454761b90f064dda2f4 100644 (file)
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>account-user</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>password</td>
 </tr>
 <tr>
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>account-user</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>new_password</td>
 </tr>
 <tr>
index 090cb4fba15c07e08d3c5353f5405fc475f6df5c..ac6bc7c62403a7f1de4829b5a2926b9a105b0223 100644 (file)
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>account-user</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>password</td>
 </tr>
 <tr>
index d0b30c02def3a8856449585278a11319b8fc3585..5618f8d05ec505f44fdc07c4ce3ac4fa9da849b3 100644 (file)
 </tr>
 <tr>
        <td>type</td>
-       <td>login</td>
+       <td>id=login</td>
        <td>account-user</td>
 </tr>
 <tr>
        <td>type</td>
-       <td>password</td>
+       <td>id=password</td>
        <td>password</td>
 </tr>
 <tr>