Commit 4d098c6b authored by Thomas Lechauve's avatar Thomas Lechauve

Fix last commit

Forgot to add modified files
parent 94b89ec8
...@@ -4,15 +4,11 @@ app = Flask(__name__) ...@@ -4,15 +4,11 @@ app = Flask(__name__)
@app.route('/') @app.route('/')
def index(): def index():
return "index" return render_template("slapos.html")
@app.route('/test-mobile')
def test():
return render_template('test-mobile.html')
@app.route('/request', methods=["POST", "GET"]) @app.route('/request', methods=["POST", "GET"])
def request(): def request():
response = make_response("HELLO", 409) response = make_response("HELLO", 408)
response.headers['Access-Control-Allow-Origin'] = '*' response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = '*' response.headers['Access-Control-Allow-Methods'] = '*'
return response return response
......
...@@ -3,20 +3,34 @@ ...@@ -3,20 +3,34 @@
<head> <head>
<link rel="stylesheet" href="static/css/qunit.css" type="text/css" media="screen" /> <link rel="stylesheet" href="static/css/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="static/js/jquery-1.7.2.js"></script> <script type="text/javascript" src="static/js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="static/js/modernizr-2.5.3.js"></script>
<script type="text/javascript" src="static/js/qunit.js"></script> <script type="text/javascript" src="static/js/qunit.js"></script>
<script type="text/javascript" src="static/js/sinon-1.3.2.js"></script> <script type="text/javascript" src="static/js/sinon-1.3.2.js"></script>
<script type="text/javascript" src="static/js/sinon-qunit-1.0.0.js"></script> <script type="text/javascript" src="static/js/sinon-qunit-1.0.0.js"></script>
<script type="text/javascript" src="static/js/sinon-server-1.3.2.js"></script>
<script type="text/javascript" src="static/js/slapOs.js"></script> <script type="text/javascript" src="static/js/slapOs.js"></script>
<script type="text/javascript" src="static/js/test.js"></script> <script type="text/javascript" src="static/js/test.js"></script>
<title>Test Slapos</title> <title>Test Slapos</title>
</head> </head>
<body> <body>
<div class="container"> <section>
<h1 id="qunit-header">QUnit SlapOs tests</h1> <article>
<h2 id="qunit-banner"></h2> <center>
<div id="qunit-testrunner-toolbar"></div> <form id="connect">
<h2 id="qunit-userAgent"></h2> <label for="login">Test on a real server :</label>
<ol id="qunit-tests"></ol> <input type="text" id="login" name="login" placeholder="Server url" spellcheck="false" required autofocus="autofocus"/>
<div id="qunit-fixture">test markup, will be hidden</div> <input type="submit" id="submit" value="Go!"/>
</div> </form>
</center>
<div class="container">
<h1 id="qunit-header">QUnit SlapOs tests</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>
</div>
</article>
</section>
</body> </body>
\ No newline at end of file
...@@ -7420,6 +7420,7 @@ jQuery.extend({ ...@@ -7420,6 +7420,7 @@ jQuery.extend({
if ( state === 2 ) { if ( state === 2 ) {
if ( !responseHeaders ) { if ( !responseHeaders ) {
responseHeaders = {}; responseHeaders = {};
console.log(responseHeadersString);
while( ( match = rheaders.exec( responseHeadersString ) ) ) { while( ( match = rheaders.exec( responseHeadersString ) ) ) {
responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
} }
...@@ -7483,7 +7484,6 @@ jQuery.extend({ ...@@ -7483,7 +7484,6 @@ jQuery.extend({
response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
lastModified, lastModified,
etag; etag;
// If successful, handle type chaining // If successful, handle type chaining
if ( status >= 200 && status < 300 || status === 304 ) { if ( status >= 200 && status < 300 || status === 304 ) {
......
(function(window, $) { ;(function($, window, document, undefined) {
var SlapOs = function(elem, options){ var SlapOs = function(elem, options){
this.elem = elem; this.elem = elem;
this.$elem = $(elem); this.$elem = $(elem);
...@@ -7,25 +7,52 @@ ...@@ -7,25 +7,52 @@
}; };
SlapOs.prototype = { SlapOs.prototype = {
host: '', defaults: {
host: ''
},
init: function(){ init: function(){
this.config = $.extends({}, this.defaults, this.options, this.metadata); this.config = $.extend({}, this.defaults, this.options, this.metadata);
this.store = Modernizr.localstorage ? this.lStore : this.cStore;
this.store('host', this.config.host);
return this; return this;
}, },
/* Local storage method */
lStore: function(name, value){
if(Modernizr.localstorage)
return value == undefined ? window.localStorage[name] : window.localStorage[name] = value;
return false;
},
/* Cookie storage method */
cStore: function(name, value){
if(value != undefined){
document.cookie = name+"="+value+";domain="+window.location.hostname+";path="+window.location.pathname;
}else{
var i,x,y, cookies = document.cookie.split(';');
for(i=0; i<cookies.length; i++){
x = cookies[i].substr(0, cookies[i].indexOf('='));
y = cookies[i].substr(cookies[i].indexOf('=')+1);
x=x.replace(/^\s+|\s+$/g,"");
if(x == name) return unescape(y);
}
}
},
request: function(type, url, callback, data){ request: function(type, url, callback, data){
data = data || ''; data = data || '';
return $.ajax({ $.ajax({
url: this.host+url, url: this.config.host+url,
dataType: 'json', dataType: 'json',
data: data, data: data,
context: this.$elem,
type: type, type: type,
statusCode: { }).done(callback).fail(this.failCallback);
409: function(){console.log('Status Code : 409')}, },
},
success: function(data){ callback(data); } failCallback: function(jqXHR, textStatus){
}); //console.log(jqXHR);
}, },
newInstance: function(data, callback){ newInstance: function(data, callback){
...@@ -84,4 +111,5 @@ ...@@ -84,4 +111,5 @@
}; };
window.SlapOs = SlapOs; window.SlapOs = SlapOs;
})(window, jQuery);
\ No newline at end of file })(jQuery, window , document);
\ No newline at end of file
$(function(){ $(function(){
module("Instance & Computer Methods Tests", { var h = getParameterByName("login");
var slap = new SlapOs(document, {host: h}).init();
module("Ajax Tests", {
setup: function(){ setup: function(){
this.server = sinon.sandbox.useFakeServer(); this.server = sinon.sandbox.useFakeServer();
this.header = {"Content-Type":"application/json; charset=utf-8"}; this.header = {"Content-Type":"application/json; charset=utf-8"};
this.error = [409, this.header, ''] this.error = [409, this.header, 'ERROR'];
this.slap = new SlapOs();
}, },
tearDown: function(){ teardown: function(){
this.server.restore(); this.server.restore();
} }
}); });
test("Requesting a new instance - Success Response", function(){ test("Requesting a new instance", function(){
expect(2); expect(2);
callback = this.spy(); callback = this.spy();
responseBody = [{instance_id: "anId",status: "started",connection: {}}]; responseBody = [{instance_id: "anId",status: "started",connection: {}}];
response = [201, this.header, JSON.stringify(responseBody)]; response = [201, this.header, JSON.stringify(responseBody)];
this.server.respondWith("POST", "/request", response); this.server.respondWith("POST", "/request", response);
data = '{"title": "My unique instance","software_release": "http://example.com/example.cfg","software_type": "type_provided_by_the_software","slave": False,"status": "started","sla": {"computer_id": "COMP-0"}'; slap.newInstance('', callback);
this.slap.newInstance(data, callback);
this.server.respond(); this.server.respond();
ok(callback.calledOnce, "callback call"); ok(callback.calledOnce, "callback should be called");
ok(callback.calledWith(responseBody), 'callback check right parameters'); ok(callback.calledWith(responseBody), 'should return mainly id and status of an instance');
}); });
test("Requesting a new instance - Fail Response", function(){ test("Requesting a new instance - Fail", function(){
expect(1); expect(1);
callback = this.spy(); callback = this.spy();
this.server.respondWith("POST", "/request", this.error); this.server.respondWith("POST", "/request", this.error);
data = '{"title": "My unique instance","software_release": "http://example.com/example.cfg","software_type": "type_provided_by_the_software","slave": False,"status": "started","sla": {"computer_id": "COMP-0"}'; slap.newInstance('', callback);
this.slap.newInstance(data, callback);
this.server.respond(); this.server.respond();
ok(!callback.calledOnce, "callback not call"); ok(!callback.calledOnce, "callback should not be called");
}); });
test("Deleting an instance", function(){ test("Deleting an instance", function(){
...@@ -48,36 +48,86 @@ $(function(){ ...@@ -48,36 +48,86 @@ $(function(){
response = [202, this.header, '']; response = [202, this.header, ''];
this.server.respondWith("DELETE", /\/instance\/(\w+)/, response); this.server.respondWith("DELETE", /\/instance\/(\w+)/, response);
this.slap.deleteInstance('id', callback); slap.deleteInstance('id', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be called");
});
test("Deleting an instance - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("DELETE", /\/instance\/(\w+)/, this.error);
slap.deleteInstance('id', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
}); });
test("Get instance information", function(){ test("Get instance information", function(){
expect(1); expect(2);
callback = this.spy(); callback = this.spy();
response = [200, this.header, '']; responseBody = [{instance_id: "anId", status: "start", software_release: "http://example.com/example.cfg",
software_type: "type_provided_by_the_software", slave: "False", connection: {
custom_connection_parameter_1: "foo",
custom_connection_parameter_2: "bar"},
parameter: {Custom1: "one string", Custom2: "one float",
Custom3: ["abc", "def"],},
sla: {computer_id: "COMP-0",},
children_id_list: ["subinstance1", "subinstance2"],
partition: {public_ip: ["::1", "91.121.63.94"], private_ip: ["127.0.0.1"],
tap_interface: "tap2",},}];
response = [200, this.header, JSON.stringify(responseBody)];
this.server.respondWith("GET", /\/instance\/(\w+)/, response); this.server.respondWith("GET", /\/instance\/(\w+)/, response);
this.slap.getInstance('id', callback); slap.getInstance('id', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be call");
ok(callback.calledWith(responseBody), "should return informations of an instance");
}); });
test("Get instance authentication certificates", function(){ test("Get instance information - Fail", function(){
expect(1); expect(1);
callback = this.spy(); callback = this.spy();
response = [200, this.header, '']; this.server.respondWith("GET", /\/instance\/(\w+)/, this.error);
slap.getInstance('id', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
});
test("Get instance authentication certificates", function(){
expect(2);
callback = this.spy();
responseBody = [{ ssl_key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADAN...h2VSZRlSN\n-----END PRIVATE KEY-----",
ssl_certificate: "-----BEGIN CERTIFICATE-----\nMIIEAzCCAuugAwIBAgICHQI...ulYdXJabLOeCOA=\n-----END CERTIFICATE-----",}];
response = [200, this.header, JSON.stringify(responseBody)];
this.server.respondWith("GET", /\/instance\/(\w+)\/certificate/, response); this.server.respondWith("GET", /\/instance\/(\w+)\/certificate/, response);
this.slap.getInstanceCert('id', callback); slap.getInstanceCert('id', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback call");
ok(callback.calledWith(responseBody));
});
test("Get instance authentication certificates - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("GET", /\/instance\/(\w+)\/certificate/, this.error);
slap.getInstanceCert('id', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
}); });
test("Bang instance", function(){ test("Bang instance", function(){
...@@ -85,13 +135,25 @@ $(function(){ ...@@ -85,13 +135,25 @@ $(function(){
callback = this.spy(); callback = this.spy();
response = [200, this.header, '']; response = [200, this.header, ''];
this.server.respondWith("GET", /\/instance\/(\w+)\/bang/, response); this.server.respondWith("POST", /\/instance\/(\w+)\/bang/, response);
data = ''; data = '';
this.slap.bangInstance('id', data, callback); slap.bangInstance('id', data, callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be called");
});
test("Bang instance - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("POST", /\/instance\/(\w+)\/bang/, this.error);
slap.bangInstance('id', data, callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
}); });
test("Modifying instance", function(){ test("Modifying instance", function(){
...@@ -102,38 +164,84 @@ $(function(){ ...@@ -102,38 +164,84 @@ $(function(){
this.server.respondWith("PUT", /\/instance\/(\w+)/, response); this.server.respondWith("PUT", /\/instance\/(\w+)/, response);
data = ''; data = '';
this.slap.editInstance('id', data, callback); slap.editInstance('id', data, callback);
this.server.respond();
ok(callback.calledOnce, "callback should be called");
});
test("Modifying instance - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("PUT", /\/instance\/(\w+)/, this.error);
slap.editInstance('id', '', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(!callback.calledOnce, "callback should not be called");
}); });
test("Register a new computer", function(){ test("Register a new computer", function(){
expect(2);
callback = this.spy();
responseBody = [{computer_id: "COMP-0",
ssl_key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADAN...h2VSZRlSN\n-----END PRIVATE KEY-----",
ssl_certificate: "-----BEGIN CERTIFICATE-----\nMIIEAzCCAuugAwIBAgICHQI...ulYdXJabLOeCOA=\n-----END CERTIFICATE-----",}];
response = [201, this.header, JSON.stringify(responseBody)];
this.server.respondWith("POST", "/computer", response);
slap.newComputer('', callback);
this.server.respond();
ok(callback.calledOnce, "callback should be called");
ok(callback.calledWith(responseBody), "should return a computerID, ssl key and ssl certificates");
});
test("Register a new computer - Fail", function(){
expect(1); expect(1);
callback = this.spy(); callback = this.spy();
response = [201, this.header, '']; this.server.respondWith("POST", "/computer", this.error);
this.server.respondWith("POST", /\/computer/, response);
data = ''; slap.newComputer('', callback);
this.slap.newComputer(data, callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(!callback.calledOnce, "callback should not be called");
}); });
test("Getting computer information", function(){ test("Getting computer information", function(){
expect(1); expect(2);
callback = this.spy(); callback = this.spy();
response = [200, this.header, '']; responseBody = [{computer_id: "COMP-0",
software: [{software_release: "http://example.com/example.cfg",
status: "install"},],
partition: [{title: "slapart1",instance_id: "foo",status: "start",
software_release: "http://example.com/example.cfg"},
{title: "slapart2",instance_id: "bar",status: "stop",
software_release: "http://example.com/example.cfg"},],}];
response = [200, this.header, JSON.stringify(responseBody)];
this.server.respondWith("GET", /\/computer\/(\w+)/, response); this.server.respondWith("GET", /\/computer\/(\w+)/, response);
data = ''; slap.getComputer('id', callback);
this.slap.getComputer('id', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be called");
ok(callback.calledWith(responseBody), "should return informations of a computer");
});
test("Getting computer information - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("GET", /\/computer\/(\w+)/, this.error);
slap.getComputer('id', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
}); });
test("Modifying computer", function(){ test("Modifying computer", function(){
...@@ -144,12 +252,24 @@ $(function(){ ...@@ -144,12 +252,24 @@ $(function(){
this.server.respondWith("PUT", /\/computer\/(\w+)/, response); this.server.respondWith("PUT", /\/computer\/(\w+)/, response);
data = ''; data = '';
this.slap.editComputer('id', data, callback); slap.editComputer('id', data, callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be called");
}); });
test("Modifying computer - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("PUT", /\/computer\/(\w+)/, this.error);
slap.editComputer('id', '', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
});
test("Supplying new software", function(){ test("Supplying new software", function(){
expect(1); expect(1);
callback = this.spy(); callback = this.spy();
...@@ -158,10 +278,22 @@ $(function(){ ...@@ -158,10 +278,22 @@ $(function(){
this.server.respondWith("POST", /\/computer\/(\w+)\/supply/, response); this.server.respondWith("POST", /\/computer\/(\w+)\/supply/, response);
data = ''; data = '';
this.slap.newSoftware('computerId', data, callback); slap.newSoftware('computerId', data, callback);
this.server.respond();
ok(callback.calledOnce, "callback should be called");
});
test("Supplying new software - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("POST", /\/computer\/(\w+)\/supply/, this.error);
slap.newSoftware('computerId', '', callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(!callback.calledOnce, "callback should not be called");
}); });
test("Bang computer", function(){ test("Bang computer", function(){
...@@ -172,10 +304,22 @@ $(function(){ ...@@ -172,10 +304,22 @@ $(function(){
this.server.respondWith("POST", /\/computer\/(\w+)\/bang/, response); this.server.respondWith("POST", /\/computer\/(\w+)\/bang/, response);
data = ''; data = '';
this.slap.bangComputer('id', data, callback); slap.bangComputer('id', data, callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback should be called");
});
test("Bang computer - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("POST", /\/computer\/(\w+)\/bang/, this.error);
slap.bangComputer('id', '', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
}); });
test("Report computer usage", function(){ test("Report computer usage", function(){
...@@ -186,9 +330,43 @@ $(function(){ ...@@ -186,9 +330,43 @@ $(function(){
this.server.respondWith("POST", /\/computer\/(\w+)\/report/, response); this.server.respondWith("POST", /\/computer\/(\w+)\/report/, response);
data = ''; data = '';
this.slap.newComputer('id', data, callback); slap.computerReport('id', data, callback);
this.server.respond(); this.server.respond();
equal(1, this.server.requests.length, 'A request has been sent'); ok(callback.calledOnce, "callback call");
}); });
});
\ No newline at end of file test("Report computer usage - Fail", function(){
expect(1);
callback = this.spy();
this.server.respondWith("POST", /\/computer\/(\w+)\/report/, this.error);
slap.computerReport('id', '', callback);
this.server.respond();
ok(!callback.calledOnce, "callback should not be called");
});
module("Common Tests");
test("Check if host has been saved", function(){
newS = new SlapOs(document, {host: "http://foo.com"}).init();
equal(newS.store('host'), "http://foo.com", "should contains host whatever is the method")
});
test("Modifying host after initialisation at start", function(){
newS = new SlapOs(document, {host: "http://foo.com"}).init();
newS.store('host', 'http://examples.com');
equal(newS.store('host'), "http://examples.com", "should contains modified host")
});
});
function getParameterByName(name){
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if(results == null) return "";
else return decodeURIComponent(results[1].replace(/\+/g, " "));
}
\ No newline at end of file
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