aboutsummaryrefslogtreecommitdiff
path: root/node_modules/koa-range/test
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/koa-range/test
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/koa-range/test')
-rw-r--r--node_modules/koa-range/test/simple.js228
1 files changed, 228 insertions, 0 deletions
diff --git a/node_modules/koa-range/test/simple.js b/node_modules/koa-range/test/simple.js
new file mode 100644
index 00000000..de8feae7
--- /dev/null
+++ b/node_modules/koa-range/test/simple.js
@@ -0,0 +1,228 @@
+
+var fs = require('fs');
+var request = require('supertest');
+var should = require('should');
+var route = require('koa-route');
+var range = require('../');
+var Koa = require('koa');
+var app = new Koa();
+
+var rawbody = new Buffer(1024);
+var rawFileBuffer = fs.readFileSync('./README.md') + '';
+
+app.use(range);
+app.use(route.get('/', async function(ctx) {
+ ctx.body = rawbody;
+}));
+app.use(route.post('/', async function(ctx) {
+ ctx.status = 200;
+}));
+app.use(route.get('/json', async function(ctx) {
+ ctx.body = {foo:'bar'};
+}));
+app.use(route.get('/string', async function(ctx) {
+ ctx.body = 'koa-range';
+}));
+app.use(route.get('/stream', async function(ctx) {
+ ctx.body = fs.createReadStream('./README.md');
+}));
+app.use(route.get('/empty', async function(ctx) {
+ ctx.body = undefined;
+ ctx.status = 304;
+}));
+
+app.on('error', function(err) {
+ throw err;
+});
+
+describe('normal requests', function() {
+
+ it('should return 200 without range', function(done) {
+ request(app.listen())
+ .get('/')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(200)
+ .end(done);
+ });
+
+ it('should return 200 when method not GET', function(done) {
+ request(app.listen())
+ .post('/')
+ .set('range', 'bytes=0-300')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(200)
+ .end(done);
+ });
+
+});
+
+describe('range requests', function() {
+
+ it('should return 206 with partial content', function(done) {
+ request(app.listen())
+ .get('/')
+ .set('range', 'bytes=0-299')
+ .expect('Content-Length', '300')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 0-299/1024')
+ .expect(206)
+ .end(done);
+ });
+
+ it('should return 400 with PUT', function(done) {
+ request(app.listen())
+ .put('/')
+ .set('range', 'bytes=0-299')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(400)
+ .end(done);
+ });
+
+ it('should return 416 with invalid range', function(done) {
+ request(app.listen())
+ .get('/')
+ .set('range', 'bytes=400-300')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(416)
+ .end(done);
+ });
+
+ it('should return 416 with invalid range', function(done) {
+ request(app.listen())
+ .get('/')
+ .set('range', 'bytes=x-300')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(416)
+ .end(done);
+ });
+
+ it('should return 416 with invalid range', function(done) {
+ request(app.listen())
+ .get('/')
+ .set('range', 'bytes=400-x')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(416)
+ .end(done);
+ });
+
+ it('should return 416 with invalid range', function(done) {
+ request(app.listen())
+ .get('/')
+ .set('range', 'bytes')
+ .expect('Accept-Ranges', 'bytes')
+ .expect(416)
+ .end(done);
+ });
+
+});
+
+describe('range requests with stream', function() {
+
+ it('should return 206 with partial content', function(done) {
+ request(app.listen())
+ .get('/stream')
+ .set('range', 'bytes=0-99')
+ .expect('Transfer-Encoding', 'chunked')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 0-99/*')
+ .expect(206)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.equal(rawFileBuffer.slice(0, 100));
+ done();
+ });
+ });
+
+ it('should return 206 with open ended range', function(done) {
+ request(app.listen())
+ .get('/stream')
+ .set('range', 'bytes=0-')
+ .expect('Transfer-Encoding', 'chunked')
+ .expect(200)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.startWith(rawFileBuffer.slice(0, 300));
+ done();
+ });
+ });
+
+});
+
+describe('range requests with json', function() {
+
+ it('should return 206 with partial content', function(done) {
+ request(app.listen())
+ .get('/json')
+ .set('range', 'bytes=0-5')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 0-5/13')
+ .expect('Content-Length', '6')
+ .expect(206)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.equal('{"foo"');
+ done();
+ });
+ });
+
+ it('should return 206 with single byte range', function(done) {
+ request(app.listen())
+ .get('/json')
+ .set('range', 'bytes=2-2')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 2-2/13')
+ .expect('Content-Length', '1')
+ .expect(206)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.equal('f');
+ done();
+ });
+ });
+});
+
+describe('range requests with string', function() {
+
+ it('should return 206 with partial content', function(done) {
+ request(app.listen())
+ .get('/string')
+ .set('range', 'bytes=0-5')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 0-5/9')
+ .expect('Content-Length', '6')
+ .expect(206)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.equal('koa-ra');
+ done();
+ });
+ });
+
+ it('should return 206 with open ended range', function(done) {
+ request(app.listen())
+ .get('/string')
+ .set('range', 'bytes=3-')
+ .expect('Accept-Ranges', 'bytes')
+ .expect('Content-Range', 'bytes 3-8/9')
+ .expect('Content-Length', '6')
+ .expect(206)
+ .end(function(err, res) {
+ should.not.exist(err);
+ res.text.should.equal('-range');
+ done();
+ });
+ });
+});
+
+describe('range requests with empty body', function() {
+ it('should return 304', function(done) {
+ request(app.listen())
+ .get('/empty')
+ .set('range', 'bytes=1-')
+ .expect(304)
+ .end(function(err, res) {
+ should.not.exist(err);
+ done();
+ });
+ });
+});