char* fullurl(URLwin *u, Rune *rhref) { char *base, *href, *hrefbase; char *result; if(rhref == nil) return estrdup("NULL URL"); href = runetobyte(rhref, runestrlen(rhref)); hrefbase = baseurl(href); result = nil; if(hrefbase==nil && (base = baseurl(u->url))!=nil){ result = estrdup(base); if(base[strlen(base)-1]!='/' && (href==nil || href[0]!='/')) result = eappend(result, "/", ""); free(base); } if(href){ if(result) result = eappend(result, "", href); else result = estrdup(href); } free(hrefbase); if(result == nil) return estrdup("***unknown***"); return result; }
bool TestExtServer::test_pagelet_server_task_result() { const int TEST_SIZE = 20; String baseurl("pageletserver?getparam="); String baseheader("MyHeader: "); String basepost("postparam="); std::vector<Object> tasks; for (int i = 0; i < TEST_SIZE; ++i) { String url = baseurl + String(i); String header = baseheader + String(i); String post = basepost + String(i); Object task = f_pagelet_server_task_start(url, CREATE_VECTOR1(header), post); tasks.push_back(task); } for (int i = 0; i < TEST_SIZE; ++i) { f_pagelet_server_task_status(tasks[i]); } // Calls that time out (try 1 ms) should return a status code of -1 for (int i = 0; i < TEST_SIZE; ++i) { Variant code, headers; VS("", f_pagelet_server_task_result(tasks[i], ref(headers), ref(code), 1)); VS(code, -1); } for (int i = 0; i < TEST_SIZE; ++i) { String expected = "pagelet postparam: postparam="; expected += String(i); expected += "pagelet getparam: "; expected += String(i); expected += "pagelet header: "; expected += String(i); // A timeout of 0 indicates an infinite timeout that blocks. Variant code, headers; VS(expected, f_pagelet_server_task_result(tasks[i], ref(headers), ref(code), 0)); VS(code, 200); VS(headers[1], "ResponseHeader: okay"); VS(expected, f_pagelet_server_task_result(tasks[i], ref(headers), ref(code), 1)); VS(code, 200); } return Count(true); }
bool TestExtServer::test_pagelet_server_task_result() { const int TEST_SIZE = 20; String baseurl("ext/pageletserver?getparam="); String baseheader("MyHeader: "); String basepost("postparam="); std::vector<Resource> tasks; for (int i = 0; i < TEST_SIZE; ++i) { String url = baseurl + String(i); String header = baseheader + String(i); String post = basepost + String(i); Resource task = HHVM_FN(pagelet_server_task_start)(url, make_packed_array(header), post); tasks.push_back(task); } for (int i = 0; i < TEST_SIZE; ++i) { HHVM_FN(pagelet_server_task_status)(tasks[i]); } // Calls that time out (try 1 ms) should return a status code of -1 for (int i = 0; i < TEST_SIZE; ++i) { Variant code, headers; VS("", HHVM_FN(pagelet_server_task_result)(tasks[i], ref(headers), ref(code), 1)); VS(code, -1); } for (int i = 0; i < TEST_SIZE; ++i) { String expected = "pagelet postparam: postparam="; expected += String(i); expected += "pagelet getparam: "; expected += String(i); expected += "pagelet header: "; expected += String(i); // A timeout of 0 indicates an infinite timeout that blocks. Variant code, headers; VS(expected, HHVM_FN(pagelet_server_task_result)(tasks[i], ref(headers), ref(code), 0)); VS(code, 200); Array headerArray = headers.toArray(); bool hasResponseHeader = false; String expectedHeader = String("ResponseHeader: okay"); for (int headerIdx = 0; headerIdx < headerArray.size(); headerIdx++) { if (headerArray[headerIdx].toString() == expectedHeader) { hasResponseHeader = true; break; } } VERIFY(hasResponseHeader); VS(expected, HHVM_FN(pagelet_server_task_result)(tasks[i], ref(headers), ref(code), 1)); VS(code, 200); } return Count(true); }