7e7624b415bfd1842ec20badf4b55f5abd3755f7
[frank.git] / test / net / jaekl / qd / http / RequestBrokerMock.java
1 package net.jaekl.qd.http;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5 import java.io.UnsupportedEncodingException;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8
9 import net.jaekl.qd.QDException;
10 import net.jaekl.qd.util.StringUtils;
11
12 import org.apache.http.NameValuePair;
13 import org.junit.Assert;
14
15 public class RequestBrokerMock extends RequestBroker {
16         private static class InputParams {
17                 private String m_method;
18                 private ArrayList<NameValuePair> m_passedParams;
19                 
20                 public InputParams(String method, ArrayList<NameValuePair> passedParams) {
21                         m_method = method;
22                         m_passedParams = new ArrayList<NameValuePair>();
23                         for (NameValuePair nvp : passedParams) {
24                                 m_passedParams.add(nvp);
25                         }
26                 }
27                 
28                 @Override
29                 public boolean equals(Object obj) {
30                         if (null == obj || !(obj instanceof InputParams)) {
31                                 return false;
32                         }
33                         InputParams other = (InputParams)obj;
34                         if (! StringUtils.areEqual(m_method, other.m_method)) {
35                                 return false;
36                         }
37                         if (m_passedParams.size() != other.m_passedParams.size()) {
38                                 return false;
39                         }
40                         for (int i = 0; i < m_passedParams.size(); ++i) {
41                                 NameValuePair a, b;
42                                 a = m_passedParams.get(i);
43                                 b = other.m_passedParams.get(i);
44                                 if ( ! a.equals(b) ) {
45                                         return false;
46                                 }
47                         }
48                         return true;
49                 }
50                 
51                 @Override
52                 public int hashCode() {
53                         final int PRIME = 31;
54                         int result = PRIME + m_method.hashCode();
55                         for (NameValuePair nvp : m_passedParams) {
56                                 result *= (PRIME + nvp.hashCode());
57                         }
58                         return result;
59                 }
60         }
61         
62         HashMap<InputParams, String> m_output;
63         
64         public RequestBrokerMock(String gatewayUrl, ArrayList<NameValuePair> baseParams) {
65                 super(gatewayUrl, baseParams);
66                 m_output = new HashMap<InputParams, String>();
67         }
68         
69         public void setOutput(String method, ArrayList<NameValuePair> passedParams, String output) {
70                 InputParams ip = new InputParams(method, passedParams);
71                 m_output.put(ip, output);
72         }
73         
74         @Override 
75         InputStream doSubmit(String method, ArrayList<NameValuePair> passedParams) throws QDException
76         {
77                 InputParams ip = new InputParams(method, passedParams);
78                 String output = m_output.get(ip);
79                 
80                 if (null == output) {
81                         Assert.fail("No output specified for given inputs.");
82                 }
83                 
84                 InputStream is = null;
85                 
86                 try {
87                         is = new ByteArrayInputStream(output.getBytes("UTF-8"));
88                 }
89                 catch (UnsupportedEncodingException uee) {
90                         throw new QDException(uee);
91                 }
92                 
93                 return is;
94         }
95 }