Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "TestPreProc.h"
00024 #include "IOBufferPool.h"
00025 #include "IOBuffer.h"
00026 #include "HttpPreProc.h"
00027 #include "HttpMessage.h"
00028 #include "HttpPreProcMessageManager.h"
00029 #include "RawHashTable.h"
00030 #include "ink_time.h"
00031 #include <string.h>
00032 #include <iostream.h>
00033
00034
00035 void dumpMessage(const HttpMessage & msg);
00036 void testPreProc();
00037
00038
00039 char *request1 = "GET http://trafficserver.apache.org HTTP/1.1\r\n\
00040 Accept: text/*, text/html, text/html; level=1\r\n\
00041 Accept-Charset: iso-8859-5, unicode-1-1;q=0.8\r\n\r\n";
00042 char *response1 = "HTTP/1.1 200\r\n\r\n";
00043
00044
00045
00046 RequestInput::RequestInput(const char *str, IOBuffer * cb)
00047 :
00048 m_sp(0),
00049 m_len(0),
00050 m_cb(cb)
00051 {
00052 m_len = strlen(str);
00053 m_sp = request1;
00054
00055 return;
00056 }
00057
00058
00059
00060
00061 RequestInput::~RequestInput()
00062 {
00063 return;
00064 }
00065
00066
00067
00068
00069 void
00070 RequestInput::run()
00071 {
00072 unsigned maxBytes = 0;
00073
00074 char *buff = m_cb->getWrite(&maxBytes);
00075 unsigned writeBytes = (m_len < maxBytes) ? m_len : maxBytes;
00076
00077
00078 writeBytes = ink_strlcpy(buff, m_sp, maxBytes);
00079 m_cb->wrote(writeBytes);
00080
00081 m_len -= writeBytes;
00082 m_sp += writeBytes;
00083
00084 return;
00085 }
00086
00087
00088
00089
00090 void
00091 dumpMessage(const HttpMessage & msg)
00092 {
00093 if (msg.isResponse()) {
00094 cout << "Http response" << endl;
00095 }
00096 if (msg.isRequest()) {
00097 cout << "Http request" << endl;
00098 }
00099
00100 cout << "Major version: " << msg.getMajorVersion() << endl;
00101 cout << "Minor version: " << msg.getMinorVersion() << endl;
00102 cout << "Method : ";
00103 switch (msg.getMethod()) {
00104 case HttpMessage::METHOD_NONE:
00105 cout << "NONE" << endl;
00106 case HttpMessage::METHOD_OPTIONS:
00107 cout << "OPTIONS" << endl;
00108 break;
00109 case HttpMessage::METHOD_GET:
00110 cout << "GET" << endl;
00111 break;
00112 case HttpMessage::METHOD_HEAD:
00113 cout << "HEAD" << endl;
00114 break;
00115 case HttpMessage::METHOD_POST:
00116 cout << "POST" << endl;
00117 break;
00118 case HttpMessage::METHOD_PUT:
00119 cout << "PUT" << endl;
00120 break;
00121 case HttpMessage::METHOD_DELETE:
00122 cout << "DELETE" << endl;
00123 break;
00124 case HttpMessage::METHOD_TRACE:
00125 cout << "TRACE" << endl;
00126 break;
00127 }
00128
00129 cout << "Scheme : ";
00130 switch (msg.getScheme()) {
00131 case HttpMessage::SCHEME_NONE:
00132 cout << "NONE" << endl;
00133 break;
00134 case HttpMessage::SCHEME_HTTP:
00135 cout << "HTTP" << endl;
00136 break;
00137 }
00138 cout << "Status code: " << msg.getStatusCode() << endl;
00139 cout << "Request URI: " << msg.getRequestURI() << endl;
00140
00141 return;
00142 }
00143
00144
00145
00146
00147 double
00148 testPreProc(unsigned loopCount)
00149 {
00150 IOBufferPool pool(96 , 20 );
00151 IOBuffer *cb = pool.newBuffer();
00152
00153 HttpPreProcMessageManager msgMgr;
00154
00155 HttpPreProc pp(cb, &msgMgr);
00156
00157
00158 double startTime = ink_time_wall_seconds();
00159
00160 for (unsigned i = 0; i < loopCount; i++) {
00161
00162 RequestInput requestInput(request1, cb);
00163
00164 while (!requestInput.isDone()) {
00165 requestInput.run();
00166 pp.process();
00167 }
00168 }
00169
00170 double endTime = ink_time_wall_seconds();
00171
00172 return (endTime - startTime);
00173 }
00174
00175
00176
00177
00178 main()
00179 {
00180 for (unsigned lc = 1; lc < 10000; lc *= 10) {
00181 double elapsedTime = testPreProc(lc);
00182 cout << "Elapsed time for " << lc << "loops is " << elapsedTime << endl;
00183 }
00184
00185
00186
00187 return (0);
00188 }