You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2015/09/10 01:57:58 UTC

ambari git commit: AMBARI-12966. Create Unit Tests for "Prompt user to save checkpoint before shutdown HDFS if last checkpoint is too old". (xiwang via yusaku)

Repository: ambari
Updated Branches:
  refs/heads/trunk b47318902 -> c2ec02fe6


AMBARI-12966. Create Unit Tests for "Prompt user to save checkpoint before shutdown HDFS if last checkpoint is too old". (xiwang via yusaku)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c2ec02fe
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c2ec02fe
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c2ec02fe

Branch: refs/heads/trunk
Commit: c2ec02fe6314a538281c6dd997928ec09224f77c
Parents: b473189
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Sep 9 16:57:36 2015 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Sep 9 16:57:36 2015 -0700

----------------------------------------------------------------------
 .../test/controllers/main/host/details_test.js  | 149 ++++++++
 .../main/service/info/config_test.js            |  30 ++
 .../test/controllers/main/service/item_test.js  | 344 ++++++++++++++++++-
 .../test/controllers/main/service_test.js       |  24 ++
 .../views/main/service/info/summary_test.js     |  56 +++
 5 files changed, 599 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c2ec02fe/ambari-web/test/controllers/main/host/details_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host/details_test.js b/ambari-web/test/controllers/main/host/details_test.js
index 0841934..463bbc2 100644
--- a/ambari-web/test/controllers/main/host/details_test.js
+++ b/ambari-web/test/controllers/main/host/details_test.js
@@ -94,6 +94,21 @@ describe('App.MainHostDetailsController', function () {
       App.showConfirmationPopup.restore();
       controller.sendComponentCommand.restore();
     });
+
+    it('stop NN, should check last NN checkpoint before stop', function () {
+      var event = {
+        context: Em.Object.create({
+          displayName: 'NameNode',
+          componentName: 'NAMENODE'
+        })
+      };
+      sinon.stub(controller, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
+      controller.stopComponent(event);
+      expect(controller.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+      controller.checkNnLastCheckpointTime.restore();
+    });
   });
 
   describe('#sendComponentCommand()', function () {
@@ -442,6 +457,21 @@ describe('App.MainHostDetailsController', function () {
       popup.onPrimary();
       expect(batchUtils.restartHostComponents.calledOnce).to.be.true;
     });
+
+    it('restart NN, should check last NN checkpoint before restart', function () {
+      var event = {
+        context: Em.Object.create({
+          displayName: 'NameNode',
+          componentName: 'NAMENODE'
+        })
+      };
+      sinon.stub(controller, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
+      controller.restartComponent(event);
+      expect(controller.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+      controller.checkNnLastCheckpointTime.restore();
+    });
   });
 
   describe('#addComponent()', function () {
@@ -2919,4 +2949,123 @@ describe('App.MainHostDetailsController', function () {
       expect(controller.loadConfigs.calledWith('loadStormConfigs')).to.be.true;
     });
   });
+
+  describe("#parseNnCheckPointTime", function () {
+    var tests = [
+      {
+        m: "NameNode on this host has JMX data, the last checkpoint time is less than 12 hours ago",
+        data:
+        {
+          "href" : "",
+          "HostRoles" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "host_name" : "c6401.ambari.apache.org"
+          },
+          "metrics" : {
+            "dfs" : {
+              "FSNamesystem" : {
+                "HAState" : "active",
+                "LastCheckpointTime" : 1435775648000
+              }
+            }
+          }
+        },
+        result: false
+      },
+      {
+        m: "NameNode on this host has JMX data, the last checkpoint time is > 12 hours ago",
+        data:
+        {
+          "href" : "",
+          "HostRoles" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "host_name" : "c6401.ambari.apache.org"
+          },
+          "metrics" : {
+            "dfs" : {
+              "FSNamesystem" : {
+                "HAState" : "active",
+                "LastCheckpointTime" : 1435617248000
+              }
+            }
+          }
+        },
+        result: "c6401.ambari.apache.org"
+      },
+      {
+        m: "NameNode(standby) on this host has JMX data",
+        data:
+        {
+          "href" : "",
+          "HostRoles" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "host_name" : "c6401.ambari.apache.org"
+          },
+          "metrics" : {
+            "dfs" : {
+              "FSNamesystem" : {
+                "HAState" : "standby",
+                "LastCheckpointTime" : 1435617248000
+              }
+            }
+          }
+        },
+        result: false
+      },
+      {
+        m: "NameNode on this host has no JMX data",
+        data:
+        {
+          "href" : "",
+          "HostRoles" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "host_name" : "c6401.ambari.apache.org"
+          },
+          "metrics" : {
+            "dfs" : {
+              "FSNamesystem" : {
+                "HAState" : "active"
+              }
+            }
+          }
+        },
+        result: null
+      },
+      {
+        m: "NameNode on this host has no JMX data",
+        data:
+        {
+          "href" : "",
+          "HostRoles" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "host_name" : "c6401.ambari.apache.org"
+          },
+          "metrics" : {
+          }
+        },
+        result: null
+      }
+    ];
+
+    beforeEach(function () {
+      sinon.stub(App, 'dateTime').returns(1435790048000);
+    });
+
+    afterEach(function () {
+      App.dateTime.restore();
+    });
+
+    tests.forEach(function (test) {
+      it(test.m, function () {
+        var mainHostDetailsController = App.MainHostDetailsController.create({isNNCheckpointTooOld: null});
+        mainHostDetailsController.parseNnCheckPointTime(test.data);
+        expect(mainHostDetailsController.get('isNNCheckpointTooOld')).to.equal(test.result);
+      });
+    });
+  });
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/c2ec02fe/ambari-web/test/controllers/main/service/info/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/config_test.js b/ambari-web/test/controllers/main/service/info/config_test.js
index cccefa8..6c6c459 100644
--- a/ambari-web/test/controllers/main/service/info/config_test.js
+++ b/ambari-web/test/controllers/main/service/info/config_test.js
@@ -321,6 +321,36 @@ describe("App.MainServiceInfoConfigsController", function () {
       mainServiceInfoConfigsController.restartAllStaleConfigComponents().onPrimary();
       expect(batchUtils.restartAllServiceHostComponents.calledOnce).to.equal(true);
     });
