updated tests to be compatible with the limited api version available in the browser_client, and updated grunt-saucelabs

This commit is contained in:
Spencer Alger
2014-07-29 23:04:54 -07:00
parent 017a554683
commit 0e05b0f0a1
4 changed files with 128 additions and 64 deletions

View File

@ -33,41 +33,41 @@
"default_api_branch": "1.3" "default_api_branch": "1.3"
}, },
"devDependencies": { "devDependencies": {
"mocha": "^1.21",
"async": "~0.8.0",
"moment": "~2.4.0",
"js-yaml": "~2.1.3",
"optimist": "~0.6.0",
"browserify": "~2.35.1",
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.7.1",
"grunt-browserify": "~1.2.11",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-concat": "~0.3.0",
"xmlbuilder": "~0.4.3",
"grunt-contrib-watch": "~0.5.3",
"mocha-lcov-reporter": "0.0.1",
"blanket": "~1.1.5",
"sinon": "~1.7.3",
"nock": "~0.28.1",
"open": "0.0.4",
"load-grunt-tasks": "~0.2.0",
"load-grunt-config": "~0.7.0",
"grunt-s3": "~0.2.0-alpha.3",
"grunt-run": "~0.2.2",
"grunt-contrib-compress": "~0.5.3",
"grunt-contrib-copy": "~0.4.1",
"grunt-prompt": "~0.1.2",
"grunt-mocha-cov": "~0.2.0",
"grunt-open": "~0.2.2",
"glob": "~3.2.7",
"expect.js": "~0.2.0",
"aliasify": "~1.2.4", "aliasify": "~1.2.4",
"async": "~0.8.0",
"blanket": "~1.1.5",
"browserify": "~2.35.1",
"event-stream": "~3.1.0",
"expect.js": "~0.2.0",
"express": "~3.4.7", "express": "~3.4.7",
"find-root": "~0.1.1", "find-root": "~0.1.1",
"event-stream": "~3.1.0", "glob": "~3.2.7",
"grunt-saucelabs": "~5.1.0" "grunt": "~0.4.1",
"grunt-browserify": "~1.2.11",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-compress": "~0.5.3",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.7.1",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-watch": "~0.5.3",
"grunt-mocha-cov": "~0.2.0",
"grunt-open": "~0.2.2",
"grunt-prompt": "~0.1.2",
"grunt-run": "~0.2.2",
"grunt-s3": "~0.2.0-alpha.3",
"grunt-saucelabs": "~8.2.0",
"js-yaml": "~2.1.3",
"load-grunt-config": "~0.7.0",
"load-grunt-tasks": "~0.2.0",
"mocha": "^1.21",
"mocha-lcov-reporter": "0.0.1",
"moment": "~2.4.0",
"nock": "~0.28.1",
"open": "0.0.4",
"optimist": "~0.6.0",
"sinon": "~1.7.3",
"xmlbuilder": "~0.4.3"
}, },
"license": "Apache 2.0", "license": "Apache 2.0",
"dependencies": { "dependencies": {

View File

@ -17,9 +17,34 @@
</script> </script>
<script src="unit_tests.js"></script> <script src="unit_tests.js"></script>
<script> <script>
mochaRunner = mocha.run().on('end', function(){ (function (root) {
window.mochaResults = this.stats; var failedTests = [];
});
var flattenTitles = function (test) {
var titles = [];
while (test && test.parent && test.parent.title) {
titles.unshift(test.parent.title);
test = test.parent
}
return titles;
};
var runner = root.mochaRunner = mocha.run()
.on('end', function(){
window.mochaResults = runner.stats;
window.mochaResults.reports = failedTests;
})
.on('fail', function logFailure(test, err){
failedTests.push({
name: test.title,
result: false,
message: err.message,
stack: err.stack,
titles: flattenTitles(test)
});
});
}(window));
</script> </script>
</body> </body>
</html> </html>

View File

@ -23,6 +23,13 @@ var ES_VERSION = null;
// core expression for finding a version // core expression for finding a version
var versionExp = '([\\d\\.]*\\d)(?:\\.\\w+)?'; var versionExp = '([\\d\\.]*\\d)(?:\\.\\w+)?';
// match all whitespace within a "regexp" match arg
var reWhitespace_RE = /\s+/g;
// match all comments within a "regexp" match arg
var reComments_RE = /([\S\s]?)#[^\n]*\n/g;
/** /**
* Regular Expression to extract a version number from a string * Regular Expression to extract a version number from a string
* @type {RegExp} * @type {RegExp}
@ -468,36 +475,68 @@ YamlDoc.prototype = {
}, },
/** /**
* Test that the response field (arg key) matches the value specified * Test that the response field (arg key) matches the value specified.
*
* @param {Object} args - Args can be specified in a number of formats:
*
* object{ <path>: <string|number|obj> }
* - used to match simple values against properties of the last response body
* - keys are "paths" to values in the previous response
* - values are what they should match
* example:
* resp:
* {
* hits: {
* total: 100,
* hits: [ ... ]
* }
* }
* args:
* {
* "hits.total": 100,
* }
*
*
* object{ <path>: <RegExp> }
* - regexp is expressed as a string that starts and ends with a /
* - we have to make several replacements on the string before converting
* it into a regexp because javascript doesn't support the "verbose" mode
* they are written for.
* *
* @param {Object} args - Hash of fields->values that need to be checked
* @return {undefined} * @return {undefined}
*/ */
do_match: function (args) { do_match: function (args) {
var self = this;
// recursively replace all $var within args
_.forOwn(args, function recurse(val, key, lvl) {
if (_.isObject(val)) {
return _.each(val, recurse);
}
if (_.isString(val) && val[0] === '$') {
lvl[key] = self.get(val);
}
});
_.forOwn(args, function (match, path) { _.forOwn(args, function (match, path) {
var matchPastRef = _.isString(match) && match[0] === '$'; var origMatch = match;
if (matchPastRef) {
// we are trying to match against a value stored in the stack
match = this.get(match);
}
if (_.isObject(match)) { var maybeRE = false;
var self = this;
// we need to check all sub values for $var
_.each(match, function recurse(val, key, lvl) {
if (_.isObject(val)) {
return _.each(val, recurse);
}
if (_.isString(val) && val[0] === '$') {
lvl[key] = self.get(val);
}
});
}
var notRE = match;
var maybeRE = _.isString(match) && match.replace(/#[^\n]*\n/g, '\n').replace(/\s+/g, '');
var usedRE = false; var usedRE = false;
if (_.isString(match)) {
maybeRE = match
.replace(reComments_RE, function (match, prevChar) {
if (prevChar === '\\') {
return match;
} else {
return prevChar + '\n';
}
})
.replace(reWhitespace_RE, '');
}
if (maybeRE && maybeRE[0] === '/' && maybeRE[maybeRE.length - 1] === '/') { if (maybeRE && maybeRE[0] === '/' && maybeRE[maybeRE.length - 1] === '/') {
usedRE = true; usedRE = true;
// replace anymore than one space with a single space // replace anymore than one space with a single space
@ -521,8 +560,8 @@ YamlDoc.prototype = {
inspect(path), inspect(path),
'and value', 'and value',
inspect(val), inspect(val),
'and original RE', 'and original matcher',
'|' + notRE, '|' + origMatch,
'' ''
]; ];
throw new Error(msg.slice(0, usedRE ? void 0 : -3).join('\n')); throw new Error(msg.slice(0, usedRE ? void 0 : -3).join('\n'));

View File

@ -27,13 +27,13 @@ describe('Client instances creation', function () {
expect(client.nodes.stats).to.be(apis[def].nodes.prototype.stats); expect(client.nodes.stats).to.be(apis[def].nodes.prototype.stats);
}); });
it('inherits the 1.0 API when specified', function () { it('inherits the 1.2 API when specified', function () {
client.close(); client.close();
client = es.Client({ client = es.Client({
apiVersion: '1.0' apiVersion: '1.2'
}); });
expect(client.bulk).to.be(apis['1.0'].bulk); expect(client.bulk).to.be(apis['1.2'].bulk);
expect(client.cluster.nodeStats).to.be(apis['1.0'].cluster.prototype.nodeStats); expect(client.cluster.nodeStats).to.be(apis['1.2'].cluster.prototype.nodeStats);
}); });
it('closing the client causes it\'s transport to be closed', function () { it('closing the client causes it\'s transport to be closed', function () {