blob: 581eafbe150e653b85aabd2952f76c1f5981d342 [file] [log] [blame]
/** @file
Tests http scheduled functionality by requesting URLs out of a file
@section license License
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "HttpUpdateSM.h"
#include "HttpDebugNames.h"
#include "tscore/Diags.h"
#include "tscore/ink_platform.h"
#define MAX_ACTIVE_REQUESTS 5
#define MAX_TOTAL_REQUESTS 100
class UpTest : public Continuation
{
public:
UpTest(FILE *f, ProxyMutex *amutex);
int main_handler(int event, void *data);
private:
void make_requests();
int active_req;
#ifdef GO_AWAY
int total_req;
FILE *file;
#endif
};
UpTest::UpTest(FILE * /* f ATS_UNUSED */, ProxyMutex *amutex)
: Continuation(amutex),
active_req(0)
#ifdef GO_AWAY
,
total_req(0),
file(f)
#endif
{
SET_HANDLER(&UpTest::main_handler);
}
void
UpTest::make_requests()
{
ink_release_assert(0);
// HDR FIX ME
#ifdef GO_AWAY
while (active_req < MAX_ACTIVE_REQUESTS && file != NULL && total_req < MAX_TOTAL_REQUESTS) {
char url_buf[2048];
char req_buf[4096];
if (!fgets(url_buf, 2047, file)) {
Note("[Http Update Tester] url file exhausted");
fclose(file);
file = NULL;
return;
}
url_buf[strlen(url_buf) - 1] = '\0';
Debug("http_sch", "Firing off request for %s", url_buf);
sprintf(req_buf, "GET %s HTTP/1.0\r\nCache-Control: max-age=0\r\n\r\n", url_buf);
const char *req = req_buf;
HTTPHdr test_req;
HTTPParser http_parser;
http_parser_init(&http_parser);
test_req.create();
test_req.parse_req(&http_parser, &req, req + strlen(req), false);
http_parser_clear(&http_parser);
HttpUpdateSM *current_reader = HttpUpdateSM::allocate();
current_reader->init();
Action *a = current_reader->start_scheduled_update(this, test_req);
(void)a;
active_req++;
total_req++;
}
#endif
}
int
UpTest::main_handler(int event, void * /* data ATS_UNUSED */)
{
Debug("http_sch", "Received Event %s", HttpDebugNames::get_event_name(event));
if (event != EVENT_NONE && event != VC_EVENT_IMMEDIATE) {
active_req--;
}
make_requests();
return EVENT_DONE;
}
void
init_http_update_test()
{
FILE *f = fopen("urls", "r");
if (f == nullptr) {
Warning("[Http Update Tester] could not open URL file");
return;
}
UpTest *u = new UpTest(f, new_ProxyMutex());
fclose(f); // UpTest doesn't take ownership of f.
eventProcessor.schedule_imm(u);
}