+    it("trigger check last check point warning before triggering restartAllServiceHostComponents", function () {
+      var mainConfigsControllerHdfsStarted = App.MainServiceInfoConfigsController.create({
+        content: {
+          serviceName: "HDFS",
+          hostComponents: [{
+            componentName: 'NAMENODE',
+            workStatus: 'STARTED'
+          }],
+          restartRequiredHostsAndComponents: {
+            "host1": ['NameNode'],
+            "host2": ['DataNode', 'ZooKeeper']
+          }
+        }
+      });
+      var mainServiceItemController = App.MainServiceItemController.create({});
+      sinon.stub(mainServiceItemController, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
+      sinon.stub(App.router, 'get', function(k) {
+        if ('mainServiceItemController' === k) {
+          return mainServiceItemController;
+        }
+        return Em.get(App.router, k);
+      });
+
+      mainConfigsControllerHdfsStarted.restartAllStaleConfigComponents();
+      expect(mainServiceItemController.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+      mainServiceItemController.checkNnLastCheckpointTime.restore();
+      App.router.get.restore();
+    });
   });
 
   describe("#doCancel", function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/c2ec02fe/ambari-web/test/controllers/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/item_test.js b/ambari-web/test/controllers/main/service/item_test.js
index d80d3ff..f27508b 100644
--- a/ambari-web/test/controllers/main/service/item_test.js
+++ b/ambari-web/test/controllers/main/service/item_test.js
@@ -398,12 +398,27 @@ describe('App.MainServiceItemController', function () {
         }]
       }
     });
