You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/08/03 14:20:41 UTC

[PATCH core 4/5] Mock: Support for user-data testing

From: Michal Fojtik <mf...@redhat.com>


Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 server/lib/deltacloud/drivers/mock/mock_driver.rb |    4 +-
 server/public/javascripts/application.js          |   49 +++++++++++++++++++++
 server/views/instances/new.html.haml              |    7 +++
 3 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index 44e6a22..fa575c1 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -85,6 +85,7 @@ class MockDriver < Deltacloud::BaseDriver
   end
 
   feature :instances, :user_name
+  feature :instances, :user_data
   feature :instances, :authentication_key
 
   def initialize
@@ -221,7 +222,8 @@ class MockDriver < Deltacloud::BaseDriver
       :instance_profile => InstanceProfile.new(hwp.name, opts),
       :realm_id=>realm_id,
       :create_image=>true,
-      :actions=>instance_actions_for( 'RUNNING' )
+      :actions=>instance_actions_for( 'RUNNING' ),
+      :user_data => opts[:user_data]
     }
     File.open( "#{@storage_root}/instances/#{next_id}.yml", 'w' ) {|f|
       YAML.dump( instance, f )
diff --git a/server/public/javascripts/application.js b/server/public/javascripts/application.js
index 703879c..e3aec10 100644
--- a/server/public/javascripts/application.js
+++ b/server/public/javascripts/application.js
@@ -17,6 +17,55 @@ $(document).ready(function() {
 
 })
 
+function encodeb64 () {
+  // Encodes string using MIME base64 algorithm
+  //
+  // version: 1107.2516
+  // discuss at: http://phpjs.org/functions/base64_encode    // +   original by: Tyler Akins (http://rumkin.com)
+  // +   improved by: Bayron Guevara
+  // +   improved by: Thunder.m
+  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+  // +   bugfixed by: Pellentesque Malesuada    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+  // -    depends on: utf8_encode
+  // *     example 1: base64_encode('Kevin van Zonneveld');
+  // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
+  // mozilla has this native    // - but breaks in 2.0.0.12!
+  //if (typeof this.window['atob'] == 'function') {
+  //    return atob(data);
+  //}
+  var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+      ac = 0,
+      enc = "",
+      tmp_arr = [];
+
+  var data = $("textarea#user_data").attr('value');
+
+  do { // pack three octets into four hexets
+    o1 = data.charCodeAt(i++);
+    o2 = data.charCodeAt(i++);
+    o3 = data.charCodeAt(i++);
+    bits = o1 << 16 | o2 << 8 | o3;
+
+    h1 = bits >> 18 & 0x3f;
+    h2 = bits >> 12 & 0x3f;        h3 = bits >> 6 & 0x3f;
+    h4 = bits & 0x3f;
+
+    // use hexets to index into b64, and append result to encoded string
+    tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);    } while (i < data.length);
+
+    enc = tmp_arr.join('');
+
+    switch (data.length % 3) {    case 1:
+      enc = enc.slice(0, -2) + '==';
+      break;
+      case 2:
+      enc = enc.slice(0, -1) + '=';        break;
+    }
+
+    $("textarea#user_data").attr('value', enc);
+    return false;
+}
+
 function more_fields()
 {
   //increment the hidden input that captures how many meta_data are passed
diff --git a/server/views/instances/new.html.haml b/server/views/instances/new.html.haml
index 263d43c..3b1b667 100644
--- a/server/views/instances/new.html.haml
+++ b/server/views/instances/new.html.haml
@@ -12,6 +12,13 @@
     %div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
       %h3 Additional parameters
 
+      - if driver_has_feature?(:user_data)
+        %div{ 'data-role' => :fieldcontain }
+          %label{ :for => :user_data} Base64 encoded user-data:
+          %textarea{ :id => :user_data, :name => :user_data, :value => '' }
+          %br/
+          %a{ :href => "", :onclick => 'encodeb64();', :'data-ajax' => 'false'} Encode data
+
       - if driver_has_feature?(:instance_count)
         %div{ 'data-role' => :fieldcontain }
           %label{ :for => :instance_count} # of instances to be launched:
-- 
1.7.4.1