Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Unified Diff: server/static/rpc/test/rpc-client.html

Issue 1695893004: RPC Explorer (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@rpcepxlorer-deps
Patch Set: removed broken rpc-error.html symlink Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: server/static/rpc/test/rpc-client.html
diff --git a/server/static/rpc/test/rpc-client.html b/server/static/rpc/test/rpc-client.html
new file mode 100644
index 0000000000000000000000000000000000000000..b0d3880c866c6a431ae8522aaaf25e3adc909a61
--- /dev/null
+++ b/server/static/rpc/test/rpc-client.html
@@ -0,0 +1,256 @@
+<!--
+ Copyright 2016 The Chromium Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+ -->
+
+<!doctype html>
+<title>rpc-client</title>
+
+<link rel="import" href="../rpc-client.html">
+<script src="../../bower_components/web-component-tester/browser.js"></script>
+
+<test-fixture id="client">
+ <template>
+ <rpc-client service="service" method="ok"></rpc-client>
+ </template>
+</test-fixture>
+<script>
+ 'use strict';
+
+ suite('<rpc-client>', function() {
+ var client;
+ var server;
+
+ setup(function() {
+ var prefix = ')]}\'\n';
+
+ server = sinon.fakeServer.create();
+ var okResponseHeaders = {
+ 'Content-Type': 'application/json',
+ 'X-Prpc-Grpc-Code': '' + luci.rpc.Code.OK
+ }
+ server.respondWith('POST', '/prpc/service/ok', [
+ 200,
+ okResponseHeaders,
+ prefix + '{"secure": false}'
+ ]);
+ server.respondWith(
+ 'POST',
+ 'https://' + document.location.host + '/prpc/service/ok',
+ [
+ 200,
+ okResponseHeaders,
+ prefix + '{"secure": true}'
+ ])
+
+ server.respondWith('POST', '/prpc/service/notFound', [
+ 404,
+ {
+ 'Content-Type': 'text/plain',
+ 'X-Prpc-Grpc-Code': '' + luci.rpc.Code.NOT_FOUND
+ },
+ 'Not found'
+ ]);
+
+ server.respondWith('POST', '/prpc/service/noCode', [
+ 200,
+ {
+ 'Content-Type': 'text/json',
+ },
+ '{"blah": "bleh"}'
+ ]);
+
+ server.respondWith('POST', '/prpc/service/invalidCode', [
+ 200,
+ {
+ 'Content-Type': 'text/json',
+ 'X-Prpc-Grpc-Code': 'abc'
+ },
+ '{"blah": "bleh"}'
+ ]);
+
+ server.respondWith('POST', '/prpc/service/malformedResponse', [
+ 200,
+ {
+ 'Content-Type': 'text/json',
+ 'X-Prpc-Grpc-Code': '' + luci.rpc.Code.OK
+ },
+ '}}}'
+ ]);
+
+ client = fixture('client');
+ });
+
+ teardown(function() {
+ server.restore();
+ });
+
+ function expectResponse(fn) {
+ var call = client.call();
+ server.respond();
+ return call.completes.then(function () {
+ expect(client.lastError).not.to.be.error;
+ expect(client.lastResponse).to.equal(call.response);
+ fn(call);
+ });
+ }
+
+ function expectError(fn) {
+ var call = client.call();
+ server.respond();
+ return call.completes.then(function() {
+ assert.fail('no error', 'error');
+ }).catch(function (error) {
+ expect(error).not.to.be.null;
+ expect(client.lastResponse).to.be.null;
+ expect(client.lastError).to.be.equal(error);
+ fn(error);
+ });
+ }
+
+ test('by default host is current', function() {
+ expect(client.host).to.be.equal(document.location.host);
+ });
+
+ test('with a request', function() {
+ client.request = { msg: 'hi' };
+ var call = client.call();
+ expect(call.xhr.requestBody).to.equal('{"msg":"hi"}');
+ });
+
+ test('loading property changes', function() {
+ expect(client.loading).to.be.false;
+
+ var call = client.call();
+ expect(client.loading).to.be.true;
+
+ server.respond();
+ return call.completes.then(function() {
+ expect(client.loading).to.be.false;
+ });
+ });
+
+ test('reads response', function() {
+ return expectResponse(function(call) {
+ expect(call.response).to.be.deep.equal({ secure: false });
+ expect(call.code).to.equal(luci.rpc.Code.OK);
+ });
+ });
+
+ test('sets code', function() {
+ return expectResponse(function(call) {
+ expect(call.code).to.equal(luci.rpc.Code.OK);
+ expect(client.lastCode).to.equal(call.code);
+ });
+ });
+
+ test('secure', function() {
+ client.insecure = false;
+ return expectResponse(function(call) {
+ expect(call.response).to.be.deep.equal({ secure: true });
+ });
+ });
+
+ test('with timeout', function() {
+ client.timeout = 1000;
+ var call = client.call();
+ var timeoutHeader = call.xhr.requestHeaders['x-prpc-timeout'];
+ expect(timeoutHeader).to.be.equal('1000m');
+ });
+
+ test('error code', function() {
+ client.method = 'notFound';
+ return expectError(function(e) {
+ expect(e).to.be.an.instanceof(luci.rpc.GrpcError);
+ expect(e.code).to.equal(luci.rpc.Code.NOT_FOUND);
+ expect(e.description).to.equal('Not found');
+ expect(client.lastCall.code).to.equal(luci.rpc.Code.NOT_FOUND);
+ expect(client.lastCode).to.equal(luci.rpc.Code.NOT_FOUND);
+ });
+ });
+
+ test('no code', function() {
+ client.method = 'noCode';
+ return expectError(function(e) {
+ expect(e.message).to.contain('no X-Prpc-Grpc-Code');
+ });
+ });
+
+ test('malformed response', function() {
+ client.method = 'malformedResponse';
+ return expectError(function(e) {
+ expect(e.message).to.contain('could not parse response');
+ });
+ });
+
+ test('invalid code', function() {
+ client.method = 'invalidCode';
+ return expectError(function(e) {
+ expect(e.message).to.contain('Invalid X-Prpc-Grpc-Code');
+ });
+ });
+
+ test('request event', function() {
+ client.request = { msg: 'hi' };
+ var event = null;
+ client.addEventListener('request', function(e) {
+ event = e;
+ });
+ expect(event).to.be.null;
+ var call = client.call();
+ expect(event).to.be.ok
+ expect(event.detail.call).to.equal(call);
+ expect(client.lastCall).to.equal(call);
+ expect(call.host).to.equal(document.location.host);
+ expect(call.service).to.equal('service');
+ expect(call.method).to.equal('ok');
+ expect(call.request).to.equal(client.request);
+ });
+
+ test('response event', function() {
+ var event = null;
+ client.addEventListener('response', function(e) {
+ event = e;
+ });
+ expect(event).to.be.null;
+ return expectResponse(function(call) {
+ expect(event).to.be.ok
+ expect(event.detail.call).to.equal(call);
+ expect(call.host).to.equal(document.location.host);
+ expect(call.service).to.equal('service');
+ expect(call.method).to.equal('ok');
+ expect(call.request).to.equal(client.request);
+
+ expect(call.response).to.deep.equal({secure: false});
+ expect(call.error).to.be.null;
+ });
+ });
+
+ test('error event', function() {
+ client.method = 'notFound';
+ var event = null;
+ client.addEventListener('error', function(e) {
+ event = e;
+ });
+ expect(event).to.be.null;
+ var call = client.call();
+ expect(event).to.be.null;
+
+ server.respond();
+
+ return expectError(function(call) {
+ var call = client.lastCall;
+ expect(event).to.be.ok
+ expect(event.detail.call).to.equal(call);
+ expect(call.host).to.equal(document.location.host);
+ expect(call.service).to.equal('service');
+ expect(call.method).to.equal('notFound');
+ expect(call.request).to.equal(client.request);
+
+ expect(call.response).to.be.null;
+ expect(call.error).to.be.an.instanceof(luci.rpc.GrpcError);
+ });
+ });
+ });
+</script>

Powered by Google App Engine
This is Rietveld 408576698