From: Galen Charlton Date: Thu, 21 Sep 2017 01:07:37 +0000 (-0400) Subject: LP#1718301: catch it when multiple connection attempts fail X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=refs%2Fheads%2Fuser%2Fgmcharlt%2Flp1718301_lf_no_multi_connect;p=working%2FEvergreen.git LP#1718301: catch it when multiple connection attempts fail Lovefield only allows a single connection at a time, and throws an exception if a second attempt is made. In the context of a page app, wrapping the connection attempt in a promise takes care of it, but for the test suite, the egLoveField service gets completely reinitialized... but Lovefield itself still thinks it's in the middle of connecting. This patch catches the exception and allows the test suite to pass, without otherwise affecting use in a real browser. Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/web/js/ui/default/staff/services/lovefield.js b/Open-ILS/web/js/ui/default/staff/services/lovefield.js index 0621911648..dfebc4b5b6 100644 --- a/Open-ILS/web/js/ui/default/staff/services/lovefield.js +++ b/Open-ILS/web/js/ui/default/staff/services/lovefield.js @@ -41,7 +41,7 @@ angular.module('egCoreMod') .factory('egLovefield', ['$q','$rootScope','egCore','$timeout', function($q , $rootScope , egCore , $timeout) { - + var service = {}; function connectOrGo() { @@ -63,20 +63,27 @@ angular.module('egCoreMod') var deferred = $q.defer(); console.debug('attempting offline DB connection'); - osb.connect().then( - function(db) { - console.debug('successfully connected to offline DB'); - service.connectPromise = null; - lf.offlineDB = db; - deferred.resolve(); - }, - function(err) { - // assumes that a single connection failure means - // a connection will never succeed. - service.cannotConnect = true; - console.error('Cannot connect to offline DB: ' + err); - } - ); + try { + osb.connect().then( + function(db) { + console.debug('successfully connected to offline DB'); + service.connectPromise = null; + lf.offlineDB = db; + deferred.resolve(); + }, + function(err) { + // assumes that a single connection failure means + // a connection will never succeed. + service.cannotConnect = true; + console.error('Cannot connect to offline DB: ' + err); + } + ); + } catch (e) { + // .connect() will throw an error if it detects that a connection + // attempt is already in progress; this can happen with PhantomJS + console.error('Cannot connect to offline DB: ' + e); + service.cannotConnect = true; + } service.connectPromise = deferred.promise; return service.connectPromise;