js: Add debug string to blessing object
MultiPart: 1/2
Change-Id: I43c85112f3087132409be1ced371642de2ff65ed
diff --git a/src/gen-vdl/v.io/x/ref/services/wspr/internal/app/index.js b/src/gen-vdl/v.io/x/ref/services/wspr/internal/app/index.js
index 34bd36f..dddfbf4 100644
--- a/src/gen-vdl/v.io/x/ref/services/wspr/internal/app/index.js
+++ b/src/gen-vdl/v.io/x/ref/services/wspr/internal/app/index.js
@@ -139,6 +139,11 @@
};
+Controller.prototype.blessingsDebugString = function(ctx, serverCall, handle) {
+ throw new Error('Method BlessingsDebugString not implemented');
+};
+
+
Controller.prototype.bless = function(ctx, serverCall, publicKey, blessingHandle, extension, caveat) {
throw new Error('Method Bless not implemented');
};
@@ -279,6 +284,27 @@
{
+ name: 'BlessingsDebugString',
+ doc: "// BlessingsDebugString gets a string useful for debugging blessings.",
+ inArgs: [{
+ name: 'handle',
+ doc: "",
+ type: new principal.BlessingsHandle()._type
+ },
+ ],
+ outArgs: [{
+ name: '',
+ doc: "",
+ type: vdl.types.STRING
+ },
+ ],
+ inStream: null,
+ outStream: null,
+ tags: []
+ },
+
+
+ {
name: 'Bless',
doc: "// Bless binds extensions of blessings held by this principal to\n// another principal (represented by its public key).",
inArgs: [{
diff --git a/src/security/blessings.js b/src/security/blessings.js
index 0fdd20d..22e4544 100644
--- a/src/security/blessings.js
+++ b/src/security/blessings.js
@@ -59,6 +59,15 @@
};
};
+/**
+ * Get a string that describes this blessings object.
+ * @return {Promise} A promise to a string describing the blessings.
+ * @private
+ */
+Blessings.prototype._debugString = function(ctx) {
+ return this._controller.blessingsDebugString(ctx, this._id);
+};
+
Blessings.prototype.convertToJsBlessings = function() {
return new JsBlessings({
handle: this._id,
diff --git a/src/security/principal.js b/src/security/principal.js
index a0bdc52..ef149b7 100644
--- a/src/security/principal.js
+++ b/src/security/principal.js
@@ -114,11 +114,12 @@
var caveats = args.slice(2);
- this._controller.blessSelf.call(this._controller, ctx, name, caveats)
+ var controller = this._controller;
+ controller.blessSelf.call(this._controller, ctx, name, caveats)
.then(function(res) {
var publicKey = res[0];
var handle = res[1];
- def.resolve(new Blessings(handle, publicKey, this._controller));
+ def.resolve(new Blessings(handle, publicKey, controller));
}).catch(function(err) {
def.reject(err);
});
diff --git a/test/integration/test-bless.js b/test/integration/test-bless.js
index fd059f3..cf0bc73 100644
--- a/test/integration/test-bless.js
+++ b/test/integration/test-bless.js
@@ -11,6 +11,15 @@
var Blessings = require('../../src/security/blessings');
var SharedContextKeys = require('../../src/runtime/shared-context-keys');
+function validateBlessings(t, blessings) {
+ t.ok(blessings instanceof Blessings, 'Blessings have correct type');
+ t.ok(typeof blessings._id === 'number' && blessings._id !== 0,
+ 'Blessing has non-zero id');
+ t.ok(typeof blessings.publicKey === 'string' && blessings.publicKey !== '',
+ 'Blessing has public key');
+ t.ok(blessings._controller, 'Blessing object has controller attached');
+}
+
test('Test bless self without Caveat', function(t) {
var rt;
vanadium.init(config, function(err, runtime) {
@@ -22,7 +31,7 @@
runtime.principal.blessSelf(runtime.getContext(), 'ext')
.then(function(blessings) {
- t.ok(blessings instanceof Blessings, 'Got blessings');
+ validateBlessings(t, blessings);
rt.close(t.end);
}).catch(function(err) {
t.error(err);
@@ -44,7 +53,7 @@
caveats.createExpiryCaveat(new Date()),
function(err, blessings) {
t.error(err);
- t.ok(blessings instanceof Blessings, 'Got blessings');
+ validateBlessings(t, blessings);
rt.close(t.end);
});
});
@@ -86,9 +95,9 @@
var remoteKey = secCall.remoteBlessings.publicKey;
rt.principal.bless(ctx, remoteKey, secCall.localBlessings,
'ext', caveats.createExpiryCaveat(new Date(Date.now() - 1000)),
- caveats.createConstCaveat(true), function(err, blessing) {
+ caveats.createConstCaveat(true), function(err, blessings) {
t.notOk(err, 'No error expected during bless');
- t.ok(blessing instanceof Blessings, 'Got blessing');
+ validateBlessings(t, blessings);
cb();
});
}
@@ -210,3 +219,25 @@
});
});
});
+
+test('Test fetching blessing debug string', function(t) {
+ var rt;
+ vanadium.init(config, function(err, runtime) {
+ if (err) {
+ t.end(err);
+ }
+
+ rt = runtime;
+
+ runtime.principal.blessSelf(runtime.getContext(), 'blessedname')
+ .then(function(blessings) {
+ return blessings._debugString(runtime.getContext());
+ }).then(function(debugString) {
+ t.ok(debugString === 'blessedname', 'Got blessed name as debug string');
+ rt.close(t.end);
+ }).catch(function(err) {
+ t.error(err);
+ rt.close(t.end);
+ });
+ });
+});