Explorar o código

AMBARI-15735 Check if persist data 'wizard-data' is removed upon exiting any wizard. (atkach)

Andrii Tkach %!s(int64=9) %!d(string=hai) anos
pai
achega
04fe46d74b

+ 1 - 1
ambari-web/app/controllers/main/admin/highAvailability_controller.js

@@ -18,7 +18,7 @@
 
 var App = require('app');
 
-App.MainAdminHighAvailabilityController = Em.Controller.extend({
+App.MainAdminHighAvailabilityController = App.WizardController.extend({
   name: 'mainAdminHighAvailabilityController',
 
   tag: null,

+ 25 - 0
ambari-web/app/controllers/wizard.js

@@ -1348,5 +1348,30 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
 
   loadRecommendations: function () {
     this.set("content.recommendations", this.getDBProperty('recommendations'));
+  },
+
+  /**
+   * reset stored wizard data and reload App
+   * @param {App.WizardController} controller - wizard controller
+   * @param {string} route - preferable path to go after wizard finished
+   */
+  resetOnClose: function(controller, route) {
+    App.router.get('wizardWatcherController').resetUser();
+    controller.finish();
+    App.router.get('updateController').set('isWorking', true);
+    App.clusterStatus.setClusterStatus({
+      clusterName: App.get('clusterName'),
+      clusterState: 'DEFAULT',
+      localdb: App.db.data
+    },
+    {
+      alwaysCallback: function () {
+        controller.get('popup').hide();
+        App.router.transitionTo(route);
+        Em.run.next(function() {
+          location.reload();
+        });
+      }
+    });
   }
 });

+ 3 - 17
ambari-web/app/routes/add_host_routes.js

@@ -22,23 +22,8 @@ module.exports = App.WizardRoute.extend({
   route: '/host/add',
 
   leaveWizard: function (router, context) {
-    App.router.get('wizardWatcherController').resetUser();
     var addHostController = router.get('addHostController');
-    App.router.get('updateController').set('isWorking', true);
-    addHostController.finish();
-    App.clusterStatus.setClusterStatus({
-      clusterName: App.router.get('content.cluster.name'),
-      clusterState: 'DEFAULT',
-      localdb: App.db.data
-    }, {
-      alwaysCallback: function () {
-        context.hide();
-        App.router.transitionTo('hosts.index');
-        Em.run.next(function() {
-          location.reload();
-        });
-      }
-    });
+    addHostController.resetOnClose(addHostController, 'hosts.index');
   },
 
   enter: function (router) {
@@ -47,7 +32,7 @@ module.exports = App.WizardRoute.extend({
       Ember.run.next(function () {
         var addHostController = router.get('addHostController');
         App.router.get('updateController').set('isWorking', false);
-        App.ModalPopup.show({
+        var popup = App.ModalPopup.show({
           classNames: ['full-width-modal'],
           header: Em.I18n.t('hosts.add.header'),
           bodyClass: App.AddHostView.extend({
@@ -98,6 +83,7 @@ module.exports = App.WizardRoute.extend({
           }
         }
 
+        addHostController.set('popup', popup);
         App.router.get('wizardWatcherController').setUser(addHostController.get('name'));
         router.transitionTo('step' + addHostController.get('currentStep'));
       });

+ 2 - 32
ambari-web/app/routes/add_kerberos_routes.js

@@ -67,14 +67,10 @@ module.exports = App.WizardRoute.extend({
         },
 
         exitWizard: function () {
-          var self = this;
           var kerberosProgressPageController = App.router.get('kerberosProgressPageController');
           var controller = App.router.get('kerberosWizardController');
           var exitPath = controller.getDBProperty('onClosePath') || 'adminKerberos.index';
-          App.router.get('wizardWatcherController').resetUser();
           controller.clearTasksData();
-          controller.finish();
-          App.get('router.updateController').set('isWorking', true);
           controller.discardChanges().then(function() {
             if (App.get('testMode')) {
               App.get('router').transitionTo('adminKerberos.index');
@@ -82,19 +78,7 @@ module.exports = App.WizardRoute.extend({
                 location.reload();
               });
             }
-            App.clusterStatus.setClusterStatus({
-              clusterName: App.router.getClusterName(),
-              clusterState: 'DEFAULT',
-              localdb: App.db.data
-            }, {
-              alwaysCallback: function () {
-                self.hide();
-                App.get('router').transitionTo(exitPath);
-                Em.run.next(function() {
-                  location.reload();
-                });
-              }
-            });
+            controller.resetOnClose(controller, exitPath);
           });
         }
       });
@@ -364,21 +348,7 @@ module.exports = App.WizardRoute.extend({
     back: Em.Router.transitionTo('step7'),
     next: function (router) {
       var controller = router.get('kerberosWizardController');
-      controller.finish();
-      App.clusterStatus.setClusterStatus({
-        clusterName: App.get('router').getClusterName(),
-        clusterState: 'DEFAULT',
-        localdb: App.db.data
-      }, {
-        alwaysCallback: function () {
-          controller.get('popup').hide();
-          App.get('router').transitionTo('adminKerberos.index');
-          Em.run.next(function() {
-            location.reload();
-          });
-        }
-      });
-
+      controller.resetOnClose(controller, 'adminKerberos.index');
     }
   })
 });

+ 1 - 16
ambari-web/app/routes/add_service_routes.js

@@ -45,7 +45,6 @@ module.exports = App.WizardRoute.extend({
                 App.router.transitionTo('main.services.index');
               },
               onClose: function () {
-                App.router.get('wizardWatcherController').resetUser();
                 this.set('showCloseButton', false); // prevent user to click "Close" many times
                 App.router.get('updateController').set('isWorking', true);
                 var self = this;
@@ -53,21 +52,7 @@ module.exports = App.WizardRoute.extend({
                   App.router.get('updateController').updateServiceMetric();
                 });
                 var exitPath = addServiceController.getDBProperty('onClosePath') || 'main.services.index';
-                addServiceController.finish();
-                // We need to do recovery based on whether we are in Add Host or Installer wizard
-                App.clusterStatus.setClusterStatus({
-                  clusterName: App.router.get('content.cluster.name'),
-                  clusterState: 'DEFAULT'
-                }, {
-                  alwaysCallback: function () {
-                    self.hide();
-                    App.router.transitionTo(exitPath);
-                    Em.run.next(function() {
-                      location.reload();
-                    });
-                  }
-                });
-
+                addServiceController.resetOnClose(addServiceController, exitPath);
               },
               didInsertElement: function () {
                 this.fitHeight();

+ 2 - 30
ambari-web/app/routes/high_availability_routes.js

@@ -52,7 +52,6 @@ module.exports = App.WizardRoute.extend({
           }.observes('App.router.highAvailabilityWizardController.currentStep'),
 
           onClose: function () {
-            App.router.get('wizardWatcherController').resetUser();
             var self = this;
             var currStep = App.router.get('highAvailabilityWizardController.currentStep');
             var highAvailabilityProgressPageController = App.router.get('highAvailabilityProgressPageController');
@@ -67,21 +66,7 @@ module.exports = App.WizardRoute.extend({
             } else {
               var controller = App.router.get('highAvailabilityWizardController');
               controller.clearTasksData();
-              controller.finish();
-              App.router.get('updateController').set('isWorking', true);
-              App.clusterStatus.setClusterStatus({
-                clusterName: controller.get('content.cluster.name'),
-                clusterState: 'DEFAULT',
-                localdb: App.db.data
-              }, {
-                alwaysCallback: function () {
-                  self.hide();
-                  App.router.transitionTo('main.services.index');
-                  Em.run.next(function() {
-                    location.reload();
-                  });
-                }
-              });
+              controller.resetOnClose(controller, self, 'main.services.index');
             }
           },
           didInsertElement: function () {
@@ -326,20 +311,7 @@ module.exports = App.WizardRoute.extend({
       var proceed = function() {
         var controller = router.get('highAvailabilityWizardController');
         controller.clearTasksData();
-        controller.finish();
-        App.clusterStatus.setClusterStatus({
-          clusterName: controller.get('content.cluster.name'),
-          clusterState: 'DEFAULT',
-          localdb: App.db.data
-        }, {
-          alwaysCallback: function () {
-            controller.get('popup').hide();
-            router.transitionTo('main.services.index');
-            Em.run.next(function() {
-              location.reload();
-            });
-          }
-        });
+        controller.resetOnClose(controller, 'main.services.index');
       };
       if (App.Service.find().someProperty('serviceName', 'HAWQ')) {
         App.showAlertPopup(

+ 3 - 34
ambari-web/app/routes/ra_high_availability_routes.js

@@ -41,44 +41,13 @@ module.exports = App.WizardRoute.extend({
 
         onClose: function () {
           var rAHighAvailabilityWizardController = router.get('rAHighAvailabilityWizardController'),
-              currStep = rAHighAvailabilityWizardController.get('currentStep'),
-              self = this;
-          App.router.get('wizardWatcherController').resetUser();
+              currStep = rAHighAvailabilityWizardController.get('currentStep');
           if (parseInt(currStep) === 4) {
             App.showConfirmationPopup(function () {
-              router.get('updateController').set('isWorking', true);
-              rAHighAvailabilityWizardController.finish();
-              App.clusterStatus.setClusterStatus({
-                clusterName: App.router.getClusterName(),
-                clusterState: 'DEFAULT',
-                localdb: App.db.data
-              }, {
-                alwaysCallback: function () {
-                  self.hide();
-                  router.transitionTo('main.services.index');
-                  Em.run.next(function() {
-                    location.reload();
-                  });
-                }
-              });
+              rAHighAvailabilityWizardController.resetOnClose(rAHighAvailabilityWizardController, 'main.services.index');
             }, Em.I18n.t('admin.ra_highAvailability.closePopup'));
           } else {
-            router.get('updateController').set('isWorking', true);
-            rAHighAvailabilityWizardController.finish();
-            App.router.get('wizardWatcherController').resetUser();
-            App.clusterStatus.setClusterStatus({
-              clusterName: App.router.getClusterName(),
-              clusterState: 'DEFAULT',
-              localdb: App.db.data
-            }, {
-              alwaysCallback: function () {
-                self.hide();
-                router.transitionTo('main.services.index');
-                Em.run.next(function() {
-                  location.reload();
-                });
-              }
-            });
+            rAHighAvailabilityWizardController.resetOnClose(rAHighAvailabilityWizardController, 'main.services.index');
           }
         },
         didInsertElement: function () {

+ 2 - 29
ambari-web/app/routes/reassign_master_routes.js

@@ -22,21 +22,8 @@ module.exports = App.WizardRoute.extend({
   route: '/service/reassign',
 
   leaveWizard: function (router, context) {
-    App.router.get('wizardWatcherController').resetUser();
     var reassignMasterController = router.get('reassignMasterController');
-    App.router.get('updateController').set('isWorking', true);
-    reassignMasterController.finish();
-    App.clusterStatus.setClusterStatus({
-      clusterName: App.router.get('content.cluster.name'),
-      clusterState: 'DEFAULT',
-      localdb: App.db.data
-    }, {alwaysCallback: function () {
-      context.hide();
-      router.transitionTo('main.index');
-      Em.run.next(function() {
-        location.reload();
-      });
-    }});
+    reassignMasterController.resetOnClose(reassignMasterController, 'main.index');
   },
 
   enter: function (router) {
@@ -362,21 +349,7 @@ module.exports = App.WizardRoute.extend({
       var controller = router.get('reassignMasterController');
       var reassignMasterWizardStep7 = router.get('reassignMasterWizardStep7Controller');
       if (!reassignMasterWizardStep7.get('isSubmitDisabled')) {
-        controller.finish();
-        controller.get('popup').hide();
-        App.clusterStatus.setClusterStatus({
-          clusterName: router.get('reassignMasterController.content.cluster.name'),
-          clusterState: 'DEFAULT',
-          localdb: App.db.data
-        }, {
-          alwaysCallback: function () {
-            controller.get('popup').hide();
-            router.transitionTo('main.index');
-            Em.run.next(function() {
-              location.reload();
-            });
-          }
-        });
+        controller.resetOnClose(controller, 'main.index');
       }
     },
 

+ 4 - 47
ambari-web/app/routes/rm_high_availability_routes.js

@@ -39,43 +39,13 @@ module.exports = App.WizardRoute.extend({
 
         onClose: function () {
           var rMHighAvailabilityWizardController = router.get('rMHighAvailabilityWizardController'),
-              currStep = rMHighAvailabilityWizardController.get('currentStep'),
-              self = this;
-          App.router.get('wizardWatcherController').resetUser();
+              currStep = rMHighAvailabilityWizardController.get('currentStep');
           if (parseInt(currStep) === 4) {
             App.showConfirmationPopup(function () {
-              router.get('updateController').set('isWorking', true);
-              rMHighAvailabilityWizardController.finish();
-              App.clusterStatus.setClusterStatus({
-                clusterName: App.router.getClusterName(),
-                clusterState: 'DEFAULT',
-                localdb: App.db.data
-              }, {
-                alwaysCallback: function () {
-                  self.hide();
-                  router.transitionTo('main.services.index');
-                  Em.run.next(function() {
-                    location.reload();
-                  });
-                }
-              });
+              rMHighAvailabilityWizardController.resetOnClose(rMHighAvailabilityWizardController, 'main.services.index');
             }, Em.I18n.t('admin.rm_highAvailability.closePopup'));
           } else {
-            router.get('updateController').set('isWorking', true);
-            rMHighAvailabilityWizardController.finish();
-            App.clusterStatus.setClusterStatus({
-              clusterName: App.router.getClusterName(),
-              clusterState: 'DEFAULT',
-              localdb: App.db.data
-            }, {
-              alwaysCallback: function () {
-                self.hide();
-                router.transitionTo('main.services.index');
-                Em.run.next(function() {
-                  location.reload();
-                });
-              }
-            });
+            rMHighAvailabilityWizardController.resetOnClose(rMHighAvailabilityWizardController, 'main.services.index');
           }
         },
         didInsertElement: function () {
@@ -197,20 +167,7 @@ module.exports = App.WizardRoute.extend({
     },
     next: function (router) {
       var controller = router.get('rMHighAvailabilityWizardController');
-      controller.finish();
-      App.clusterStatus.setClusterStatus({
-        clusterName: controller.get('content.cluster.name'),
-        clusterState: 'DEFAULT',
-        localdb: App.db.data
-      }, {
-        alwaysCallback: function () {
-          controller.get('popup').hide();
-          router.transitionTo('main.services.index');
-          Em.run.next(function () {
-            location.reload();
-          });
-        }
-      });
+      controller.resetOnClose(controller, 'main.services.index');
     }
   })
 

+ 65 - 0
ambari-web/test/controllers/wizard_test.js

@@ -1639,4 +1639,69 @@ describe('App.WizardController', function () {
 
   });
 
+  describe("#resetOnClose()", function () {
+    var ctrl = Em.Object.create({
+      finish: Em.K,
+      popup: {
+        hide: Em.K
+      }
+    });
+
+    var mock = Em.Object.create({
+      resetUser: Em.K
+    });
+
+    beforeEach(function () {
+      sinon.stub(ctrl, 'finish');
+      sinon.stub(ctrl.popup, 'hide');
+      sinon.stub(App.router, 'get').returns(mock);
+      sinon.stub(App.clusterStatus, 'setClusterStatus', function (arg1, arg2) {
+        arg2.alwaysCallback();
+      });
+      sinon.stub(Em.run, 'next');
+      sinon.stub(mock, 'resetUser');
+      sinon.stub(App.router, 'transitionTo');
+
+      c.resetOnClose(ctrl, 'path');
+    });
+
+    afterEach(function () {
+      ctrl.finish.restore();
+      ctrl.popup.hide.restore();
+      App.router.get.restore();
+      App.clusterStatus.setClusterStatus.restore();
+      Em.run.next.restore();
+      mock.resetUser.restore();
+      App.router.transitionTo.restore();
+    });
+
+    it("resetUser should be called", function () {
+      expect(mock.resetUser.calledOnce).to.be.true;
+    });
+
+    it("finish should be called", function () {
+      expect(ctrl.finish.calledOnce).to.be.true;
+    });
+
+    it("isWorking should be true", function () {
+      expect(mock.get('isWorking')).to.be.true;
+    });
+
+    it("App.clusterStatus.setClusterStatus should be called", function () {
+      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
+    });
+
+    it("popup should be hidden", function () {
+      expect(ctrl.get('popup').hide.calledOnce).to.be.true;
+    });
+
+    it("App.router.transitionTo should be called", function () {
+      expect(App.router.transitionTo.calledOnce).to.be.true;
+    });
+
+    it("Em.run.next should be called", function () {
+      expect(Em.run.next.calledOnce).to.be.true;
+    });
+  });
+
 });