-
Notifications
You must be signed in to change notification settings - Fork 188
/
AbstractLoginPageTest.java
161 lines (139 loc) · 7.11 KB
/
AbstractLoginPageTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
* Copyright (c) 2010-2019 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.testing.schrodinger.page;
import com.evolveum.midpoint.schrodinger.component.common.FeedbackBox;
import com.evolveum.midpoint.schrodinger.component.common.PrismForm;
import com.evolveum.midpoint.schrodinger.component.configuration.InfrastructureTab;
import com.evolveum.midpoint.schrodinger.component.configuration.NotificationsTab;
import com.evolveum.midpoint.schrodinger.component.report.AuditRecordTable;
import com.evolveum.midpoint.schrodinger.page.configuration.SystemPage;
import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage;
import com.evolveum.midpoint.schrodinger.page.report.AuditLogViewerPage;
import com.evolveum.midpoint.testing.schrodinger.AbstractSchrodingerTest;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import static com.codeborne.selenide.Selenide.*;
/**
* @author skublik
*/
public abstract class AbstractLoginPageTest extends AbstractSchrodingerTest {
protected static final File MAIL_NONCE_VALUE_POLICY = new File("src/test/resources/configuration/objects/valuepolicies/mail-nonce.xml");
protected static final File USER_WITHOUT_SUPERUSER = new File("src/test/resources/configuration/objects/users/user-without-superuser.xml");
protected static final File SYSTEM_CONFIG_WITH_NOTIFICATION = new File("src/test/resources/configuration/objects/systemconfig/system-configuration-notification.xml");
protected static final File CREATE_NAME_OBJECT_TEMPLATE = new File("src/test/resources/configuration/objects/objecttemplate/create-name-after-self-reg.xml");
protected static final File NOTIFICATION_FILE = new File("./target/notification.txt");
protected static final String NAME_OF_ENABLED_USER = "enabled_user";
protected static final String MAIL_OF_ENABLED_USER = "enabled_user@evolveum.com";
private static final File ENABLED_USER = new File("src/test/resources/configuration/objects/users/enabled-user.xml");
private static final File DISABLED_USER = new File("src/test/resources/configuration/objects/users/disabled-user.xml");
private static final File ENABLED_USER_WITHOUT_AUTHORIZATIONS = new File("src/test/resources/configuration/objects/users/enabled-user-without-authorizations.xml");
@BeforeClass
@Override
public void beforeClass() throws IOException{
super.beforeClass();
importObject(ENABLED_USER, true);
importObject(DISABLED_USER, true);
importObject(ENABLED_USER_WITHOUT_AUTHORIZATIONS, true);
importObject(MAIL_NONCE_VALUE_POLICY, true);
importObject(getSecurityPolicyMailNonceResetPass(), true);
importObject(USER_WITHOUT_SUPERUSER, true);
importObject(CREATE_NAME_OBJECT_TEMPLATE, true);
importObject(SYSTEM_CONFIG_WITH_NOTIFICATION, true);
basicPage.infrastructure();
SystemPage systemPage = new SystemPage();
PrismForm<InfrastructureTab> infrastructureForm = systemPage.infrastructureTab().form();
infrastructureForm.showEmptyAttributes("Infrastructure");
infrastructureForm.addAttributeValue("publicHttpUrlPattern", getConfiguration().getBaseUrl());
File notificationFile = NOTIFICATION_FILE;
try {
notificationFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
NotificationsTab notificationTab = systemPage.notificationsTab();
notificationTab.setRedirectToFile(notificationFile.getAbsolutePath());
systemPage.save();
Assert.assertTrue(systemPage.feedback().isSuccess());
}
@Test
public void test001loginLockoutUser() {
basicPage.loggedUser().logoutIfUserIsLogin();
open("/login");
for (int i = 0; i < 4; i++) {
unsuccessfulLogin("enabled_user", "bad_password");
}
unsuccessfulLogin("enabled_user", "5ecr3t");
}
@Test
public void test002loginDisabledUser() {
basicPage.loggedUser().logoutIfUserIsLogin();
unsuccessfulLogin("disabled_user", "5ecr3t");
}
@Test
public void test003loginEnabledUserWithoutAuthorizationsUser() {
basicPage.loggedUser().logoutIfUserIsLogin();
unsuccessfulLogin("enabled_user_without_authorizations", "5ecr3t");
}
protected void unsuccessfulLogin(String username, String password){
FormLoginPage login = midPoint.formLogin();
login.login(username, password);
FeedbackBox feedback = login.feedback();
Assert.assertTrue(feedback.isError("0"));
}
@Test
public void test010auditingSuccessfulLogin() {
basicPage.loggedUser().logoutIfUserIsLogin();
FormLoginPage login = midPoint.formLogin();
login.login("administrator", "5ecr3t");
auditingSuccesfulLogin("administrator");
}
protected void auditingSuccesfulLogin(String username) {
AuditLogViewerPage auditLogViewer = basicPage.auditLogViewer();
AuditRecordTable auditRecordsTable = auditLogViewer.table();
auditRecordsTable.checkInitiator(1, username);
auditRecordsTable.checkEventType(1, "Create session");
auditRecordsTable.checkOutcome(1, "Success");
}
@Test
public void test011auditingFailLogin() {
basicPage.loggedUser().logoutIfUserIsLogin();
FormLoginPage login = midPoint.formLogin();
login.login("bad_administrator", "5ecr3t");
login.login("administrator", "5ecr3t");
AuditLogViewerPage auditLogViewer = basicPage.auditLogViewer();
AuditRecordTable auditRecordsTable = auditLogViewer.table();
auditRecordsTable.checkInitiator(2, "");
auditRecordsTable.checkEventType(2, "Create session");
auditRecordsTable.checkOutcome(2, "Fatal Error");
}
@Test
public void test012auditingSuccessfulLogout() {
basicPage.loggedUser().logoutIfUserIsLogin();
FormLoginPage login = midPoint.formLogin();
login.login("administrator", "5ecr3t");
basicPage.loggedUser().logout();
login.login("administrator", "5ecr3t");
AuditLogViewerPage auditLogViewer = basicPage.auditLogViewer();
AuditRecordTable auditRecordsTable = auditLogViewer.table();
auditRecordsTable.checkInitiator(2, "administrator");
auditRecordsTable.checkEventType(2, "Terminate session");
auditRecordsTable.checkOutcome(2, "Success");
}
protected String readLastNotification() throws IOException {
String separator = "============================================";
byte[] encoded = Files.readAllBytes(Paths.get(NOTIFICATION_FILE.getAbsolutePath()));
String notifications = new String(encoded, Charset.defaultCharset());
return notifications.substring(notifications.lastIndexOf(separator) + separator.length(), notifications.length()-1);
}
protected abstract File getSecurityPolicyMailNonceResetPass();
}