From e1616a351dcc5aff64e711798f070db4dc03f284 Mon Sep 17 00:00:00 2001 From: Sam Gunaratne Date: Fri, 13 Mar 2020 12:08:32 +0000 Subject: [PATCH] Add support for latest generic extensions proposal See https://github.com/openservicebrokerapi/servicebroker/pull/670 --- app.js | 11 +++---- extensions/health.yaml | 2 +- service_broker.js | 38 ++++++++++++------------- tests/extensions.js | 7 ++--- tests/service_broker_interface_tests.js | 11 +++++-- 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/app.js b/app.js index cc913d9..c096f70 100644 --- a/app.js +++ b/app.js @@ -60,10 +60,10 @@ function start(callback) { data.responseMode = process.env.responseMode; response.json(data); }); - app.get('/health', function(request, response) { + app.get('/extensions/health.yaml', function(request, response) { response.sendFile('health.yaml', { root: 'extensions' }); }); - app.get('/info', function(request, response) { + app.get('/extensions/info.yaml', function(request, response) { response.sendFile('info.yaml', { root: 'extensions' }); }); app.get('/logs', function(request, response) { @@ -95,9 +95,6 @@ function start(callback) { }); app.use('/images', express.static('images')); - /* Extensions (unauthenticated) */ - app.get('/v2/service_instances/:instance_id/health', serviceBrokerInterface.getHealth()); - app.get('/v2/service_instances/:instance_id/info', serviceBrokerInterface.getInfo()); /* Authenticated routes (uses Basic Auth) */ var users = {}; @@ -166,6 +163,10 @@ function start(callback) { app.get('/v2/service_instances/:instance_id', serviceBrokerInterface.getServiceInstance()); app.get('/v2/service_instances/:instance_id/service_bindings/:binding_id', serviceBrokerInterface.getServiceBinding()); + /* Extensions */ + app.get('/v2/service_instances/:instance_id/health-extension/health', serviceBrokerInterface.getHealth()); + app.get('/v2/service_instances/:instance_id/info-extension/info', serviceBrokerInterface.getInfo()); + /* Listing */ app.get('/v2/service_instances', function(request, response) { serviceBrokerInterface.listInstances(request, response); diff --git a/extensions/health.yaml b/extensions/health.yaml index f28dc98..70fdce4 100644 --- a/extensions/health.yaml +++ b/extensions/health.yaml @@ -4,7 +4,7 @@ info: description: Fetch health information about a service instance version: 0.1.0 paths: - /info: + /health: get: summary: Returns health information for the service instance responses: diff --git a/service_broker.js b/service_broker.js index c2e14bd..4620d33 100644 --- a/service_broker.js +++ b/service_broker.js @@ -98,25 +98,22 @@ class ServiceBroker { }); } - // getServiceInstanceExtensionAPIs(serviceId) { - // return [ - // { - // discovery_url: '/logs', - // server_url: `${cfenv.getAppEnv().url}/v2/service_instances/${serviceId}`, - // adheres_to: 'http://broker.sapi.life/logs' - // }, - // { - // discovery_url: '/health', - // server_url: `${cfenv.getAppEnv().url}/v2/service_instances/${serviceId}`, - // adheres_to: 'http://broker.sapi.life/health' - // }, - // { - // discovery_url: '/info', - // server_url: `${cfenv.getAppEnv().url}/v2/service_instances/${serviceId}`, - // adheres_to: 'http://broker.sapi.life/info' - // } - // ] - // }; + getServiceInstanceExtensionAPIs() { + return [ + { + "id": "urn:osbext:health:v1", + "path": "/health-extension", + "description": "Obtains the health of a service instance", + "openapi_url": "extensions/health.yaml" + }, + { + "id": "urn:osbext:overviewbroker-info:v1", + "path": "/info-extension", + "description": "Gets information about the service instance", + "openapi_url": "/extensions/info.yaml" + } + ] + }; validateParameters(schema, parameters) { var result = validate(parameters, schema); @@ -199,7 +196,8 @@ class ServiceBroker { parameters: largePlanSchema } } - } + }, + extensions: this.getServiceInstanceExtensionAPIs() }); // Load example schemas if requested and generate a plan for each diff --git a/tests/extensions.js b/tests/extensions.js index 5ad2f35..2468fcc 100644 --- a/tests/extensions.js +++ b/tests/extensions.js @@ -26,7 +26,7 @@ describe('Extensions', function() { it('should fetch discovery doc', function(done) { request(server) - .get('/health') + .get('/extensions/health.yaml') .expect(200) .then(response => { done(); @@ -36,16 +36,13 @@ describe('Extensions', function() { }); describe('info', function() { - it('should fetch discovery doc', function(done) { request(server) - .get('/info') + .get('/extensions/info.yaml') .expect(200) .then(response => { done(); }); }); - }); - }); diff --git a/tests/service_broker_interface_tests.js b/tests/service_broker_interface_tests.js index 4614fd5..0831243 100644 --- a/tests/service_broker_interface_tests.js +++ b/tests/service_broker_interface_tests.js @@ -2107,21 +2107,26 @@ describe('Service Broker Interface', function() { it('should fetch health', function(done) { request(server) - .get(`/v2/service_instances/${instanceId}/health`) + .get(`/v2/service_instances/${instanceId}/health-extension/health`) + .auth(brokerUsername, brokerPassword) + .set('X-Broker-Api-Version', apiVersion) .expect(200) .then(response => { should.exist(response.body); response.body.should.have.property('alive'); done(); }) - .catch(error => { + .catch((error, resp) => { + console.log(resp); done(error); }); }); it('should fetch info', function(done) { request(server) - .get(`/v2/service_instances/${instanceId}/info`) + .get(`/v2/service_instances/${instanceId}/info-extension/info`) + .auth(brokerUsername, brokerPassword) + .set('X-Broker-Api-Version', apiVersion) .expect(200) .then(response => { should.exist(response.body);