@leansdk/leanrc
Version:
LeanRC is a MVC framework for creating graceful applications
1,294 lines (1,292 loc) • 129 kB
text/coffeescript
{ 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