swift/test/cors/test-symlink.js

140 lines
5.5 KiB
JavaScript

import {
runTests,
MakeRequest,
HasStatus,
HasHeaders,
HasCommonResponseHeaders,
DoesNotHaveHeaders,
HasNoBody,
CorsBlocked,
Skip
} from './harness.js'
import { GetClusterInfo } from './test-info.js'
function MakeSymlinkRequest () {
return GetClusterInfo.then((clusterInfo) => {
if (!('symlink' in clusterInfo)) {
throw new Skip('Symlink is not enabled')
}
return MakeRequest(...arguments)
})
}
runTests('symlink', [
['GET link to no CORS',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-no-cors')
.then(CorsBlocked)],
['HEAD link to no CORS',
() => MakeSymlinkRequest('HEAD', 'public-with-cors/symlink-to-public-no-cors')
.then(CorsBlocked)],
['GET Range link to no CORS',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-no-cors', { Range: 'bytes=100-199' })
.then(CorsBlocked)], // But preflight *succeeded*!
['GET link with CORS',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors')
.then(HasStatus(200, 'OK'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'application/octet-stream',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then((resp) => {
if (resp.responseText.length !== 1024) {
throw new Error('Expected body to have length 1024, got ' + resp.responseText.length)
}
})],
['HEAD link with CORS',
() => MakeSymlinkRequest('HEAD', 'public-with-cors/symlink-to-public-with-cors')
.then(HasStatus(200, 'OK'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'application/octet-stream',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then(HasNoBody)],
['GET Range link with CORS',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors', { Range: 'bytes=100-199' })
.then(HasStatus(206, 'Partial Content'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'application/octet-stream',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then((resp) => {
if (resp.responseText.length !== 100) {
throw new Error('Expected body to have length 100, got ' + resp.responseText.length)
}
})],
['GET private',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-private')
.then(CorsBlocked)], // TODO: maybe should be Unauthorized?
['HEAD private',
() => MakeSymlinkRequest('HEAD', 'public-with-cors/symlink-to-private')
.then(CorsBlocked)], // TODO: maybe should be Unauthorized?
['GET private Range',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-private', { Range: 'bytes=100-199' })
.then(CorsBlocked)], // TODO: maybe should be Unauthorized?
['GET If-Match matching',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors', { 'If-Match': '0f343b0931126a20f133d67c2b018a3b' })
.then(HasStatus(200, 'OK'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'application/octet-stream',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then((resp) => {
if (resp.responseText.length !== 1024) {
throw new Error('Expected body to have length 1024, got ' + resp.responseText.length)
}
})],
['GET If-Match not matching',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors', { 'If-Match': 'something-else' })
.then(HasStatus(412, 'Precondition Failed'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'text/html; charset=UTF-8',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then(HasNoBody)],
['GET If-None-Match matching',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors', { 'If-None-Match': '0f343b0931126a20f133d67c2b018a3b' })
.then(HasStatus(304, 'Not Modified'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
// Content-Type can vary depending on storage policy type...
// 'Content-Type': 'text/html; charset=UTF-8',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['Content-Type', 'X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then(HasNoBody)],
['GET If-None-Match not matching',
() => MakeSymlinkRequest('GET', 'public-with-cors/symlink-to-public-with-cors', { 'If-None-Match': 'something-else' })
.then(HasStatus(200, 'OK'))
.then(HasCommonResponseHeaders)
.then(HasHeaders({
'Content-Type': 'application/octet-stream',
Etag: '0f343b0931126a20f133d67c2b018a3b'
}))
.then(HasHeaders(['X-Object-Meta-Mtime']))
.then(DoesNotHaveHeaders(['Content-Location']))
.then((resp) => {
if (resp.responseText.length !== 1024) {
throw new Error('Expected body to have length 1024, got ' + resp.responseText.length)
}
})]
])