The REST API now supports the If-Modified-Since, If-Unmodified-Since, If-Match and If-None-Match headers and returns the correct response if the conditional fails. Added tests for the date parsing and expanded the HTTP header tests in the REST API test suite.
127 lines
4.6 KiB
JavaScript
127 lines
4.6 KiB
JavaScript
require("../utils.js")()
|
|
|
|
|
|
describe("HTTP Headers", function() {
|
|
before(startMaxScale)
|
|
|
|
it("ETag changes after modification", function() {
|
|
return request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
|
.then(function(resp) {
|
|
resp.headers.etag.should.be.equal("\"0\"")
|
|
var srv = JSON.parse(resp.body)
|
|
delete srv.data.relationships
|
|
return request.put(base_url + "/servers/server1", {json: srv})
|
|
})
|
|
.then(function() {
|
|
return request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
|
})
|
|
.then(function(resp) {
|
|
resp.headers.etag.should.be.equal("\"1\"")
|
|
})
|
|
});
|
|
|
|
it("Last-Modified changes after modification", function(done) {
|
|
var date;
|
|
|
|
request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
|
.then(function(resp) {
|
|
|
|
// Store the current modification time
|
|
resp.headers["last-modified"].should.not.be.null
|
|
date = resp.headers["last-modified"]
|
|
|
|
// Modify resource after three seconds
|
|
setTimeout(function() {
|
|
var srv = JSON.parse(resp.body)
|
|
|
|
srv.data.relationships = {
|
|
services: {
|
|
data: [
|
|
{id: "RW-Split-Router", type: "services"}
|
|
]
|
|
}
|
|
}
|
|
|
|
request.put(base_url + "/servers/server1", {json: srv})
|
|
.then(function() {
|
|
return request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
|
})
|
|
.then(function(resp) {
|
|
resp.headers["last-modified"].should.not.be.null
|
|
resp.headers["last-modified"].should.not.be.equal(date)
|
|
done()
|
|
})
|
|
.catch(function(e) {
|
|
done(e)
|
|
})
|
|
|
|
}, 2000)
|
|
})
|
|
.catch(function(e) {
|
|
done(e)
|
|
})
|
|
});
|
|
|
|
var oldtime = new Date(new Date().getTime() - 1000000).toUTCString();
|
|
var newtime = new Date(new Date().getTime() + 1000000).toUTCString();
|
|
|
|
it("request with older If-Modified-Since value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-Modified-Since": oldtime}
|
|
}).should.be.fulfilled
|
|
})
|
|
|
|
it("request with newer If-Modified-Since value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
resolveWithFullResponse: true,
|
|
headers: { "If-Modified-Since": newtime }
|
|
}).should.be.rejected
|
|
})
|
|
|
|
it("request with older If-Unmodified-Since value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-Unmodified-Since": oldtime}
|
|
}).should.be.rejected
|
|
})
|
|
|
|
it("request with newer If-Unmodified-Since value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-Unmodified-Since": newtime}
|
|
}).should.be.fulfilled
|
|
})
|
|
|
|
it("request with mismatching If-Match value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-Match": "\"0\""}
|
|
}).should.be.rejected
|
|
})
|
|
|
|
it("request with matching If-Match value", function() {
|
|
return request.get(base_url + "/servers/server1", { resolveWithFullResponse: true })
|
|
.then(function(resp) {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-Match": resp.headers["etag"]}
|
|
})
|
|
})
|
|
.should.be.fulfilled
|
|
})
|
|
|
|
it("request with mismatching If-None-Match value", function() {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-None-Match": "\"0\""}
|
|
}).should.be.fulfilled
|
|
})
|
|
|
|
it("request with matching If-None-Match value", function() {
|
|
return request.get(base_url + "/servers/server1", { resolveWithFullResponse: true })
|
|
.then(function(resp) {
|
|
return request.get(base_url + "/servers/server1", {
|
|
headers: { "If-None-Match": resp.headers["etag"]}
|
|
})
|
|
})
|
|
.should.be.rejected
|
|
})
|
|
|
|
after(stopMaxScale)
|
|
});
|