| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var test = require('prova'); |
| var vanadium = require('../../'); |
| var service = require('./get-service'); |
| var makeError = vanadium.verror.makeError; |
| var actions = vanadium.verror.actions; |
| |
| var E = makeError('randomPrefix.verror', actions.NO_RETRY, |
| '{1} {2}: RandomError: {_}'); |
| |
| test('Test PassTime of Go native service', function(assert) { |
| service('test_service/native', function(err, ctx, native, end) { |
| assert.error(err); |
| if (err) { |
| return end(assert); |
| } |
| var now = new Date(); |
| native.passTime(ctx, now, function(err, result) { |
| assert.error(err); |
| assert.ok(result instanceof Date, 'native type is returned'); |
| var diff = Math.abs(result - now); |
| // It might be ok to do an equals on the two date objects but because |
| // Numbers are floating point and there is some amount of math to do |
| // the conversion, === on these dates might not be true even when the |
| // dates are really the same. |
| assert.ok(diff < 1); |
| end(assert); |
| }); |
| }); |
| }); |
| |
| test('Test PassError of Go native service', function(assert) { |
| service('test_service/native', function(err, ctx, native, end) { |
| assert.error(err); |
| if (err) { |
| return end(assert); |
| } |
| var e = new E(null, 'extra string', 4, false); |
| var expectedMessage = 'app op: RandomError: extra string 4 false'; |
| native.passError(ctx, e, function(err, result) { |
| // Bluebird adds __stackCleaned__ as part of its processing but it |
| // doesn't show up in the vom decoded message, so we can't do a |
| // deepEqual. |
| assert.equal(e.id, err.id); |
| assert.equal(e.retryCode, err.retryCode); |
| assert.equal(e.msg, err.msg); |
| assert.equal(e.message, err.message); |
| assert.equal(e.msg, expectedMessage); |
| assert.equal(e.message, expectedMessage); |
| // The decoded error has the paramList values wrapped, since the |
| // paramList is a list of any. The error passed into the call |
| // does not have that wrapping. We add the wrapping to e to make sure |
| // the decoded error has the wrapped paramlist. |
| // Note: 'extra string', 4, and false are native values. They would |
| // normally be converted to JSValue since the paramList is []any. However, |
| // they are specifically guessed to be string, number, and bool in order |
| // to avoid revealing JSValue to other languages in the common case. |
| // https://github.com/veyron/release-issues/issues/1560 |
| e.paramList = e.paramList.map(function (v) { return { val: v }; }); |
| assert.deepEqual(e.paramList, err.paramList); |
| end(assert); |
| }); |
| }); |
| }); |