~ubuntu-branches/ubuntu/lucid/libstruts1.2-java/lucid

« back to all changes in this revision

Viewing changes to contrib/struts-faces/src/sysclient/org/apache/struts/faces/sysclient/LogonTestCase.java

  • Committer: Bazaar Package Importer
  • Author(s): Arnaud Vandyck
  • Date: 2006-04-24 12:14:23 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060424121423-naev53qigqgks0sa
Tags: 1.2.9-1
New upstream  release Fixes  three security  problems: CVE-2006-1546,
CVE-2006-1547,  CVE-2006-1548  (closes:  #360551),  thanks  to  Moritz
Muehlenhoff.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright 2002,2004 The Apache Software Foundation.
3
 
 * 
4
 
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 
 * you may not use this file except in compliance with the License.
6
 
 * You may obtain a copy of the License at
7
 
 * 
8
 
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 
 * 
10
 
 * Unless required by applicable law or agreed to in writing, software
11
 
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 
 * See the License for the specific language governing permissions and
14
 
 * limitations under the License.
15
 
 */
16
 
 
17
 
package org.apache.struts.faces.sysclient;
18
 
 
19
 
import com.gargoylesoftware.htmlunit.ElementNotFoundException;
20
 
import com.gargoylesoftware.htmlunit.WebClient;
21
 
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
22
 
import com.gargoylesoftware.htmlunit.html.HtmlBase;
23
 
import com.gargoylesoftware.htmlunit.html.HtmlBody;
24
 
import com.gargoylesoftware.htmlunit.html.HtmlElement;
25
 
import com.gargoylesoftware.htmlunit.html.HtmlForm;
26
 
import com.gargoylesoftware.htmlunit.html.HtmlHead;
27
 
import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
28
 
import com.gargoylesoftware.htmlunit.html.HtmlLink;
29
 
import com.gargoylesoftware.htmlunit.html.HtmlPage;
30
 
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
31
 
import com.gargoylesoftware.htmlunit.html.HtmlResetInput;
32
 
import com.gargoylesoftware.htmlunit.html.HtmlSpan;
33
 
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
34
 
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
35
 
 
36
 
import java.net.URL;
37
 
import java.util.ArrayList;
38
 
import java.util.Iterator;
39
 
import java.util.List;
40
 
 
41
 
import junit.framework.Test;
42
 
import junit.framework.TestCase;
43
 
import junit.framework.TestSuite;
44
 
 
45
 
 
46
 
/**
47
 
 * <p>Test case for a logon form that accepts a username and password.</p>
48
 
 *
49
 
 * <p><strong>FIXME</strong> - The JavaScript execution support in
50
 
 * HtmlUnit 1.2.3 is not sufficient to test clicking the hyperlink
51
 
 * generated by a Command Link component, so it is not tested automatically.</p>
52
 
 *
53
 
 * @version $Revision: 1.2 $ $Date: 2004/08/21 18:21:33 $
54
 
 */
55
 
 
56
 
public class LogonTestCase extends AbstractTestCase {
57
 
 
58
 
 
59
 
    // ------------------------------------------------------------ Constructors
60
 
 
61
 
 
62
 
    /**
63
 
     * <p>Construct a new instance of this test case.</p>
64
 
     *
65
 
     * @param name Name of the new test case
66
 
     */
67
 
    public LogonTestCase(String name) {
68
 
 
69
 
        super(name);
70
 
 
71
 
    }
72
 
 
73
 
 
74
 
    // ------------------------------------------------------ Instance Variables
75
 
 
76
 
 
77
 
    // ------------------------------------------------------ Test Setup Methods
78
 
 
79
 
 
80
 
    /**
81
 
     * <p>Set up the instance variables required for this test case.</p>
82
 
     */
83
 
    public void setUp() throws Exception {
84
 
 
85
 
        super.setUp();
86
 
        page("/logon.faces");
87
 
 
88
 
    }
89
 
 
90
 
 
91
 
    /**
92
 
     * <p>Return the set of tests included in this test suite.</p>
93
 
     */
94
 
    public static Test suite() {
95
 
 
96
 
        return (new TestSuite(LogonTestCase.class));
97
 
 
98
 
    }
99
 
 
100
 
 
101
 
    /**
102
 
     * <p>Tear down instance variables required by this test case.</p>
103
 
     */
104
 
    public void tearDown() {
105
 
 
106
 
        super.tearDown();
107
 
 
108
 
    }
109
 
 
110
 
 
111
 
 
112
 
    // ------------------------------------------------- Individual Test Methods
113
 
 
114
 
 
115
 
    /**
116
 
     * <p>Submit incorrect input fields and verify the correct response.</p>
117
 
     */
118
 
    public void testIncorrect() throws Exception {
119
 
 
120
 
        HtmlSpan span = null;
121
 
        HtmlTextInput username = (HtmlTextInput) element("form:username");
122
 
        HtmlPasswordInput password = (HtmlPasswordInput)
123
 
            element("form:password");
124
 
        HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
125
 
 
126
 
        username.setValueAttribute("bb");
127
 
        password.setValueAttribute("");
128
 
        submit(submit);
129
 
 
130
 
        assertEquals("logon", title());
131
 
 
132
 
        span = (HtmlSpan) element("globalErrors");
133
 
        assertNotNull(span);
134
 
        assertEquals("", span.asText());
135
 
 
136
 
        username = (HtmlTextInput) element("form:username");
137
 
        assertNotNull(username);
138
 
        assertEquals("bb", username.getValueAttribute());
139
 
 
140
 
        span = (HtmlSpan) element("form:usernameErrors");
141
 
        assertNotNull(span);
142
 
        // FIXME:  response string should really include "Username:"
143
 
        assertEquals("[EH][EP] can not be less than 3 characters.[ES][EF]",
144
 
                     span.asText());
145
 
 
146
 
        password = (HtmlPasswordInput) element("form:password");
147
 
        assertNotNull(password);
148
 
        assertEquals("", password.getValueAttribute());
149
 
 
150
 
        span = (HtmlSpan) element("form:passwordErrors");
151
 
        assertNotNull(span);
152
 
        // FIXME:  response string should really include "Password:"
153
 
        assertEquals("[EH][EP] is required.[ES][EF]", span.asText());
154
 
 
155
 
    }
156
 
 
157
 
 
158
 
    /**
159
 
     * <p>Verify the content of a pristine page returned when executing this
160
 
     * view for the first time.</p>
161
 
     */
162
 
    public void testPristine() throws Exception {
163
 
 
164
 
        HtmlSpan span = null;
165
 
 
166
 
        HtmlElement html = (HtmlElement) page;
167
 
        assertEquals("html", html.getTagName());
168
 
        assertEquals("http://www.w3.org/1999/xhtml", html.getAttributeValue("xmlns"));
169
 
 
170
 
        assertEquals("logon", title());
171
 
 
172
 
        HtmlForm form = (HtmlForm) element("form");
173
 
        assertNotNull(form);
174
 
        assertEquals("", form.getAcceptAttribute());
175
 
        assertEquals("", form.getAcceptCharsetAttribute());
176
 
        String url = this.url.toString();
177
 
        url = url.substring(0, url.length() - 1);
178
 
        url = url.substring(url.lastIndexOf('/'));
179
 
        String action = form.getActionAttribute();
180
 
        int semicolon = action.indexOf(';');
181
 
        if (semicolon >= 0) {
182
 
            action = action.substring(0, semicolon);
183
 
        }
184
 
        assertEquals(url + "/logon.faces", action);
185
 
        assertEquals("", form.getEnctypeAttribute());
186
 
        assertEquals("post", form.getMethodAttribute());
187
 
        assertEquals("", form.getNameAttribute());
188
 
        assertEquals("", form.getOnResetAttribute());
189
 
        assertEquals("", form.getOnSubmitAttribute());
190
 
        assertEquals("", form.getTargetAttribute());
191
 
 
192
 
        span = (HtmlSpan) element("form:usernamePrompt");
193
 
        assertNotNull(span);
194
 
        assertEquals("Username:", span.asText());
195
 
 
196
 
        HtmlTextInput username = (HtmlTextInput) element("form:username");
197
 
        assertNotNull(username);
198
 
        assertEquals("", username.getLangAttribute());
199
 
        assertEquals("form:username", username.getNameAttribute());
200
 
        assertEquals("", username.getOnClickAttribute());
201
 
        assertEquals("", username.getOnDblClickAttribute());
202
 
        assertEquals("", username.getOnKeyDownAttribute());
203
 
        assertEquals("", username.getOnKeyPressAttribute());
204
 
        assertEquals("", username.getOnKeyUpAttribute());
205
 
        assertEquals("", username.getOnMouseDownAttribute());
206
 
        assertEquals("", username.getOnMouseMoveAttribute());
207
 
        assertEquals("", username.getOnMouseOutAttribute());
208
 
        assertEquals("", username.getOnMouseOverAttribute());
209
 
        assertEquals("", username.getOnMouseUpAttribute());
210
 
        assertEquals("text", username.getTypeAttribute());
211
 
        assertEquals("", username.getValueAttribute());
212
 
 
213
 
        span = (HtmlSpan) element("form:passwordPrompt");
214
 
        assertNotNull(span);
215
 
        assertEquals("Password:", span.asText());
216
 
 
217
 
        HtmlPasswordInput password = (HtmlPasswordInput)
218
 
            element("form:password");
219
 
        assertNotNull(password);
220
 
        assertEquals("", password.getLangAttribute());
221
 
        assertEquals("form:password", password.getNameAttribute());
222
 
        assertEquals("", password.getOnClickAttribute());
223
 
        assertEquals("", password.getOnDblClickAttribute());
224
 
        assertEquals("", password.getOnKeyDownAttribute());
225
 
        assertEquals("", password.getOnKeyPressAttribute());
226
 
        assertEquals("", password.getOnKeyUpAttribute());
227
 
        assertEquals("", password.getOnMouseDownAttribute());
228
 
        assertEquals("", password.getOnMouseMoveAttribute());
229
 
        assertEquals("", password.getOnMouseOutAttribute());
230
 
        assertEquals("", password.getOnMouseOverAttribute());
231
 
        assertEquals("", password.getOnMouseUpAttribute());
232
 
        assertEquals("password", password.getTypeAttribute());
233
 
        assertEquals("", password.getValueAttribute());
234
 
 
235
 
        HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
236
 
        assertNotNull(submit);
237
 
        assertEquals("", submit.getLangAttribute());
238
 
        assertEquals("form:submit", submit.getNameAttribute());
239
 
        assertEquals("", submit.getOnClickAttribute());
240
 
        assertEquals("", submit.getOnDblClickAttribute());
241
 
        assertEquals("", submit.getOnKeyDownAttribute());
242
 
        assertEquals("", submit.getOnKeyPressAttribute());
243
 
        assertEquals("", submit.getOnKeyUpAttribute());
244
 
        assertEquals("", submit.getOnMouseDownAttribute());
245
 
        assertEquals("", submit.getOnMouseMoveAttribute());
246
 
        assertEquals("", submit.getOnMouseOutAttribute());
247
 
        assertEquals("", submit.getOnMouseOverAttribute());
248
 
        assertEquals("", submit.getOnMouseUpAttribute());
249
 
        assertEquals("submit", submit.getTypeAttribute());
250
 
        assertEquals("Logon", submit.getValueAttribute());
251
 
 
252
 
        HtmlResetInput reset = (HtmlResetInput) element("form:reset");
253
 
        assertNotNull(reset);
254
 
        assertEquals("", reset.getLangAttribute());
255
 
        assertEquals("form:reset", reset.getNameAttribute());
256
 
        assertEquals("", reset.getOnClickAttribute());
257
 
        assertEquals("", reset.getOnDblClickAttribute());
258
 
        assertEquals("", reset.getOnKeyDownAttribute());
259
 
        assertEquals("", reset.getOnKeyPressAttribute());
260
 
        assertEquals("", reset.getOnKeyUpAttribute());
261
 
        assertEquals("", reset.getOnMouseDownAttribute());
262
 
        assertEquals("", reset.getOnMouseMoveAttribute());
263
 
        assertEquals("", reset.getOnMouseOutAttribute());
264
 
        assertEquals("", reset.getOnMouseOverAttribute());
265
 
        assertEquals("", reset.getOnMouseUpAttribute());
266
 
        assertEquals("reset", reset.getTypeAttribute());
267
 
        assertEquals("Reset", reset.getValueAttribute());
268
 
 
269
 
        HtmlSubmitInput cancel = (HtmlSubmitInput) element("form:cancel");
270
 
        assertNotNull(cancel);
271
 
        assertEquals("", cancel.getLangAttribute());
272
 
        assertEquals("form:cancel", cancel.getNameAttribute());
273
 
        assertEquals("", cancel.getOnClickAttribute());
274
 
        assertEquals("", cancel.getOnDblClickAttribute());
275
 
        assertEquals("", cancel.getOnKeyDownAttribute());
276
 
        assertEquals("", cancel.getOnKeyPressAttribute());
277
 
        assertEquals("", cancel.getOnKeyUpAttribute());
278
 
        assertEquals("", cancel.getOnMouseDownAttribute());
279
 
        assertEquals("", cancel.getOnMouseMoveAttribute());
280
 
        assertEquals("", cancel.getOnMouseOutAttribute());
281
 
        assertEquals("", cancel.getOnMouseOverAttribute());
282
 
        assertEquals("", cancel.getOnMouseUpAttribute());
283
 
        assertEquals("submit", cancel.getTypeAttribute());
284
 
        assertEquals("Cancel", cancel.getValueAttribute());
285
 
 
286
 
        HtmlAnchor anchor = (HtmlAnchor) element("form:submit2");
287
 
        assertNotNull(anchor);
288
 
        assertEquals("", anchor.getAccessKeyAttribute());
289
 
        assertEquals("", anchor.getCharsetAttribute());
290
 
        assertEquals("", anchor.getClassAttribute());
291
 
        assertEquals("", anchor.getCoordsAttribute());
292
 
        assertEquals("#", anchor.getHrefAttribute());
293
 
        assertEquals("form:submit2", anchor.getIdAttribute());
294
 
        assertEquals("", anchor.getLangAttribute());
295
 
        assertEquals("", anchor.getHrefLangAttribute());
296
 
        assertEquals("", anchor.getOnBlurAttribute());
297
 
        assertTrue
298
 
            (anchor.getOnClickAttribute().startsWith
299
 
             ("document.forms['form']" +
300
 
              "['org_apache_struts_faces_renderer_CommandLinkRenderer']" +
301
 
              ".value='form:submit2';"));
302
 
        assertEquals("", anchor.getOnDblClickAttribute());
303
 
        assertEquals("", anchor.getOnKeyDownAttribute());
304
 
        assertEquals("", anchor.getOnKeyPressAttribute());
305
 
        assertEquals("", anchor.getOnKeyUpAttribute());
306
 
        assertEquals("", anchor.getOnMouseDownAttribute());
307
 
        assertEquals("", anchor.getOnMouseMoveAttribute());
308
 
        assertEquals("", anchor.getOnMouseOutAttribute());
309
 
        assertEquals("", anchor.getOnMouseOverAttribute());
310
 
        assertEquals("", anchor.getOnMouseUpAttribute());
311
 
        assertEquals("", anchor.getTextDirectionAttribute());
312
 
        assertEquals("", anchor.getXmlLangAttribute());
313
 
        assertEquals("", anchor.getOnFocusAttribute());
314
 
        assertEquals("", anchor.getRelAttribute());
315
 
        assertEquals("", anchor.getRevAttribute());
316
 
        assertEquals("", anchor.getShapeAttribute());
317
 
        assertEquals("", anchor.getStyleAttribute());
318
 
        assertEquals("", anchor.getTabIndexAttribute());
319
 
        assertEquals("a", anchor.getTagName());
320
 
        assertEquals("", anchor.getTargetAttribute());
321
 
        assertEquals("", anchor.getTitleAttribute());
322
 
        assertEquals("", anchor.getTypeAttribute());
323
 
        assertEquals("Logon", anchor.asText());
324
 
 
325
 
        List list = form.getHtmlElementsByAttribute
326
 
            ("input", "name",
327
 
             "org_apache_struts_faces_renderer_CommandLinkRenderer");
328
 
        assertNotNull(list);
329
 
        assertEquals(1, list.size());
330
 
        HtmlHiddenInput hidden = (HtmlHiddenInput) list.get(0);
331
 
        assertEquals("hidden", hidden.getTypeAttribute());
332
 
        assertEquals("", hidden.getValueAttribute());
333
 
 
334
 
    }
335
 
 
336
 
 
337
 
    /**
338
 
     * <p>Submit known-bad mismatch and verify the correct response.</p>
339
 
     */
340
 
    public void testMismatch() throws Exception {
341
 
 
342
 
        HtmlSpan span = null;
343
 
        HtmlTextInput username = (HtmlTextInput) element("form:username");
344
 
        HtmlPasswordInput password = (HtmlPasswordInput)
345
 
            element("form:password");
346
 
        HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
347
 
 
348
 
        username.setValueAttribute("baduser");
349
 
        password.setValueAttribute("badpass");
350
 
        submit(submit);
351
 
 
352
 
        assertEquals("logon", title());
353
 
 
354
 
        span = (HtmlSpan) element("globalErrors");
355
 
        assertNotNull(span);
356
 
        assertEquals("[EH][EP]Invalid username/password combination[ES][EF]",
357
 
                     span.asText());
358
 
 
359
 
        username = (HtmlTextInput) element("form:username");
360
 
        assertNotNull(username);
361
 
        assertEquals("baduser", username.getValueAttribute());
362
 
 
363
 
        span = (HtmlSpan) element("form:usernameErrors");
364
 
        assertNotNull(span);
365
 
        assertEquals("", span.asText());
366
 
 
367
 
        password = (HtmlPasswordInput) element("form:password");
368
 
        assertNotNull(password);
369
 
        assertEquals("", password.getValueAttribute());
370
 
 
371
 
        span = (HtmlSpan) element("form:passwordErrors");
372
 
        assertNotNull(span);
373
 
        assertEquals("", span.asText());
374
 
 
375
 
    }
376
 
 
377
 
 
378
 
    /**
379
 
     * <p>Submit known-good username and password values, and
380
 
     * verify the correct response.</p>
381
 
     */
382
 
    public void testSuccessful() throws Exception {
383
 
 
384
 
        HtmlTextInput username = (HtmlTextInput) element("form:username");
385
 
        HtmlPasswordInput password = (HtmlPasswordInput)
386
 
            element("form:password");
387
 
        HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
388
 
 
389
 
        username.setValueAttribute("gooduser");
390
 
        password.setValueAttribute("goodpass");
391
 
        submit(submit);
392
 
 
393
 
        assertEquals("logon1", title());
394
 
 
395
 
    }
396
 
 
397
 
 
398
 
}