mirror of https://github.com/vitalif/phantomjs
Port custom headers testing of web page.
The HTTP server launched by the test runner has a new endpoint called /echo. This simply echoes back some information (current on the made request, in the future it will be expanded to further information) formatted as JSON. This echo system facilitates easy testing for request header manipulation feature. https://github.com/ariya/phantomjs/issues/124392.0
parent
2c10f6095b
commit
f20835735c
|
@ -0,0 +1,23 @@
|
||||||
|
var assert = require('../../assert');
|
||||||
|
var webpage = require('webpage');
|
||||||
|
|
||||||
|
// NOTE: HTTP header names are case-insensitive. Our test server
|
||||||
|
// returns the name in lowercase.
|
||||||
|
|
||||||
|
var page = webpage.create();
|
||||||
|
assert.typeOf(page.customHeaders, 'object');
|
||||||
|
assert.strictEqual(JSON.stringify(page.customHeaders), '{}');
|
||||||
|
|
||||||
|
page.onResourceRequested = function(requestData, request) {
|
||||||
|
assert.typeOf(request.setHeader, 'function');
|
||||||
|
request.setHeader('CustomHeader', 'CustomValue');
|
||||||
|
};
|
||||||
|
page.open('http://localhost:9180/echo', function (status) {
|
||||||
|
var json, headers;
|
||||||
|
assert.equal(status, 'success');
|
||||||
|
json = JSON.parse(page.plainText);
|
||||||
|
headers = json.headers;
|
||||||
|
assert.isTrue(headers.hasOwnProperty('customheader'));
|
||||||
|
assert.equal(headers.customheader, 'CustomValue');
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
var assert = require('../../assert');
|
||||||
|
var webpage = require('webpage');
|
||||||
|
|
||||||
|
var page = webpage.create();
|
||||||
|
assert.typeOf(page.customHeaders, 'object');
|
||||||
|
assert.strictEqual(JSON.stringify(page.customHeaders), '{}');
|
||||||
|
|
||||||
|
// NOTE: HTTP header names are case-insensitive. Our test server
|
||||||
|
// returns the name in lowercase.
|
||||||
|
|
||||||
|
page.customHeaders = {
|
||||||
|
'Custom-Key': 'Custom-Value',
|
||||||
|
'User-Agent': 'Overriden-UA',
|
||||||
|
'Referer': 'Overriden-Referer'
|
||||||
|
};
|
||||||
|
page.open('http://localhost:9180/echo', function (status) {
|
||||||
|
var json, headers;
|
||||||
|
assert.equal(status, 'success');
|
||||||
|
json = JSON.parse(page.plainText);
|
||||||
|
assert.typeOf(json, 'object');
|
||||||
|
headers = json.headers;
|
||||||
|
assert.typeOf(headers, 'object');
|
||||||
|
|
||||||
|
assert.isTrue(headers.hasOwnProperty('custom-key'));
|
||||||
|
assert.isTrue(headers.hasOwnProperty('user-agent'));
|
||||||
|
assert.isTrue(headers.hasOwnProperty('referer'));
|
||||||
|
assert.equal(headers['custom-key'], 'Custom-Value');
|
||||||
|
assert.equal(headers['user-agent'], 'Overriden-UA');
|
||||||
|
assert.equal(headers['referer'], 'Overriden-Referer');
|
||||||
|
});
|
|
@ -0,0 +1,25 @@
|
||||||
|
var assert = require('../../assert');
|
||||||
|
var webpage = require('webpage');
|
||||||
|
|
||||||
|
// NOTE: HTTP header names are case-insensitive. Our test server
|
||||||
|
// returns the name in lowercase.
|
||||||
|
|
||||||
|
var page = webpage.create();
|
||||||
|
assert.typeOf(page.customHeaders, 'object');
|
||||||
|
assert.strictEqual(JSON.stringify(page.customHeaders), '{}');
|
||||||
|
|
||||||
|
page.customHeaders = { 'CustomHeader': 'ModifiedCustomValue' };
|
||||||
|
|
||||||
|
page.onResourceRequested = function(requestData, request) {
|
||||||
|
assert.typeOf(request.setHeader, 'function');
|
||||||
|
request.setHeader('CustomHeader', 'ModifiedCustomValue');
|
||||||
|
};
|
||||||
|
page.open('http://localhost:9180/echo', function (status) {
|
||||||
|
var json, headers;
|
||||||
|
assert.equal(status, 'success');
|
||||||
|
json = JSON.parse(page.plainText);
|
||||||
|
headers = json.headers;
|
||||||
|
assert.isTrue(headers.hasOwnProperty('customheader'));
|
||||||
|
assert.equal(headers.customheader, 'ModifiedCustomValue');
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
var assert = require('../../assert');
|
||||||
|
var webpage = require('webpage');
|
||||||
|
|
||||||
|
// NOTE: HTTP header names are case-insensitive. Our test server
|
||||||
|
// returns the name in lowercase.
|
||||||
|
|
||||||
|
var page = webpage.create();
|
||||||
|
assert.typeOf(page.customHeaders, 'object');
|
||||||
|
assert.strictEqual(JSON.stringify(page.customHeaders), '{}');
|
||||||
|
|
||||||
|
page.customHeaders = { 'CustomHeader': 'ModifiedCustomValue' };
|
||||||
|
|
||||||
|
page.onResourceRequested = function(requestData, request) {
|
||||||
|
assert.typeOf(request.setHeader, 'function');
|
||||||
|
request.setHeader('CustomHeader', null);
|
||||||
|
};
|
||||||
|
page.open('http://localhost:9180/echo', function (status) {
|
||||||
|
var json, headers;
|
||||||
|
assert.equal(status, 'success');
|
||||||
|
json = JSON.parse(page.plainText);
|
||||||
|
headers = json.headers;
|
||||||
|
assert.isTrue(!headers.hasOwnProperty('customheader'));
|
||||||
|
assert.isTrue(!headers.hasOwnProperty('CustomHeader'));
|
||||||
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import json
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import posixpath
|
import posixpath
|
||||||
|
@ -12,6 +13,7 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
|
import urlparse
|
||||||
|
|
||||||
TIMEOUT = 35 # Maximum duration of PhantomJS execution (in seconds)
|
TIMEOUT = 35 # Maximum duration of PhantomJS execution (in seconds)
|
||||||
|
|
||||||
|
@ -26,6 +28,10 @@ TESTS = [
|
||||||
'basics/version.js',
|
'basics/version.js',
|
||||||
'module/webpage/open.js',
|
'module/webpage/open.js',
|
||||||
'module/webpage/loading.js',
|
'module/webpage/loading.js',
|
||||||
|
'module/webpage/custom-headers.js',
|
||||||
|
'module/webpage/add-header.js',
|
||||||
|
'module/webpage/remove-header.js',
|
||||||
|
'module/webpage/modify-header.js',
|
||||||
'module/system/system.js',
|
'module/system/system.js',
|
||||||
'module/system/args.js',
|
'module/system/args.js',
|
||||||
'module/system/os.js',
|
'module/system/os.js',
|
||||||
|
@ -40,7 +46,32 @@ TESTS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class FileHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
class FileHandler(SimpleHTTPServer.SimpleHTTPRequestHandler, object):
|
||||||
|
|
||||||
|
def do_GET(self):
|
||||||
|
url = urlparse.urlparse(self.path)
|
||||||
|
if url.path == '/echo':
|
||||||
|
headers = {}
|
||||||
|
for name, value in self.headers.items():
|
||||||
|
headers[name] = value.rstrip()
|
||||||
|
d = dict(
|
||||||
|
command=self.command,
|
||||||
|
version=self.protocol_version,
|
||||||
|
origin=self.client_address,
|
||||||
|
url=self.path,
|
||||||
|
path=url.path,
|
||||||
|
params=url.params,
|
||||||
|
query=url.query,
|
||||||
|
fragment=url.fragment,
|
||||||
|
headers=headers
|
||||||
|
)
|
||||||
|
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-Type', 'application/json')
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(json.dumps(d, indent=2) + '\r\n')
|
||||||
|
else:
|
||||||
|
super(FileHandler, self).do_GET()
|
||||||
|
|
||||||
# silent, do not pollute stdout nor stderr.
|
# silent, do not pollute stdout nor stderr.
|
||||||
def log_message(self, format, *args):
|
def log_message(self, format, *args):
|
||||||
|
|
|
@ -183,11 +183,6 @@ describe("WebPage object", function() {
|
||||||
expect(page.settings).toNotEqual({});
|
expect(page.settings).toNotEqual({});
|
||||||
});
|
});
|
||||||
|
|
||||||
expectHasProperty(page, 'customHeaders');
|
|
||||||
it("should have customHeaders as an empty object", function() {
|
|
||||||
expect(page.customHeaders).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
expectHasProperty(page, 'zoomFactor');
|
expectHasProperty(page, 'zoomFactor');
|
||||||
it("should have zoomFactor of 1", function() {
|
it("should have zoomFactor of 1", function() {
|
||||||
expect(page.zoomFactor).toEqual(1.0);
|
expect(page.zoomFactor).toEqual(1.0);
|
||||||
|
@ -780,49 +775,6 @@ describe("WebPage object", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should set custom headers properly", function() {
|
|
||||||
var server = require('webserver').create();
|
|
||||||
server.listen(12345, function(request, response) {
|
|
||||||
// echo received request headers in response body
|
|
||||||
response.write(JSON.stringify(request.headers));
|
|
||||||
response.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
var url = "http://localhost:12345/foo/headers.txt?ab=cd";
|
|
||||||
var customHeaders = {
|
|
||||||
"Custom-Key" : "Custom-Value",
|
|
||||||
"User-Agent" : "Overriden-UA",
|
|
||||||
"Referer" : "Overriden-Referer"
|
|
||||||
};
|
|
||||||
page.customHeaders = customHeaders;
|
|
||||||
|
|
||||||
var handled = false;
|
|
||||||
runs(function() {
|
|
||||||
expect(handled).toEqual(false);
|
|
||||||
page.open(url, function (status) {
|
|
||||||
expect(status == 'success').toEqual(true);
|
|
||||||
handled = true;
|
|
||||||
|
|
||||||
var echoedHeaders = JSON.parse(page.plainText);
|
|
||||||
// console.log(JSON.stringify(echoedHeaders, null, 4));
|
|
||||||
// console.log(JSON.stringify(customHeaders, null, 4));
|
|
||||||
|
|
||||||
expect(echoedHeaders["Custom-Key"]).toEqual(customHeaders["Custom-Key"]);
|
|
||||||
expect(echoedHeaders["User-Agent"]).toEqual(customHeaders["User-Agent"]);
|
|
||||||
expect(echoedHeaders["Referer"]).toEqual(customHeaders["Referer"]);
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
waits(50);
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
expect(handled).toEqual(true);
|
|
||||||
server.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should process request body properly for POST", function() {
|
it("should process request body properly for POST", function() {
|
||||||
var server = require('webserver').create();
|
var server = require('webserver').create();
|
||||||
server.listen(12345, function(request, response) {
|
server.listen(12345, function(request, response) {
|
||||||
|
@ -2168,103 +2120,3 @@ describe("WebPage render image", function(){
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("WebPage network request headers handling", function() {
|
|
||||||
it("should add HTTP header to a network request", function() {
|
|
||||||
var page = require("webpage").create();
|
|
||||||
var server = require("webserver").create();
|
|
||||||
var isCustomHeaderPresented = false;
|
|
||||||
|
|
||||||
server.listen(12345, function(response) {
|
|
||||||
if (response.headers["CustomHeader"] && response.headers["CustomHeader"] === "CustomValue") {
|
|
||||||
isCustomHeaderPresented = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
page.onResourceRequested = function(requestData, request) {
|
|
||||||
expect(typeof request.setHeader).toEqual("function");
|
|
||||||
request.setHeader("CustomHeader", "CustomValue");
|
|
||||||
};
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
page.open("http://localhost:12345", function(status) {
|
|
||||||
expect(status).toEqual("success");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
waitsFor(function() {
|
|
||||||
return isCustomHeaderPresented;
|
|
||||||
}, "isCustomHeaderPresented should be received", 3000);
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
page.close();
|
|
||||||
server.close();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
xit("should remove HTTP header from a network request", function() {
|
|
||||||
var page = require("webpage").create();
|
|
||||||
page.customHeaders = {"CustomHeader": "CustomValue"};
|
|
||||||
|
|
||||||
var server = require("webserver").create();
|
|
||||||
var handled = false;
|
|
||||||
|
|
||||||
server.listen(12345, function(request) {
|
|
||||||
if (request.headers["CustomHeader"] == null) {
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
page.onResourceRequested = function(requestData, request) {
|
|
||||||
expect(typeof request.setHeader).toEqual("function");
|
|
||||||
request.setHeader("CustomHeader", null);
|
|
||||||
};
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
page.open("http://localhost:12345", function(status) {
|
|
||||||
expect(status).toEqual("success");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
waits(3000);
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
expect(handled).toBeTruthy();
|
|
||||||
page.close();
|
|
||||||
server.close();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
xit("should set HTTP header value for a network request", function() {
|
|
||||||
var page = require("webpage").create();
|
|
||||||
page.customHeaders = {"CustomHeader": "CustomValue"};
|
|
||||||
|
|
||||||
var server = require("webserver").create();
|
|
||||||
var handled = false;
|
|
||||||
|
|
||||||
server.listen(12345, function(request) {
|
|
||||||
if (request.headers["CustomHeader"] &&
|
|
||||||
request.headers["CustomHeader"] === "ChangedCustomValue") {
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
page.onResourceRequested = function(requestData, request) {
|
|
||||||
expect(typeof request.setHeader).toEqual("function");
|
|
||||||
request.setHeader("CustomHeader", "ChangedCustomValue");
|
|
||||||
};
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
page.open("http://localhost:12345", function(status) {
|
|
||||||
expect(status).toEqual("success");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
waits(3000);
|
|
||||||
|
|
||||||
runs(function() {
|
|
||||||
expect(handled).toBeTruthy();
|
|
||||||
page.close();
|
|
||||||
server.close();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
Loading…
Reference in New Issue