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