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