+    var mainServiceItemControllerHdfsStarted = App.MainServiceItemController.create({
+      content: {
+        serviceName: "HDFS",
+        hostComponents: [ {
+          componentName: 'NAMENODE',
+          workStatus: 'STARTED'
+        }]
+      }
+    });
     beforeEach(function () {
       sinon.spy(mainServiceItemController, "startStopPopupPrimary");
+      sinon.spy(mainServiceItemControllerHdfsStarted, "startStopPopupPrimary");
       sinon.spy(Em.I18n, "t");
+      sinon.stub(mainServiceItemControllerHdfsStarted, 'checkNnLastCheckpointTime', function(callback) {
+        return callback;
+      });
     });
     afterEach(function () {
       mainServiceItemController.startStopPopupPrimary.restore();
+      mainServiceItemControllerHdfsStarted.startStopPopupPrimary.restore();
+      mainServiceItemControllerHdfsStarted.checkNnLastCheckpointTime.restore();
       Em.I18n.t.restore();
     });
     it("start start/stop service popup", function () {
@@ -411,6 +426,11 @@ describe('App.MainServiceItemController', function () {
       expect(mainServiceItemController.startStopPopupPrimary.calledOnce).to.equal(true);
     });
 
+    it ("should popup warning to check last checkpoint time if work status is STARTED", function() {
+      mainServiceItemControllerHdfsStarted.startStopPopup(event, "INSTALLED");
+      expect(mainServiceItemControllerHdfsStarted.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+    });
+
     describe("modal messages", function() {
       
       beforeEach(function () {
@@ -512,25 +532,50 @@ describe('App.MainServiceItemController', function () {
 
   describe("#restartAllHostComponents", function () {
     var temp = batchUtils.restartAllServiceHostComponents;
+    var mainServiceItemController = App.MainServiceItemController.create({
+      content: {
+        serviceName: "HDFS",
+        hostComponents: [{
+          componentName: 'NAMENODE',
+          workStatus: 'STARTED'
+        }]
+      }
+    });
     beforeEach(function () {
       batchUtils.restartAllServiceHostComponents = Em.K;
       sinon.spy(batchUtils, "restartAllServiceHostComponents");
       sinon.stub(App.Service, 'find', function() {
         return Em.Object.create({serviceTypes: []});
       });
+      sinon.stub(mainServiceItemController, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
     });
     afterEach(function () {
       batchUtils.restartAllServiceHostComponents.restore();
       batchUtils.restartAllServiceHostComponents = temp;
       App.Service.find.restore();
+      mainServiceItemController.checkNnLastCheckpointTime.restore();
     });
 
-    var mainServiceItemController = App.MainServiceItemController.create({content: {displayName: "HDFS"}});
-
     it("start restartAllHostComponents for service", function () {
-      mainServiceItemController.restartAllHostComponents({}).onPrimary();
+      var controller = App.MainServiceItemController.create({
+        content: {
+          serviceName: "HDFS",
+          hostComponents: [{
+            componentName: 'NAMENODE',
+            workStatus: 'INSTALLED'
+          }]
+        }
+      });
+      controller.restartAllHostComponents({}).onPrimary();
       expect(batchUtils.restartAllServiceHostComponents.calledOnce).to.equal(true);
     });
+
+    it("check last checkpoint time for NameNode before start restartAllHostComponents for service", function () {
+      mainServiceItemController.restartAllHostComponents({});
+      expect(mainServiceItemController.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+    });
   });
 
   describe("#rollingRestart", function () {
@@ -552,6 +597,297 @@ describe('App.MainServiceItemController', function () {
     });
   });
 
+  describe("#parseNnCheckPointTime", function () {
+    var tests = [
+      {
+        m: "NameNode has JMX data, the last checkpoint time is less than 12 hours ago",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "active",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: false
+      },
+      {
+        m: "NameNode has JMX data, the last checkpoint time is > 12 hours ago",
+        data:
+          {"href" : "",
+            "ServiceComponentInfo" : {
+              "cluster_name" : "c123",
+              "component_name" : "NAMENODE",
+              "service_name" : "HDFS"
+            },
+            "host_components" : [
+              {
+                "href" : "",
+                "HostRoles" : {
+                  "cluster_name" : "c123",
+                  "component_name" : "NAMENODE",
+                  "host_name" : "c6401.ambari.apache.org"
+                },
+                "metrics" : {
+                  "dfs" : {
+                    "FSNamesystem" : {
+                      "HAState" : "active",
+                      "LastCheckpointTime" : 1435617248000
+                    }
+                  }
+                }
+              }
+            ]
+          },
+        result: "c6401.ambari.apache.org"
+      },
+      {
+        m: "NameNode has no JMX data available",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "active"
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: null
+      },
+      {
+        m: "HA enabled, both active and standby NN has JMX data normally.",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "active",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            },
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6402.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "standby",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: false
+      },
+      {
+        m: "HA enabled, both NamoNodes are standby NN",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "standby",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            },
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6402.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "standby",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: false
+      },
+      {
+        m: "HA enabled, active NN has no JMX data, use the standby's data",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "active"
+                  }
+                }
+              }
+            },
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6402.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "standby",
+                    "LastCheckpointTime" : 1435775648000
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: false
+      },
+      {
+        m: "HA enabled, both NamoNodes no JMX data",
+        data:
+        {"href" : "",
+          "ServiceComponentInfo" : {
+            "cluster_name" : "c123",
+            "component_name" : "NAMENODE",
+            "service_name" : "HDFS"
+          },
+          "host_components" : [
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6401.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "active"
+                  }
+                }
+              }
+            },
+            {
+              "href" : "",
+              "HostRoles" : {
+                "cluster_name" : "c123",
+                "component_name" : "NAMENODE",
+                "host_name" : "c6402.ambari.apache.org"
+              },
+              "metrics" : {
+                "dfs" : {
+                  "FSNamesystem" : {
+                    "HAState" : "standby"
+                  }
+                }
+              }
+            }
+          ]
+        },
+        result: null
+      }
+    ];
+
+    beforeEach(function () {
+      sinon.stub(App, 'dateTime').returns(1435790048000);
+    });
+
+    afterEach(function () {
+      App.dateTime.restore();
+    });
+
+    tests.forEach(function (test) {
+      it(test.m, function () {
+        var mainServiceItemController = App.MainServiceItemController.create({isNNCheckpointTooOld: null});
+        mainServiceItemController.parseNnCheckPointTime(test.data);
+        expect(mainServiceItemController.get('isNNCheckpointTooOld')).to.equal(test.result);
+      });
+    });
+  });
+
   describe("#isStartDisabled", function () {
     var tests = [
       {
@@ -587,7 +923,7 @@ describe('App.MainServiceItemController', function () {
     });
   });
 
-  describe("#isSopDisabled", function () {
+  describe("#isStopDisabled", function () {
     var tests = [
       {
         content: {

http://git-wip-us.apache.org/repos/asf/ambari/blob/c2ec02fe/ambari-web/test/controllers/main/service_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service_test.js b/ambari-web/test/controllers/main/service_test.js
index 0b3b40c..b228279 100644
--- a/ambari-web/test/controllers/main/service_test.js
+++ b/ambari-web/test/controllers/main/service_test.js
@@ -235,6 +235,30 @@ describe('App.MainServiceController', function () {
       expect(Em.I18n.t.calledWith('services.service.stop.confirmButton')).to.be.ok;
     });
 
+    it ("should check last checkpoint for NN before confirming stop", function() {
+      var mainServiceItemController = App.MainServiceItemController.create({});
+      sinon.stub(mainServiceItemController, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
+      sinon.stub(App.router, 'get', function(k) {
+        if ('mainServiceItemController' === k) {
+          return mainServiceItemController;
+        }
+        return Em.get(App.router, k);
+      });
+      sinon.stub(App.Service, 'find', function() {
+        return [{
+          serviceName: "HDFS",
+          workStatus: "STARTED"
+        }];
+      });
+      mainServiceController.startStopAllService(event, "INSTALLED");
+      expect(mainServiceItemController.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+      mainServiceItemController.checkNnLastCheckpointTime.restore();
+      App.router.get.restore();
+      App.Service.find.restore();
+    });
+
     it ("should confirm start if state is not INSTALLED", function() {
       mainServiceController.startStopAllService(event, "STARTED");
       expect(Em.I18n.t.calledWith('services.service.startAll.confirmMsg')).to.be.ok;

http://git-wip-us.apache.org/repos/asf/ambari/blob/c2ec02fe/ambari-web/test/views/main/service/info/summary_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/info/summary_test.js b/ambari-web/test/views/main/service/info/summary_test.js
index b6ac8d3..1db8c1a 100644
--- a/ambari-web/test/views/main/service/info/summary_test.js
+++ b/ambari-web/test/views/main/service/info/summary_test.js
@@ -19,6 +19,7 @@
 
 var App = require('app');
 require('views/main/service/info/summary');
+var batchUtils = require('utils/batch_scheduled_requests');
 
 describe('App.MainServiceInfoSummaryView', function() {
 
@@ -387,4 +388,59 @@ describe('App.MainServiceInfoSummaryView', function() {
     });
 
   });
+
+  describe("#restartAllStaleConfigComponents", function () {
+    it("trigger restartAllServiceHostComponents", function () {
+      var view = App.MainServiceInfoSummaryView.create({
+        controller: Em.Object.create({
+          content: {
+            serviceName: "HDFS"
+          },
+          getActiveWidgetLayout: Em.K
+        }),
+        service: Em.Object.create({
+          displayName: 'HDFS'
+        })
+      });
+      sinon.stub(batchUtils, "restartAllServiceHostComponents", Em.K);
+      view.restartAllStaleConfigComponents().onPrimary();
+      expect(batchUtils.restartAllServiceHostComponents.calledOnce).to.equal(true);
+      batchUtils.restartAllServiceHostComponents.restore();
+    });
+    it("trigger check last check point warning before triggering restartAllServiceHostComponents", function () {
+      var view = App.MainServiceInfoSummaryView.create({
+        controller: Em.Object.create({
+          content: {
+            serviceName: "HDFS",
+            hostComponents: [{
+              componentName: 'NAMENODE',
+              workStatus: 'STARTED'
+            }],
+            restartRequiredHostsAndComponents: {
+              "host1": ['NameNode'],
+              "host2": ['DataNode', 'ZooKeeper']
+            }
+          },
+          getActiveWidgetLayout: Em.K
+        }),
+        service: Em.Object.create({
+          displayName: 'HDFS'
+        })
+      });
+      var mainServiceItemController = App.MainServiceItemController.create({});
+      sinon.stub(mainServiceItemController, 'checkNnLastCheckpointTime', function() {
+        return true;
+      });
+      sinon.stub(App.router, 'get', function(k) {
+        if ('mainServiceItemController' === k) {
+          return mainServiceItemController;
+        }
+        return Em.get(App.router, k);
+      });
+      view.restartAllStaleConfigComponents();
+      expect(mainServiceItemController.checkNnLastCheckpointTime.calledOnce).to.equal(true);
+      mainServiceItemController.checkNnLastCheckpointTime.restore();
+      App.router.get.restore();
+    });
+  });
 });
\ No newline at end of file