Commit 71f4dca9 authored by Tristan Cavelier's avatar Tristan Cavelier

Merge remote-tracking branch 'origin/master' into queries

parents 921c87d1 bd7e841b
...@@ -56,6 +56,10 @@ uglify: ...@@ -56,6 +56,10 @@ uglify:
lint: lint:
$(LINT_CMD) $(LINT_FILES) $(LINT_CMD) $(LINT_FILES)
phantom:
~/node_modules/phantomjs/bin/phantomjs test/run-qunit.js test/jiotests_withoutrequirejs.html | awk 'BEGIN {print "<!DOCTYPE html><html>"} /^<head>$$/, /^<\/body>$$/ {print} END {print "</html>"}' | sed -e 's,^ *<\(/\|\)script.*>$$,,g' > test/unit_test_result.html
grep '^ <title>✔ ' test/unit_test_result.html > /dev/null
.phony: clean .phony: clean
clean: clean:
find -name '*~' -delete find -name '*~' -delete
......
...@@ -2215,7 +2215,7 @@ var jobRules = (function () { ...@@ -2215,7 +2215,7 @@ var jobRules = (function () {
that.sameAttachmentId that.sameAttachmentId
], that.wait); ], that.wait);
that.addActionRule("removeAttachment", "remove", that.addActionRule("removeAttachment", "remove",
[that.sameDocumentId, that.sameRevision], that.update); [that.sameDocumentId, that.sameRevision], that.wait);
that.addActionRule("removeAttachment", "removeAttachment", that.addActionRule("removeAttachment", "removeAttachment",
[that.sameDocument], that.update); [that.sameDocument], that.update);
that.addActionRule("removeAttachment", "removeAttachment", [ that.addActionRule("removeAttachment", "removeAttachment", [
......
...@@ -15,8 +15,6 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -15,8 +15,6 @@ jIO.addStorageType("s3", function (spec, my) {
priv.AWSIdentifier = spec.AWSIdentifier || ''; priv.AWSIdentifier = spec.AWSIdentifier || '';
priv.password = spec.password || ''; priv.password = spec.password || '';
priv.server = spec.server || ''; /*|| jiobucket ||*/ priv.server = spec.server || ''; /*|| jiobucket ||*/
priv.url = spec.url || ''; /*||> https://s3-eu-west-1.amazonaws.com <||*/
priv.acl = spec.acl || ''; priv.acl = spec.acl || '';
/*||> "private, /*||> "private,
...@@ -194,7 +192,6 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -194,7 +192,6 @@ jIO.addStorageType("s3", function (spec, my) {
return { return {
"username": priv.username, "username": priv.username,
"password": priv.password, "password": priv.password,
"url": priv.url,
"server": priv.server, "server": priv.server,
"acl": priv.acl "acl": priv.acl
}; };
...@@ -210,9 +207,6 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -210,9 +207,6 @@ jIO.addStorageType("s3", function (spec, my) {
if (typeof priv.password === "string" && priv.password === '') { if (typeof priv.password === "string" && priv.password === '') {
return 'Need at least one parameter "password".'; return 'Need at least one parameter "password".';
} }
if (typeof priv.url === "string" && priv.url === '') {
return 'Need at least one parameter "url".';
}
if (typeof priv.server === "string" && priv.server === '') { if (typeof priv.server === "string" && priv.server === '') {
return 'Need at least one parameter "server".'; return 'Need at least one parameter "server".';
} }
...@@ -415,9 +409,7 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -415,9 +409,7 @@ jIO.addStorageType("s3", function (spec, my) {
doc = JSON.stringify(doc); doc = JSON.stringify(doc);
break; break;
case "update": case "update":
console.log(doc._attachments);
doc._attachments[attachid] = data; doc._attachments[attachid] = data;
console.log(doc._attachments);
//update happened in the put request //update happened in the put request
doc = JSON.stringify(doc); doc = JSON.stringify(doc);
break; break;
...@@ -529,7 +521,7 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -529,7 +521,7 @@ jIO.addStorageType("s3", function (spec, my) {
**/ **/
that.post = function (command) { that.post = function (command) {
//as S3 encoding key are directly inserted within the FormData(), //as S3 encoding key are directly inserted within the FormData(),
//use of XHRwrapper function ain't pertinent //use of XHRwrapper function ain't pertinent
var doc, doc_id, mime; var doc, doc_id, mime;
...@@ -539,7 +531,7 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -539,7 +531,7 @@ jIO.addStorageType("s3", function (spec, my) {
function postDocument() { function postDocument() {
var http_response, fd, Signature, xhr; var http_response, fd, Signature, xhr;
doc_id = priv.secureName(priv.idsToFileName(doc_id)); doc_id = priv.secureName(priv.idsToFileName(doc_id));
//Meant to deep-serialize in order to avoid //Meant to deep-serialize in order to avoid
//conflicts due to the multipart enctype //conflicts due to the multipart enctype
doc = JSON.stringify(doc); doc = JSON.stringify(doc);
http_response = ''; http_response = '';
...@@ -872,9 +864,12 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -872,9 +864,12 @@ jIO.addStorageType("s3", function (spec, my) {
requestUTC, requestUTC,
parse, parse,
checkCounter; checkCounter;
keys = $(mon_document).find('Key'); keys = $(mon_document).find('Key');
resultTable = []; resultTable = [];
counter = 0; counter = 0;
keys.each(function (index) { keys.each(function (index) {
var that, filename, docId; var that, filename, docId;
that = $(this); that = $(this);
...@@ -899,6 +894,7 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -899,6 +894,7 @@ jIO.addStorageType("s3", function (spec, my) {
//needed to save the index within the $.ajax.success() callback //needed to save the index within the $.ajax.success() callback
count = resultTable.length - 1; count = resultTable.length - 1;
countB = 0; countB = 0;
dealCallback = function (i, countB, allDoc) { dealCallback = function (i, countB, allDoc) {
return function (doc, statustext, response) { return function (doc, statustext, response) {
allDoc.rows[i].doc = response.responseText; allDoc.rows[i].doc = response.responseText;
...@@ -925,13 +921,16 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -925,13 +921,16 @@ jIO.addStorageType("s3", function (spec, my) {
}; };
i = resultTable.length - 1; i = resultTable.length - 1;
if (command.getOption("include_docs") === true) { if (command.getOption("include_docs") === true) {
for (i; i >= 0; i -= 1) { for (i; i >= 0; i -= 1) {
keyId = resultTable[i]; keyId = resultTable[i];
Signature = that.encodeAuthorization(keyId); Signature = that.encodeAuthorization(keyId);
callURL = priv.url + keyId; callURL = 'http://' + priv.server + '.s3.amazonaws.com/' + keyId;
requestUTC = new Date().toUTCString(); requestUTC = new Date().toUTCString();
parse = true; parse = true;
allDocResponse.rows[i] = { allDocResponse.rows[i] = {
"id": priv.fileNameToIds(keyId).join(), "id": priv.fileNameToIds(keyId).join(),
"key": keyId, "key": keyId,
...@@ -950,7 +949,6 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -950,7 +949,6 @@ jIO.addStorageType("s3", function (spec, my) {
+ priv.AWSIdentifier + priv.AWSIdentifier
+ ":" + ":"
+ Signature, + Signature,
//'Host' : priv.url,
'x-amz-date' : requestUTC, 'x-amz-date' : requestUTC,
'Content-Type' : 'application/json' 'Content-Type' : 'application/json'
//'Content-MD5' : '' //'Content-MD5' : ''
...@@ -991,46 +989,3 @@ jIO.addStorageType("s3", function (spec, my) { ...@@ -991,46 +989,3 @@ jIO.addStorageType("s3", function (spec, my) {
}; };
return that; return that;
}); });
/*
// It is not possible to attach listeners to xhr level 2 events
// AND validate the Qunit tests through sinon.js
// therefore, below methods are deprecated
var S3specifics = {};
S3specifics.uploadProgress = function(evt){
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
console.log(percentComplete.toString() + '%');
} else {
console.log('Unable to compute.');
}
};
S3specifics.uploadComplete = function(evt){
var evt_txt = evt.target.responseText;
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(evt_txt, "text/xml");
var responseURL = $(xmlDoc.getElementsByTagName('Location'))[0].text();
console.log(responseURL);
};
S3specifics.uploadFailed = function(evt){
var evt_txt = evt.target.responseText;
console.log("Erreur lors de la tentative d'upload : " + evt_txt);
};
S3specifics.uploadCanceled = function(evt){
console.log("Upload annulé par l'utilisateur ou le navigateur.");
};
S3specifics.onReadyStateChange = function(req, those, that) {
if (req.readyState === 4 && those.status === 200){
that.success({
ok: true,
id: command.getDocId()
});
}
};
*/
...@@ -326,7 +326,7 @@ var jobRules = (function () { ...@@ -326,7 +326,7 @@ var jobRules = (function () {
that.sameAttachmentId that.sameAttachmentId
], that.wait); ], that.wait);
that.addActionRule("removeAttachment", "remove", that.addActionRule("removeAttachment", "remove",
[that.sameDocumentId, that.sameRevision], that.update); [that.sameDocumentId, that.sameRevision], that.wait);
that.addActionRule("removeAttachment", "removeAttachment", that.addActionRule("removeAttachment", "removeAttachment",
[that.sameDocument], that.update); [that.sameDocument], that.update);
that.addActionRule("removeAttachment", "removeAttachment", [ that.addActionRule("removeAttachment", "removeAttachment", [
......
This diff is collapsed.
/*jslint indent: 2, maxlen: 80 */
/*global require: true, phantom: true, document: true */
"use strict";
var system = require('system'); var system = require('system');
/** /**
* Wait until the test condition is true or a timeout occurs. Useful for waiting * Wait until the test condition is true or a timeout occurs. Useful for waiting
* on a server response or for a ui change (fadeIn, etc.) to occur. * on a server response or for a ui change (fadeIn, etc.) to occur.
* *
* @param testFx javascript condition that evaluates to a boolean, * @method waitFor
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or * @param {Function} testFx Condition that evaluates to a boolean
* as a callback function. * @param {Function} onReady What to do when testFx condition is fulfilled
* @param onReady what to do when testFx condition is fulfilled, * @param {Number} time_out_millis The max amount of time to wait.
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or * If not specified, 10 sec is used.
* as a callback function.
* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
*/ */
function waitFor(testFx, onReady, timeOutMillis) { function waitFor(testFx, onReady, time_out_millis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s var maxtime_out_millis, start, condition, interval;
start = new Date().getTime(), maxtime_out_millis = time_out_millis || 10001;
condition = false, start = new Date().getTime();
interval = setInterval(function() { condition = false;
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) { interval = setInterval(function () {
// If not time-out yet and condition not yet fulfilled if ((new Date().getTime() - start < maxtime_out_millis) && !condition) {
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code // If not time-out yet and condition not yet fulfilled
} else { condition = testFx();
if(!condition) { } else {
// If condition still not fulfilled (timeout but condition is 'false') if (!condition) {
console.log("'waitFor()' timeout"); // If condition still not fulfilled (timeout but condition is 'false')
phantom.exit(1); console.log("'waitFor()' timeout");
} else { phantom.exit(1);
// Condition fulfilled (timeout and/or condition is 'true') } else {
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); // Condition fulfilled (timeout and/or condition is 'true')
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled console.log("'waitFor()' finished in " +
clearInterval(interval); //< Stop this interval (new Date().getTime() - start) + "ms.");
} onReady();
} clearInterval(interval); //< Stop this interval
}, 100); //< repeat check every 250ms }
}; }
}, 100); //< repeat check every 100ms
}
if (system.args.length !== 2) { if (system.args.length !== 2) {
console.log('Usage: run-qunit.js URL'); console.log('Usage: run-qunit.js URL');
phantom.exit(1); phantom.exit(1);
} }
var page = require('webpage').create(); var page = require('webpage').create();
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") // Route "console.log()" calls from within the Page context to the main Phantom
page.onConsoleMessage = function(msg) { // context (i.e. current "this")
console.log(msg); page.onConsoleMessage = function (msg) {
console.log(msg);
}; };
page.open(system.args[1], function(status){ page.open(system.args[1], function (status) {
if (status !== "success") { if (status !== "success") {
console.log("Unable to access network"); console.log("Unable to access network");
phantom.exit(1); phantom.exit(1);
} else { }
waitFor(function(){ waitFor(function () {
return page.evaluate(function(){ return page.evaluate(function () {
var el = document.getElementById('qunit-testresult'); var el = document.getElementById('qunit-testresult');
if (el && el.innerText.match('completed')) { if (el && el.innerText.match('completed')) {
return true; return true;
} }
return false; return false;
}); });
}, function(){ }, function () {
var failedNum = page.evaluate(function(){ var failedNum = page.evaluate(function () {
console.log("========================================================") console.log("========================================================");
console.log(document.documentElement.innerHTML); console.log(document.documentElement.innerHTML);
console.log("========================================================") console.log("========================================================");
var el = document.getElementById('qunit-testresult'); var el = document.getElementById('qunit-testresult');
console.log(el.innerText); console.log(el.innerText);
try { try {
return el.getElementsByClassName('failed')[0].innerHTML; return el.getElementsByClassName('failed')[0].innerHTML;
} catch (e) { } } catch (e) { }
return 10000; return 10000;
}); });
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0); phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
}); });
}
}); });
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment