UNPKG

@leansdk/leanrc

Version:

LeanRC is a MVC framework for creating graceful applications

1,294 lines (1,292 loc) 129 kB
{ Readable } = require 'stream' EventEmitter = require 'events' { expect, assert } = require 'chai' sinon = require 'sinon' _ = require 'lodash' # accepts = require 'accepts' httpErrors = require 'http-errors' LeanRC = require.main.require 'lib' { co } = LeanRC::Utils describe 'Context', -> describe '.new', -> facade = null afterEach -> facade?.remove?() it 'should create Context instance', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.instanceOf context, TestContext assert.equal context.req, req assert.equal context.res, res assert.equal context.switch, switchMediator assert.instanceOf context.request, Test::Request assert.instanceOf context.response, Test::Response assert.instanceOf context.cookies, Test::Cookies assert.deepEqual context.state, {} yield return describe '#throw', -> facade = null afterEach -> facade?.remove?() it 'should throw an error exception', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.throws -> context.throw 404 , httpErrors.HttpError assert.throws -> context.throw 501, 'Not Implemented' , httpErrors.HttpError yield return describe '#assert', -> facade = null afterEach -> facade?.remove?() it 'should assert with status codes', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.doesNotThrow -> context.assert yes assert.throws -> context.assert 'test' is 'TEST', 500, 'Internal Error' , Error yield return describe '#header', -> facade = null afterEach -> facade?.remove?() it 'should get request header', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.header, req.headers yield return describe '#headers', -> facade = null afterEach -> facade?.remove?() it 'should get request headers', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.headers, req.headers yield return describe '#method', -> facade = null afterEach -> facade?.remove?() it 'should get and set request method', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.method, 'POST' context.method = 'PUT' assert.equal context.method, 'PUT' assert.equal req.method, 'PUT' yield return describe '#url', -> facade = null afterEach -> facade?.remove?() it 'should get and set request URL', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.url, 'http://localhost:8888/test1' context.url = 'http://localhost:8888/test2' assert.equal context.url, 'http://localhost:8888/test2' assert.equal req.url, 'http://localhost:8888/test2' yield return describe '#originalUrl', -> facade = null afterEach -> facade?.remove?() it 'should get original request URL', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.originalUrl, 'http://localhost:8888/test1' yield return describe '#origin', -> facade = null afterEach -> facade?.remove?() it 'should get request origin data', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:8888' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1' # headers: # 'x-forwarded-for': '192.168.0.1' # 'host': 'localhost:8888' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.origin, 'http://localhost:8888' req.secure = yes assert.equal context.origin, 'https://localhost:8888' yield return describe '#href', -> facade = null afterEach -> facade?.remove?() it 'should get request hyper reference', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: '/test1' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:8888' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: '/test1' # headers: # 'x-forwarded-for': '192.168.0.1' # 'host': 'localhost:8888' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.href, 'http://localhost:8888/test1' req.url = 'http://localhost1:9999/test2' context = TestContext.new req, res, switchMediator assert.equal context.href, 'http://localhost1:9999/test2' yield return describe '#path', -> facade = null afterEach -> facade?.remove?() it 'should get and set request path', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1?t=ttt' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1?t=ttt' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.path, '/test1' context.path = '/test2' assert.equal context.path, '/test2' assert.equal req.url, 'http://localhost:8888/test2?t=ttt' yield return describe '#query', -> facade = null afterEach -> facade?.remove?() it 'should get and set request query object', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1?t=ttt' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1?t=ttt' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.deepEqual context.query, t: 'ttt' context.query = a: 'aaa' assert.deepEqual context.query, a: 'aaa' assert.equal req.url, 'http://localhost:8888/test1?a=aaa' yield return describe '#querystring', -> facade = null afterEach -> facade?.remove?() it 'should get and set request query string', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = method: 'POST' url: 'http://localhost:8888/test1?t=ttt' headers: 'x-forwarded-for': '192.168.0.1' secure: no # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'POST' # url: 'http://localhost:8888/test1?t=ttt' # headers: 'x-forwarded-for': '192.168.0.1' # secure: no # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.querystring, 't=ttt' context.querystring = 'a=aaa' assert.equal context.querystring, 'a=aaa' assert.equal req.url, 'http://localhost:8888/test1?a=aaa' yield return describe '#host', -> facade = null afterEach -> facade?.remove?() it 'should get request host', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:9999' # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # headers: # 'x-forwarded-for': '192.168.0.1' # 'host': 'localhost:9999' # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.host, 'localhost:9999' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-host': 'localhost:8888, localhost:9999' context = TestContext.new req, res, switchMediator assert.equal context.host, 'localhost:8888' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = TestContext.new req, res, switchMediator assert.equal context.host, '' yield return describe '#hostname', -> facade = null afterEach -> facade?.remove?() it 'should get request host name', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'host': 'localhost:9999' # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # headers: # 'x-forwarded-for': '192.168.0.1' # 'host': 'localhost:9999' # res = # _headers: 'Foo': 'Bar' context = TestContext.new req, res, switchMediator assert.equal context.hostname, 'localhost' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'x-forwarded-host': 'localhost1:8888, localhost:9999' context = TestContext.new req, res, switchMediator assert.equal context.hostname, 'localhost1' req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = TestContext.new req, res, switchMediator assert.equal context.hostname, '' yield return describe '#fresh', -> facade = null afterEach -> facade?.remove?() it 'should test request freshness', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'etag': '"bar"'} res = new MyResponse req = method: 'GET' url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'GET' # headers: # 'x-forwarded-for': '192.168.0.1' # 'if-none-match': '"foo"' # res = # _headers: 'etag': '"bar"' context = TestContext.new req, res, switchMediator context.status = 200 assert.isFalse context.fresh req = method: 'GET' url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' res._headers = 'etag': '"foo"' context = TestContext.new req, res, switchMediator context.status = 200 assert.isTrue context.fresh yield return describe '#stale', -> facade = null afterEach -> facade?.remove?() it 'should test request non-freshness', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {'etag': '"bar"'} res = new MyResponse req = method: 'GET' url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # method: 'GET' # headers: # 'x-forwarded-for': '192.168.0.1' # 'if-none-match': '"foo"' # res = # _headers: 'etag': '"bar"' context = TestContext.new req, res, switchMediator context.status = 200 assert.isTrue context.stale req = method: 'GET' url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' 'if-none-match': '"foo"' res._headers = 'etag': '"foo"' context = TestContext.new req, res, switchMediator context.status = 200 assert.isFalse context.stale yield return describe '#socket', -> facade = null afterEach -> facade?.remove?() it 'should get request socket', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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: {} # switchInstance = # configs: # trustProxy: yes # cookieKey: 'COOKIE_KEY' # req = # headers: # 'x-forwarded-for': '192.168.0.1' # socket: {} # res = _headers: {} context = TestContext.new req, res, switchMediator assert.equal context.socket, req.socket yield return describe '#protocol', -> facade = null afterEach -> facade?.remove?() it 'should get request protocol', -> co -> KEY = 'TEST_CONTEXT_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 TestContext extends LeanRC::Context @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' # switchInstance = # configs: # trustProxy: no # cookieKey: 'COOKIE_KEY' # req = # url: 'http://localhost:8888' # headers: 'x-forwarded-for': '192.168.0.1' # res = _headers: {} Reflect.defineProperty switchMediator, 'configs', writable: yes value: trustProxy: no context = TestContext.new req, res, switchMediator assert.equal context.protocol, 'http' Reflect.defineProperty switchMediator, 'configs', writable: yes value: trustProxy: yes context = TestContext.new req, res, switchMediator assert.equal context.protocol, 'http' req.socket = encrypted: yes context = TestContext.new req, res, switchMediator assert.equal context.protocol, 'https' delete req.socket req.secure = yes context = TestContext.new req, res, switchMediator assert.equal context.protocol, 'https' delete req.secure req.headers['x-forwarded-proto'] = 'https' context = TestContext.new req, res