11const assert = require ( 'assert' ) ;
22
3+ const DummyRequest = require ( '../../../utils/DummyRequest' ) ;
34const DummyRequestLogger = require ( '../../storage/metadata/mongoclient/utils/DummyRequestLogger' ) ;
45const HttpResponseMock = require ( '../../../utils/HttpResponseMock' ) ;
56const routesUtils = require ( '../../../../lib/s3routes/routesUtils' ) ;
@@ -22,32 +23,87 @@ describe('routesUtils.redirectRequest', () => {
2223 const objectKey = '' ;
2324 const redirectLocationHeader = true ;
2425
25- it ( 'should redirect to absolute url' , ( ) => {
26+ it ( 'should redirect to absolute url (path style bucket)' , ( ) => {
27+ const requestMock = new DummyRequest ( {
28+ socket : { encrypted : false } ,
29+ gotBucketNameFromHost : false ,
30+ bucketName : 'test' ,
31+ } ) ;
2632 const responseMock = new HttpResponseMock ( ) ;
2733 const routing = {
2834 redirectLocationHeader,
2935 protocol : 'https' ,
30- hostName : 'scality.com/test ' ,
36+ hostName : 'scality.com' ,
3137 } ;
3238 routesUtils . redirectRequest (
33- routing , objectKey , encrypted , responseMock , hostHeader ,
39+ routing , objectKey , requestMock , responseMock ,
3440 corsHeaders , new DummyRequestLogger ( ) ,
3541 ) ;
3642 assert . strictEqual ( responseMock . statusCode , 301 ) ;
3743 assert . strictEqual ( responseMock . _body , null ) ;
3844 assertCors ( responseMock ) ;
45+ console . log ( { location : responseMock . _headers . Location } )
3946 assert . strictEqual ( responseMock . _headers . Location , 'https://scality.com/test' ) ;
4047 } ) ;
4148
42- it ( 'should redirect to relative url' , ( ) => {
49+ it ( 'should redirect to absolute url (dns style bucket)' , ( ) => {
50+ const requestMock = new DummyRequest ( {
51+ socket : { encrypted : false } ,
52+ gotBucketNameFromHost : true ,
53+ bucketName : 'test' ,
54+ } ) ;
55+ const responseMock = new HttpResponseMock ( ) ;
56+ const routing = {
57+ redirectLocationHeader,
58+ protocol : 'https' ,
59+ hostName : 'test.scality.com' ,
60+ } ;
61+ routesUtils . redirectRequest (
62+ routing , objectKey , requestMock , responseMock ,
63+ corsHeaders , new DummyRequestLogger ( ) ,
64+ ) ; ;
65+ assert . strictEqual ( responseMock . statusCode , 301 ) ;
66+ assert . strictEqual ( responseMock . _body , null ) ;
67+ assertCors ( responseMock ) ;
68+ assert . strictEqual ( responseMock . _headers . Location , 'https://test.scality.com' ) ;
69+ } ) ;
70+
71+ it ( 'should redirect to relative url (path style bucket)' , ( ) => {
72+ const requestMock = new DummyRequest ( {
73+ socket : { encrypted : false } ,
74+ gotBucketNameFromHost : false ,
75+ bucketName : 'test' ,
76+ } ) ;
4377 const responseMock = new HttpResponseMock ( ) ;
4478 const routing = {
4579 redirectLocationHeader,
4680 justPath : true ,
4781 replaceKeyWith : 'testing/redirect.html' ,
4882 } ;
4983 routesUtils . redirectRequest (
50- routing , objectKey , encrypted , responseMock , hostHeader ,
84+ routing , objectKey , requestMock , responseMock ,
85+ corsHeaders , new DummyRequestLogger ( ) ,
86+ ) ;
87+ assert . strictEqual ( responseMock . statusCode , 301 ) ;
88+ assert . strictEqual ( responseMock . _body , null ) ;
89+ assertCors ( responseMock ) ;
90+ assert . strictEqual ( responseMock . _headers . Location , '/test/testing/redirect.html' ) ;
91+ } ) ;
92+
93+ it ( 'should redirect to relative url (dns style bucket)' , ( ) => {
94+ const requestMock = new DummyRequest ( {
95+ socket : { encrypted : false } ,
96+ gotBucketNameFromHost : true ,
97+ bucketName : 'test' ,
98+ } ) ;
99+ const responseMock = new HttpResponseMock ( ) ;
100+ const routing = {
101+ redirectLocationHeader,
102+ justPath : true ,
103+ replaceKeyWith : 'testing/redirect.html' ,
104+ } ;
105+ routesUtils . redirectRequest (
106+ routing , objectKey , requestMock , responseMock ,
51107 corsHeaders , new DummyRequestLogger ( ) ,
52108 ) ;
53109 assert . strictEqual ( responseMock . statusCode , 301 ) ;
@@ -56,7 +112,35 @@ describe('routesUtils.redirectRequest', () => {
56112 assert . strictEqual ( responseMock . _headers . Location , '/testing/redirect.html' ) ;
57113 } ) ;
58114
59- it ( 'should redirect to root /' , ( ) => {
115+ it ( 'should redirect to root / (path style bucket)' , ( ) => {
116+ const requestMock = new DummyRequest ( {
117+ socket : { encrypted : false } ,
118+ gotBucketNameFromHost : false ,
119+ bucketName : 'test' ,
120+ } ) ;
121+ const responseMock = new HttpResponseMock ( ) ;
122+ const routing = {
123+ redirectLocationHeader,
124+ justPath : true ,
125+ // cloudserver removes the /, arsenal puts it back
126+ replaceKeyWith : '' ,
127+ } ;
128+ routesUtils . redirectRequest (
129+ routing , objectKey , requestMock , responseMock ,
130+ corsHeaders , new DummyRequestLogger ( ) ,
131+ ) ;
132+ assert . strictEqual ( responseMock . statusCode , 301 ) ;
133+ assert . strictEqual ( responseMock . _body , null ) ;
134+ assertCors ( responseMock ) ;
135+ assert . strictEqual ( responseMock . _headers . Location , '/test' ) ;
136+ } ) ;
137+
138+ it ( 'should redirect to root / (dns style bucket)' , ( ) => {
139+ const requestMock = new DummyRequest ( {
140+ socket : { encrypted : false } ,
141+ gotBucketNameFromHost : true ,
142+ bucketName : 'test' ,
143+ } ) ;
60144 const responseMock = new HttpResponseMock ( ) ;
61145 const routing = {
62146 redirectLocationHeader,
@@ -65,7 +149,7 @@ describe('routesUtils.redirectRequest', () => {
65149 replaceKeyWith : '' ,
66150 } ;
67151 routesUtils . redirectRequest (
68- routing , objectKey , encrypted , responseMock , hostHeader ,
152+ routing , objectKey , requestMock , responseMock ,
69153 corsHeaders , new DummyRequestLogger ( ) ,
70154 ) ;
71155 assert . strictEqual ( responseMock . statusCode , 301 ) ;
0 commit comments