1 /*
2 * Copyright 1999-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.commons.latka.validators;
18
19 import org.apache.commons.latka.ValidationException;
20
21 import org.apache.commons.latka.http.Session;
22 import org.apache.commons.latka.http.Response;
23
24 /**
25 * CookieValidator validates cookie existence and/or value in an HTTP session.
26 *
27 * @author <a href="mailto:dsale@us.britannica.com">Doug Sale</a>
28 * @author dIon Gillard
29 * @version $Id: CookieValidator.java 155424 2005-02-26 13:09:29Z dirkv $
30 */
31 public class CookieValidator extends BaseConditionalValidator {
32
33 // --------------------------------------------------------------- Attributes
34
35 protected String _cookieValue = null;
36 protected String _cookieName = null;
37
38 protected static final String MESSAGE_INVALID_TEST = "INVALID TEST: COOKIE NAME NOT SET";
39 protected static final String BARE_MESSAGE_EXISTENT_COOKIE = " TO FIND COOKIE IN SESSION";
40 protected static final String BARE_MESSAGE_EQUAL_VALUES = " THAT COOKIE VALUES EQUAL:";
41
42 // needed to generate the correct exception
43 protected String _lastTestedCookieValue = null;
44
45 // ------------------------------------------------------------- Constructors
46
47 public CookieValidator() {
48 this(null,null,null,true);
49 }
50
51 public CookieValidator(String label) {
52 this(label,null,null,true);
53 }
54
55 public CookieValidator(String name, String value) {
56 this(null,name,value,true);
57 }
58
59 public CookieValidator(String label, String name, String value, boolean condition) {
60 super(label, condition);
61 _cookieName = name;
62 _cookieValue = value;
63 }
64
65 // ------------------------------------------------------------------ Methods
66
67 /**
68 * If cookie value is set, this <code>Validator</code> tests for cookie value equivalency, in addition to cookie existence
69 *
70 * @param value the value of the cookie
71 */
72 public void setCookieValue(String value) {
73 _cookieValue = value;
74 }
75
76 /**
77 * The cookie name must be set for this <code>Validator</code> to function properly.
78 *
79 * @param name the name of the cookie
80 */
81 public void setCookieName(String name) {
82 _cookieName = name;
83 }
84
85 /**
86 * @throws org.apache.commons.latka.ValidationException
87 * if cookie name hasn't been set, the cookie doesn't exist in the session, or if cookie value has been set and the cookie values don't match
88 */
89 public boolean assertTrue(Response response)
90 throws ValidationException {
91
92 if (_cookieName != null) {
93 Session session = response.getRequest().getSession();
94
95 _lastTestedCookieValue = session.getCookieValue(_cookieName);
96
97 // existence test
98 if (_lastTestedCookieValue == null) {
99 return false;
100 }
101 // value test
102 else if (_cookieValue != null) {
103 if (!_cookieValue.equals(_lastTestedCookieValue)) {
104 return false;
105 }
106 }
107 }
108 // invalid test
109 else {
110 fail(MESSAGE_INVALID_TEST);
111 }
112
113 return true;
114 }
115
116 public String generateBareExceptionMessage() {
117
118 if (_lastTestedCookieValue == null) {
119 return BARE_MESSAGE_EXISTENT_COOKIE;
120 }
121 // value test
122 else {
123 StringBuffer buffer = new StringBuffer(BARE_MESSAGE_EQUAL_VALUES);
124 buffer.append(" EXPECTED: ");
125 buffer.append(_cookieValue);
126 buffer.append(" RECEIVED: ");
127 buffer.append(_lastTestedCookieValue);
128 return buffer.toString();
129 }
130 }
131
132 }