UNPKG

@leansdk/leanrc

Version:

LeanRC is a MVC framework for creating graceful applications

1,247 lines (1,245 loc) 76.3 kB
EventEmitter = require 'events' { expect, assert } = require 'chai' sinon = require 'sinon' _ = require 'lodash' accepts = require 'accepts' LeanRC = require.main.require 'lib' { co } = LeanRC::Utils describe 'Request', -> describe '.new', -> facade = null afterEach -> facade?.remove?() it 'should create Request instance', -> co -> KEY = 'TEST_REQUEST_001' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.instanceOf request, TestRequest assert.equal request.ctx, context assert.equal request.ip, '192.168.0.1' yield return describe '#req', -> facade = null afterEach -> facade?.remove?() it 'should get request native value', -> co -> KEY = 'TEST_REQUEST_002' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.req, context.req yield return describe '#switch', -> facade = null afterEach -> facade?.remove?() it 'should get switch internal value', -> co -> KEY = 'TEST_REQUEST_003' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.switch, context.switch yield return describe '#headers', -> facade = null afterEach -> facade?.remove?() it 'should get headers value', -> co -> KEY = 'TEST_REQUEST_004' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.headers, context.req.headers yield return describe '#header', -> facade = null afterEach -> facade?.remove?() it 'should get header value', -> co -> KEY = 'TEST_REQUEST_005' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.header, context.req.headers yield return describe '#originalUrl', -> facade = null afterEach -> facade?.remove?() it 'should get original URL', -> co -> KEY = 'TEST_REQUEST_006' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.originalUrl, context.originalUrl yield return describe '#url', -> facade = null afterEach -> facade?.remove?() it 'should set and get native request URL', -> co -> KEY = 'TEST_REQUEST_007' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.url, 'http://localhost:8888' request.url = 'http://localhost:9999' assert.equal request.url, 'http://localhost:9999' assert.equal context.req.url, 'http://localhost:9999' yield return describe '#socket', -> facade = null afterEach -> facade?.remove?() it 'should get request socket', -> co -> KEY = 'TEST_REQUEST_008' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' socket: {} context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.socket, context.req.socket yield return describe '#protocol', -> facade = null afterEach -> facade?.remove?() it 'should get request protocol name', -> co -> KEY = 'TEST_REQUEST_009' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.protocol, 'http' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' socket: encrypted: yes context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.protocol, 'https' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' secure: yes context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.protocol, 'https' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-proto': 'https' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.protocol, 'https' yield return describe '#get', -> facade = null afterEach -> facade?.remove?() it 'should get single header', -> co -> KEY = 'TEST_REQUEST_010' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'referrer': 'localhost' 'x-forwarded-for': '192.168.0.1' 'x-forwarded-proto': 'https' 'abc': 'def' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.get('Referrer'), 'localhost' assert.equal request.get('X-Forwarded-For'), '192.168.0.1' assert.equal request.get('X-Forwarded-Proto'), 'https' assert.equal request.get('Abc'), 'def' assert.equal request.get('123'), '' yield return describe '#host', -> facade = null afterEach -> facade?.remove?() it 'should get full host name with port', -> co -> KEY = 'TEST_REQUEST_011' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.host, 'localhost:9999' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-host': 'localhost:8888, localhost:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.host, 'localhost:8888' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.host, '' yield return describe '#origin', -> facade = null afterEach -> facade?.remove?() it 'should get request origin', -> co -> KEY = 'TEST_REQUEST_012' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-proto': 'https' 'x-forwarded-host': 'localhost:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.origin, 'https://localhost:9999' yield return describe '#href', -> facade = null afterEach -> facade?.remove?() it 'should get request hyper reference', -> co -> KEY = 'TEST_REQUEST_013' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888/test' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.href, 'http://localhost:8888/test' req = url: '/test' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-proto': 'https' 'x-forwarded-host': 'localhost:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.href, 'https://localhost:9999/test' yield return describe '#method', -> facade = null afterEach -> facade?.remove?() it 'should get and set request method', -> co -> KEY = 'TEST_REQUEST_014' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: '/test' method: 'POST' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.method, 'POST' request.method = 'PUT' assert.equal request.method, 'PUT' assert.equal req.method, 'PUT' yield return describe '#path', -> facade = null afterEach -> facade?.remove?() it 'should get and set request path', -> co -> KEY = 'TEST_REQUEST_015' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'https://localhost:8888/test?t=ttt' method: 'POST' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.path, '/test' request.path = '/test1' assert.equal request.path, '/test1' assert.equal req.url, 'https://localhost:8888/test1?t=ttt' yield return describe '#querystring', -> facade = null afterEach -> facade?.remove?() it 'should get and set query string', -> co -> KEY = 'TEST_REQUEST_016' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'https://localhost:8888/test?t=ttt' method: 'POST' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.querystring, 't=ttt' request.querystring = 'a=aaa' assert.equal request.querystring, 'a=aaa' assert.equal req.url, 'https://localhost:8888/test?a=aaa' yield return describe '#search', -> facade = null afterEach -> facade?.remove?() it 'should get and set search string', -> co -> KEY = 'TEST_REQUEST_017' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'https://localhost:8888/test?t=ttt' method: 'POST' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.search, '?t=ttt' request.search = 'a=aaa' assert.equal request.search, '?a=aaa' assert.equal req.url, 'https://localhost:8888/test?a=aaa' yield return describe '#query', -> facade = null afterEach -> facade?.remove?() it 'should get and set query params', -> co -> KEY = 'TEST_REQUEST_018' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'https://localhost:8888/test?t=ttt' method: 'POST' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.deepEqual request.query, t: 'ttt' request.query = a: 'aaa' assert.deepEqual request.query, a: 'aaa' assert.equal req.url, 'https://localhost:8888/test?a=aaa' yield return describe '#hostname', -> facade = null afterEach -> facade?.remove?() it 'should get host name without port', -> co -> KEY = 'TEST_REQUEST_019' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.hostname, 'localhost' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-host': 'localhost1:8888, localhost2:9999' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.hostname, 'localhost1' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator request = TestRequest.new context assert.equal request.hostname, '' yield return describe '#fresh', -> facade = null afterEach -> facade?.remove?() it 'should test request freshness', -> co -> KEY = 'TEST_REQUEST_020' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse Reflect.defineProperty res, '_headers', writable: yes value: 'etag': '"bar"' req = url: 'http://localhost:8888' method: 'GET' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' context = Test::Context.new req, res, switchMediator Reflect.defineProperty context, 'status', writable: yes value: 200 request = TestRequest.new context assert.isFalse request.fresh Reflect.defineProperty res, '_headers', writable: yes value: 'etag': '"foo"' req = url: 'http://localhost:8888' method: 'GET' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' context = Test::Context.new req, res, switchMediator Reflect.defineProperty context, 'status', writable: yes value: 200 request = TestRequest.new context assert.isTrue request.fresh yield return describe '#stale', -> facade = null afterEach -> facade?.remove?() it 'should test inverted request freshness', -> co -> KEY = 'TEST_REQUEST_021' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse Reflect.defineProperty res, '_headers', writable: yes value: 'etag': '"bar"' req = url: 'http://localhost:8888' method: 'GET' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' context = Test::Context.new req, res, switchMediator Reflect.defineProperty context, 'status', writable: yes value: 200 request = TestRequest.new context assert.isTrue request.stale Reflect.defineProperty res, '_headers', writable: yes value: 'etag': '"foo"' req = url: 'http://localhost:8888' method: 'GET' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' context = Test::Context.new req, res, switchMediator Reflect.defineProperty context, 'status', writable: yes value: 200 request = TestRequest.new context assert.isFalse request.stale yield return describe '#idempotent', -> facade = null afterEach -> facade?.remove?() it 'should test if method is idempotent', -> co -> KEY = 'TEST_REQUEST_022' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestRequest extends LeanRC::Request @inheritProtected() @module Test @i