YARN-5888. [UI2] Improve unit tests for new YARN UI. Contributed by Akhil PB.

(cherry picked from commit c6d7d3eb05)
This commit is contained in:
Sunil G 2018-04-19 21:37:35 +05:30
parent 128b09ee43
commit aa64def228
43 changed files with 1755 additions and 276 deletions

View File

@ -1,46 +0,0 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ember from 'ember';
export function nodeName(params/*, hash*/) {
// Place a menu within a panel inside col-md-2 container.
console.log('nodes-uid', params[0]);
var nodeIdSplitAtPort = params[0];
var portIndex = nodeIdSplitAtPort.indexOf(':');
if (portIndex !== -1) {
nodeIdSplitAtPort = nodeIdSplitAtPort.substring(0, portIndex) +
':​' + nodeIdSplitAtPort.substring(portIndex + 1);
}
var normalizedNodeId = '';
var splitsAlongDots = nodeIdSplitAtPort.split('.');
if (splitsAlongDots) {
var len = splitsAlongDots.length;
for (var i = 0; i < len; i++) {
normalizedNodeId = normalizedNodeId + splitsAlongDots[i];
if (i !== len - 1) {
normalizedNodeId = normalizedNodeId + '.&#8203;';
}
}
} else {
normalizedNodeId = nodeIdSplitAtPort;
}
return Ember.String.htmlSafe(normalizedNodeId);
}
export default Ember.Helper.helper(nodeName);

View File

@ -94,7 +94,7 @@ export default DS.Model.extend({
hasUserUsages: function() {
return this.get("userUsagesDonutChartData").length > 0;
}.property(),
}.property("userUsagesDonutChartData"),
numOfApplicationsDonutChartData: function() {
return [

View File

@ -16,7 +16,7 @@
* limitations under the License.
*/
import Resolver from 'ember/resolver';
import Resolver from 'ember-resolver';
import config from '../../config/environment';
var resolver = Resolver.create();

View File

@ -44,6 +44,7 @@
<script src="assets/yarn-ui.js"></script>
<script src="testem.js"></script>
<script src="assets/test-loader.js"></script>
<script src="assets/tests.js"></script>
{{content-for 'body-footer'}}
{{content-for 'test-body-footer'}}

View File

@ -24,20 +24,27 @@ moduleForComponent('breadcrumb-bar', 'Integration | Component | breadcrumb bar',
});
test('it renders', function(assert) {
var breadcrumbs = [{
text: "Home",
routeName: "application"
}, {
text: "Test"
}];
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL +
this.set("breadcrumbs", breadcrumbs);
this.render(hbs`{{breadcrumb-bar}}`);
this.render(hbs`{{breadcrumb-bar breadcrumbs=breadcrumbs}}`);
assert.equal(this.$().text().trim(), '');
// Template block usage:" + EOL +
this.render(hbs`
{{#breadcrumb-bar}}
template block text
{{/breadcrumb-bar}}
`);
assert.equal(this.$().text().trim(), 'template block text');
assert.equal(this.$('ol.breadcrumb li').length, 2);
assert.equal(this.$('button.refresh').text(), 'Refresh');
});
test('should trigger refresh action', function(assert) {
this.on('refresh', function() {
assert.ok("refresh action");
});
this.render(hbs`{{breadcrumb-bar action="refresh"}}`);
this.$('button.refresh').click();
});

View File

@ -0,0 +1,59 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
import Converter from 'yarn-ui/utils/converter';
moduleFor('adapter:yarn-app-attempt', 'Unit | Adapter | yarn app attempt', {
unit: true
});
test('Basic creation test', function(assert) {
let adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
assert.ok(adapter);
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.ok(adapter.urlForQuery);
assert.ok(adapter.urlForFindRecord);
assert.equal(adapter.namespace, "ws/v1/cluster");
});
test("urlForQuery test", function(assert) {
let adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
var host = adapter.host;
assert.equal(adapter.urlForQuery({appId: "application_1472139065385_0007"}),
host + "/ws/v1/cluster/apps/application_1472139065385_0007/appattempts");
});
test("urlForFindRecord test", function(assert) {
let adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
var host = adapter.host;
var attemptId = "appattempt_1472139065385_0007_000001";
assert.equal(adapter.urlForFindRecord(attemptId),
host + "/ws/v1/cluster/apps/" +
Converter.attemptIdToAppId(attemptId) + "/appattempts/" + attemptId);
});

View File

@ -19,12 +19,40 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-app', 'Unit | Adapter | yarn app', {
// Specify the other units that are required for this test.
// needs: ['serializer:foo']
unit: true
});
// Replace this with your real tests.
test('it exists', function(assert) {
var adapter = this.subject();
assert.ok(adapter);
test('Basic creation test', function(assert) {
var adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
assert.ok(adapter);
assert.ok(adapter.urlForQuery);
assert.ok(adapter.urlForFindRecord);
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.equal(adapter.namespace, "ws/v1/cluster");
});
test("urlForQuery test", function(assert) {
var adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
var host = adapter.host;
assert.equal(adapter.urlForQuery({state: "RUNNING"}),
host + "/ws/v1/cluster/apps/?state=RUNNING");
});
test("urlForFindRecord test", function(assert) {
var adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
var host = adapter.host;
var appId= "application_1111111111_1111";
assert.equal(adapter.urlForFindRecord(appId),
host + "/ws/v1/cluster/apps/" + appId);
});

View File

@ -20,10 +20,14 @@ import { moduleFor, test } from 'ember-qunit';
import Constants from 'yarn-ui/constants';
moduleFor('adapter:yarn-container-log', 'Unit | Adapter | ContainerLog', {
unit: true
});
test('Basic creation', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "ws/v1/node"
});
assert.ok(adapter);
assert.ok(adapter.urlForFindRecord);
@ -36,7 +40,10 @@ test('Basic creation', function(assert) {
});
test('urlForFindRecord test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200/",
namespace: "ws/v1/node"
});
let host = adapter.host;
assert.equal(adapter.urlForFindRecord("localhost:8042" +
Constants.PARAM_SEPARATOR + "container_e27_11111111111_0001_01_000001" +
@ -52,8 +59,11 @@ test('ajaxOptions test', function(assert) {
});
test('findRecord test', function(assert) {
let adapter = this.subject(),
testModel = { modelName: "testModel" },
let adapter = this.subject({
host: "localhost:4200/",
namespace: "ws/v1/node"
});
let testModel = { modelName: "testModel" },
testStore = {},
testSnapshot = {};
let host = adapter.host;

View File

@ -0,0 +1,38 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-container', 'Unit | Adapter | yarn container', {
unit: true
});
test('Basic creation test', function(assert) {
let adapter = this.subject({
host: "localhost:8088",
namespace: "ws/v1/cluster"
});
assert.ok(adapter);
assert.ok(adapter.headers);
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.ok(adapter.urlForQuery);
assert.ok(adapter.ajax);
assert.equal(adapter.headers.Accept, "application/json");
assert.equal(adapter.namespace, "ws/v1/cluster");
});

View File

@ -19,10 +19,14 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-node-app', 'Unit | Adapter | NodeApp', {
unit: true
});
test('Basic creation', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
assert.expect(11);
assert.ok(adapter);
assert.ok(adapter.urlForQueryRecord);
@ -34,35 +38,44 @@ test('Basic creation', function(assert) {
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.equal("application/json", adapter.headers.Accept);
assert.equal("ws/v1/node", adapter.namespace);
assert.equal("{nodeAddress}/ws/v1/node", adapter.namespace);
});
test('urlForQueryRecord test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let host = adapter.host;
assert.equal(
host + "localhost:8042/ws/v1/node/apps/application_1111111111_1111",
host + "/localhost:8042/ws/v1/node/apps/application_1111111111_1111",
adapter.urlForQueryRecord(
{nodeAddr: "localhost:8042", appId: "application_1111111111_1111"}));
});
test('urlForQuery test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let host = adapter.host;
assert.equal(host + "localhost:8042/ws/v1/node/apps",
assert.equal(host + "/localhost:8042/ws/v1/node/apps",
adapter.urlForQuery({nodeAddr: "localhost:8042"}));
});
test('query test', function(assert) {
let adapter = this.subject(),
testModel = { modelName: "testModel" },
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let testModel = { modelName: "testModel" },
testStore = {},
testQuery = {nodeAddr: "localhost:8042"};
let host = adapter.host;
assert.expect(3);
adapter.ajax = function (url, method, hash) {
assert.equal(host + "localhost:8042/ws/v1/node/apps", url);
assert.equal(host + "/localhost:8042/ws/v1/node/apps", url);
assert.equal('GET', method);
assert.equal(null, hash.data);
};
@ -71,8 +84,11 @@ test('query test', function(assert) {
});
test('queryRecord test', function(assert) {
let adapter = this.subject(),
testModel = { modelName: "testModel" },
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let testModel = { modelName: "testModel" },
testStore = {},
testQuery = {
nodeAddr: "localhost:8042",
@ -82,9 +98,7 @@ test('queryRecord test', function(assert) {
assert.expect(3);
adapter.ajax = function (url, method, hash) {
assert.equal(
host + "localhost:8042/ws/v1/node/apps/application_1111111111_1111",
url);
assert.equal(host + "/localhost:8042/ws/v1/node/apps/application_1111111111_1111", url);
assert.equal('GET', method);
assert.equal(null, hash.data);
};

View File

@ -19,10 +19,14 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-node-container', 'Unit | Adapter | NodeContainer', {
unit: true
});
test('Basic creation', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
assert.expect(11);
assert.ok(adapter);
assert.ok(adapter.urlForQueryRecord);
@ -34,13 +38,16 @@ test('Basic creation', function(assert) {
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.equal("application/json", adapter.headers.Accept);
assert.equal("ws/v1/node", adapter.namespace);
assert.equal("{nodeAddress}/ws/v1/node", adapter.namespace);
});
test('urlForQueryRecord test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let host = adapter.host;
assert.equal(host + "localhost:8042/ws/v1/node/containers/" +
assert.equal(host + "/localhost:8042/ws/v1/node/containers/" +
"container_e27_11111111111_0001_01_000001",
adapter.urlForQueryRecord(
{nodeHttpAddr: "localhost:8042",
@ -48,22 +55,28 @@ test('urlForQueryRecord test', function(assert) {
});
test('urlForQuery test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let host = adapter.host;
assert.equal(host + "localhost:8042/ws/v1/node/containers",
assert.equal(host + "/localhost:8042/ws/v1/node/containers",
adapter.urlForQuery({nodeHttpAddr: "localhost:8042"}));
});
test('query test', function(assert) {
let adapter = this.subject(),
testModel = { modelName: "testModel" },
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let testModel = { modelName: "testModel" },
testStore = {},
testQuery = {nodeHttpAddr: "localhost:8042"};
let host = adapter.host;
assert.expect(3);
adapter.ajax = function (url, method, hash) {
assert.equal(host + "localhost:8042/ws/v1/node/containers", url);
assert.equal(host + "/localhost:8042/ws/v1/node/containers", url);
assert.equal('GET', method);
assert.equal(null, hash.data);
};
@ -72,8 +85,11 @@ test('query test', function(assert) {
});
test('queryRecord test', function(assert) {
let adapter = this.subject(),
testModel = { modelName: "testModel" },
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let testModel = { modelName: "testModel" },
testStore = {},
testQuery = {
nodeHttpAddr: "localhost:8042",
@ -83,7 +99,7 @@ test('queryRecord test', function(assert) {
assert.expect(3);
adapter.ajax = function (url, method, hash) {
assert.equal(host + "localhost:8042/ws/v1/node/containers/" +
assert.equal(host + "/localhost:8042/ws/v1/node/containers/" +
"container_e27_11111111111_0001_01_000001", url);
assert.equal('GET', method);
assert.equal(null, hash.data);

View File

@ -19,10 +19,14 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-node', 'Unit | Adapter | Node', {
unit: true
});
test('Basic creation', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
assert.ok(adapter);
assert.ok(adapter.urlForFindRecord);
@ -31,12 +35,15 @@ test('Basic creation', function(assert) {
assert.ok(adapter.host);
assert.ok(adapter.namespace);
assert.equal(adapter.headers.Accept, "application/json");
assert.equal(adapter.namespace, "ws/v1/node");
assert.equal(adapter.namespace, "{nodeAddress}/ws/v1/node");
});
test('urlForFindRecord test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "{nodeAddress}/ws/v1/node"
});
let host = adapter.host;
assert.equal(adapter.urlForFindRecord("localhost:8042"),
host + "localhost:8042/ws/v1/node");
host + "/localhost:8042/ws/v1/node");
});

View File

@ -19,12 +19,14 @@
import { moduleFor, test } from 'ember-qunit';
moduleFor('adapter:yarn-rm-node', 'Unit | Adapter | RMNode', {
// Specify the other units that are required for this test.
// needs: ['serializer:foo']
unit: true
});
test('Basic creation', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "ws/v1/cluster"
});
assert.ok(adapter);
assert.ok(adapter.urlForFindRecord);
@ -37,7 +39,10 @@ test('Basic creation', function(assert) {
});
test('urlForFindRecord test', function(assert) {
let adapter = this.subject();
let adapter = this.subject({
host: "localhost:4200",
namespace: "ws/v1/cluster"
});
let host = adapter.host;
assert.equal(adapter.urlForFindRecord("localhost:8042"),
host + "/ws/v1/cluster/nodes/localhost:8042");

View File

@ -17,14 +17,19 @@
*/
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('controller:yarn-app', 'Unit | Controller | yarn app', {
// Specify the other units that are required for this test.
// needs: ['controller:foo']
unit: true
});
// Replace this with your real tests.
test('it exists', function(assert) {
test('Basic creation test', function(assert) {
let controller = this.subject();
assert.ok(controller);
assert.ok(controller.amHostHttpAddressFormatted);
var app = Ember.Object.create({
amHostHttpAddress: 'localhost:8042'
});
controller.set('model', Ember.Object.create({app: app}));
assert.equal(controller.get('amHostHttpAddressFormatted'), 'http://localhost:8042');
});

View File

@ -20,13 +20,12 @@ import Ember from 'ember';
import { initialize } from '../../../initializers/env';
import { module, test } from 'qunit';
var registry, application;
var application;
module('Unit | Initializer | env', {
beforeEach: function() {
Ember.run(function() {
application = Ember.Application.create();
registry = application.registry;
application.deferReadiness();
});
}
@ -34,7 +33,7 @@ module('Unit | Initializer | env', {
// Replace this with your real tests.
test('it works', function(assert) {
initialize(registry, application);
initialize(application);
// you would normally confirm the results of the initializer here
assert.ok(true);

View File

@ -20,13 +20,12 @@ import Ember from 'ember';
import { initialize } from '../../../initializers/hosts';
import { module, test } from 'qunit';
var registry, application;
var application;
module('Unit | Initializer | hosts', {
beforeEach: function() {
Ember.run(function() {
application = Ember.Application.create();
registry = application.registry;
application.deferReadiness();
});
}
@ -34,7 +33,7 @@ module('Unit | Initializer | hosts', {
// Replace this with your real tests.
test('it works', function(assert) {
initialize(registry, application);
initialize(application);
// you would normally confirm the results of the initializer here
assert.ok(true);

View File

@ -16,26 +16,22 @@
* limitations under the License.
*/
import Ember from 'ember';
import { initialize } from '../../../initializers/jquery';
import { module, test } from 'qunit';
import { moduleForModel, test } from 'ember-qunit';
var registry, application;
module('Unit | Initializer | jquery', {
beforeEach: function() {
Ember.run(function() {
application = Ember.Application.create();
registry = application.registry;
application.deferReadiness();
});
}
moduleForModel('cluster-info', 'Unit | Model | cluster info', {
needs: []
});
// Replace this with your real tests.
test('it works', function(assert) {
initialize(registry, application);
// you would normally confirm the results of the initializer here
assert.ok(true);
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.startedOn);
assert.ok(model.state);
assert.ok(model.haState);
assert.ok(model.rmStateStoreName);
assert.ok(model.resourceManagerVersion);
assert.ok(model.resourceManagerBuildVersion);
assert.ok(model.hadoopVersion);
assert.ok(model.hadoopBuildVersion);
assert.ok(model.hadoopVersionBuiltOn);
});

View File

@ -0,0 +1,81 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
moduleForModel('cluster-metric', 'Unit | Model | cluster metric', {
needs: []
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.appsSubmitted);
assert.ok(model.appsCompleted);
assert.ok(model.appsPending);
assert.ok(model.appsRunning);
assert.ok(model.appsFailed);
assert.ok(model.appsKilled);
assert.ok(model.reservedMB);
assert.ok(model.availableMB);
assert.ok(model.allocatedMB);
assert.ok(model.reservedVirtualCores);
assert.ok(model.availableVirtualCores);
assert.ok(model.allocatedVirtualCores);
assert.ok(model.containersAllocated);
assert.ok(model.containersReserved);
assert.ok(model.containersPending);
assert.ok(model.totalMB);
assert.ok(model.totalVirtualCores);
assert.ok(model.totalNodes);
assert.ok(model.lostNodes);
assert.ok(model.unhealthyNodes);
assert.ok(model.decommissionedNodes);
assert.ok(model.rebootedNodes);
assert.ok(model.activeNodes);
});
test('Testing fields', function(assert) {
let model = this.subject({
"appsCompleted": 0,
"appsPending": 0,
"appsRunning": 0,
"appsFailed": 0,
"appsKilled": 0,
"reservedMB": 0,
"availableMB": 32768,
"allocatedMB": 0,
"activeNodes": 4,
"unhealthyNodes": 0,
"decommissionedNodes": 0,
"reservedVirtualCores": 0,
"availableVirtualCores": 32,
"allocatedVirtualCores": 0
});
assert.deepEqual(model.get('getFinishedAppsDataForDonutChart'),
[{label: "Completed", value: 0}, {label: "Killed", value: 0}, {label: "Failed", value: 0}]);
assert.deepEqual(model.get('getRunningAppsDataForDonutChart'),
[{label: "Pending", value: 0}, {label: "Running", value: 0}]);
assert.deepEqual(model.get('getNodesDataForDonutChart'),
[{label: "Active", value: 4}, {label: "Unhealthy", value: 0}, {label: "Decomissioned", value: 0}]);
assert.deepEqual(model.get('getMemoryDataForDonutChart'),
[{label: "Allocated", value: 0}, {label: "Reserved", value: 0}, {label: "Available", value: 32768}]);
assert.deepEqual(model.get('getVCoreDataForDonutChart'),
[{label: "Allocated", value: 0}, {label: "Reserved", value: 0}, {label: "Available", value: 32}]);
});

View File

@ -0,0 +1,65 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
import Converter from 'yarn-ui/utils/converter';
moduleForModel('yarn-app-attempt', 'Unit | Model | yarn app attempt', {
needs: []
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.startTime);
assert.ok(model.startedTime);
assert.ok(model.finishedTime);
assert.ok(model.containerId);
assert.ok(model.amContainerId);
assert.ok(model.nodeHttpAddress);
assert.ok(model.nodeId);
assert.ok(model.hosts);
assert.ok(model.logsLink);
assert.ok(model.state);
assert.ok(model.appAttemptId);
});
test('Testing fields', function(assert) {
let model = this.subject({
"id": "appattempt_1479277364592_0001_000001",
"startedTime": Converter.timeStampToDate("1479280913398"),
"finishedTime": Converter.timeStampToDate("1479280966401"),
"amContainerId": "container_e01_1479277364592_0001_01_000001",
"hosts": "N/A",
"state": "FINISHED",
"appAttemptId": "appattempt_1479277364592_0001_000001"
});
assert.equal(model.get('appId'), "application_1479277364592_0001");
assert.equal(model.get('startTs'), 1479280913000);
assert.equal(model.get('finishedTs'), 1479280966000);
assert.equal(model.get('shortAppAttemptId'), "appattempt_1479277364592_0001_000001");
assert.equal(model.get('appMasterContainerId'), "container_e01_1479277364592_0001_01_000001");
assert.equal(model.get('IsAmNodeUrl'), false);
assert.equal(model.get('amNodeId'), "N/A");
assert.equal(model.get('IsLinkAvailable'), false);
assert.equal(model.get('elapsedTime'), "53 Secs");
assert.equal(model.get('link'), "/yarn-app-attempt/appattempt_1479277364592_0001_000001");
assert.equal(model.get('linkname'), "yarn-app-attempt");
assert.equal(model.get('attemptState'), "FINISHED");
});

View File

@ -19,12 +19,65 @@
import { moduleForModel, test } from 'ember-qunit';
moduleForModel('yarn-app', 'Unit | Model | yarn app', {
// Specify the other units that are required for this test.
needs: []
});
test('it exists', function(assert) {
test('Basic creation test', function(assert) {
var model = this.subject();
// var store = this.store();
assert.ok(!!model);
assert.ok(model);
assert.ok(model.appName);
assert.ok(model.user);
assert.ok(model.queue);
assert.ok(model.state);
assert.ok(model.startTime);
assert.ok(model.elapsedTime);
assert.ok(model.finalStatus);
assert.ok(model.finishedTime);
assert.ok(model.progress);
assert.ok(model.diagnostics);
assert.ok(model.amContainerLogs);
assert.ok(model.amHostHttpAddress);
assert.ok(model.logAggregationStatus);
assert.ok(model.unmanagedApplication);
assert.ok(model.amNodeLabelExpression);
assert.ok(model.applicationTags);
assert.ok(model.applicationType);
assert.ok(model.priority);
assert.ok(model.allocatedMB);
assert.ok(model.allocatedVCores);
assert.ok(model.runningContainers);
assert.ok(model.memorySeconds);
assert.ok(model.vcoreSeconds);
assert.ok(model.preemptedResourceMB);
assert.ok(model.preemptedResourceVCores);
assert.ok(model.numNonAMContainerPreempted);
assert.ok(model.numAMContainerPreempted);
assert.ok(model.clusterUsagePercentage);
assert.ok(model.queueUsagePercentage);
assert.ok(model.currentAppAttemptId);
});
test('Testing fields', function(assert) {
let model = this.subject({
"finalStatus": "SUCCEEDED",
"startedTime": 1479280923314,
"finishedTime": 1479280966402,
"allocatedMB": 0,
"allocatedVCores": 0,
"preemptedResourceMB": 0,
"preemptedResourceVCores": 0,
"memorySeconds": 93406,
"vcoreSeconds": 49,
"progress": 100,
"runningContainers": 0
});
assert.equal(model.get('isFailed'), false);
assert.equal(model.get('validatedFinishedTs'), 1479280966402);
assert.equal(model.get('allocatedResource'), '0 MBs, 0 VCores');
assert.equal(model.get('preemptedResource'), '0 MBs, 0 VCores');
assert.equal(model.get('aggregatedResourceUsage'), '93406 MBs, 49 VCores (× Secs)');
assert.equal(model.get('progressStyle'), 'width: 100%');
assert.equal(model.get('runningContainersNumber'), 0);
assert.equal(model.get('finalStatusStyle'), 'label label-success');
});

View File

@ -17,33 +17,15 @@
*/
import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('yarn-container-log', 'Unit | Model | ContainerLog', {
// Specify the other units that are required for this test.
needs: []
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model._notifyProperties);
assert.ok(model.didLoad);
assert.ok(model.logs);
assert.ok(model.containerID);
assert.ok(model.logFileName);
});
test('test fields', function(assert) {
let model = this.subject();
Ember.run(function () {
model.set("logs", "This is syslog");
model.set("containerID", "container_e32_1456000363780_0002_01_000001");
model.set("logFileName", "syslog");
assert.equal(model.get("logs"), "This is syslog");
assert.equal(model.get("containerID"), "container_e32_1456000363780_0002_01_000001");
assert.equal(model.get("logFileName"), "syslog");
});
});

View File

@ -0,0 +1,49 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
import Converter from 'yarn-ui/utils/converter';
moduleForModel('yarn-container', 'Unit | Model | yarn container', {
needs: []
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.allocatedMB);
assert.ok(model.allocatedVCores);
assert.ok(model.assignedNodeId);
assert.ok(model.priority);
assert.ok(model.startedTime);
assert.ok(model.finishedTime);
assert.ok(model.logUrl);
assert.ok(model.containerExitStatus);
assert.ok(model.containerState);
assert.ok(model.nodeHttpAddress);
});
test('Testing fields', function(assert) {
let model = this.subject({
startedTime: Converter.timeStampToDate(1481696493793),
finishedTime: Converter.timeStampToDate(1481696501857)
});
assert.equal(model.get('startTs'), 1481696493000);
assert.equal(model.get('finishedTs'), 1481696501000);
assert.equal(model.get('elapsedTime'), '8 Secs');
});

View File

@ -20,7 +20,6 @@ import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('yarn-node-app', 'Unit | Model | NodeApp', {
// Specify the other units that are required for this test.
needs: []
});
@ -39,20 +38,10 @@ test('Basic creation test', function(assert) {
test('test fields', function(assert) {
let model = this.subject();
assert.expect(9);
assert.expect(5);
Ember.run(function () {
model.set("appId", "application_1456251210105_0002");
model.set("id", "application_1456251210105_0002");
model.set("state", "RUNNING");
model.set("user", "hadoop");
model.set("containers", ["container_e38_1456251210105_0002_01_000001",
"container_e38_1456251210105_0002_01_000002"]);
assert.equal(model.get("appId"), "application_1456251210105_0002");
assert.equal(model.get("state"), "RUNNING");
assert.equal(model.get("user"), "hadoop");
assert.deepEqual(model.get("containers"),
["container_e38_1456251210105_0002_01_000001",
"container_e38_1456251210105_0002_01_000002"]);
assert.equal(model.get("appStateStyle"), "label label-primary");
assert.equal(model.get("isDummyApp"), false);
model.set("id", "dummy");
@ -63,4 +52,3 @@ test('test fields', function(assert) {
assert.equal(model.get("appStateStyle"), "label label-default");
});
});

View File

@ -45,22 +45,9 @@ test('test fields', function(assert) {
let model = this.subject();
Ember.run(function () {
model.set("containerId", "container_e32_1456000363780_0002_01_000003");
model.set("id", "container_e32_1456000363780_0002_01_000003");
model.set("state", "RUNNING");
model.set("exitCode", "-1000");
model.set("user", "hadoop");
model.set("id", "container_e32_1456000363780_0002_01_000003");
model.set("totalMemoryNeeded", 1024);
model.set("totalVCoresNeeded", 1);
model.set("containerLogFiles", ["syslog", "stderr", "stdout"]);
assert.equal(model.get("containerId"), "container_e32_1456000363780_0002_01_000003");
assert.equal(model.get("id"), "container_e32_1456000363780_0002_01_000003");
assert.equal(model.get("totalMemoryNeeded"), 1024);
assert.equal(model.get("totalVCoresNeeded"), 1);
assert.equal(model.get("user"), "hadoop");
assert.equal(model.get("exitCode"), "-1000");
assert.equal(model.get("containerLogFiles").length, 3);
assert.deepEqual(model.get("containerLogFiles"), ["syslog", "stderr", "stdout"]);
assert.equal(model.get("isDummyContainer"), false);
assert.equal(model.get("containerStateStyle"), "label label-primary");
model.set("id", "dummy");
@ -76,4 +63,3 @@ test('test fields', function(assert) {
assert.equal(model.get("containerStateStyle"), "label label-danger");
});
});

View File

@ -17,7 +17,6 @@
*/
import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('yarn-node', 'Unit | Model | Node', {
// Specify the other units that are required for this test.
@ -40,20 +39,3 @@ test('Basic creation test', function(assert) {
assert.ok(model.nodeManagerBuildVersion);
assert.ok(model.hadoopBuildVersion);
});
test('test fields', function(assert) {
let model = this.subject();
assert.expect(4);
Ember.run(function () {
model.set("totalVmemAllocatedContainersMB", 4096);
model.set("totalPmemAllocatedContainersMB", 2048);
model.set("totalVCoresAllocatedContainers", 4);
model.set("hadoopBuildVersion", "3.0.0-SNAPSHOT");
assert.equal(model.get("totalVmemAllocatedContainersMB"), 4096);
assert.equal(model.get("totalPmemAllocatedContainersMB"), 2048);
assert.equal(model.get("totalVCoresAllocatedContainers"), 4);
assert.equal(model.get("hadoopBuildVersion"), "3.0.0-SNAPSHOT");
});
});

View File

@ -0,0 +1,122 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('yarn-queue', 'Unit | Model | yarn queue', {
needs: ['model:yarn-user']
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.name);
assert.ok(model.children);
assert.ok(model.parent);
assert.ok(model.capacity);
assert.ok(model.maxCapacity);
assert.ok(model.usedCapacity);
assert.ok(model.absCapacity);
assert.ok(model.absMaxCapacity);
assert.ok(model.absUsedCapacity);
assert.ok(model.state);
assert.ok(model.userLimit);
assert.ok(model.userLimitFactor);
assert.ok(model.preemptionDisabled);
assert.ok(model.numPendingApplications);
assert.ok(model.numActiveApplications);
assert.ok(model.users);
});
test('Test fields', function(assert) {
let model = this.subject();
Ember.run(function() {
model.set('name', 'default');
model.set('children', []);
model.set('parent', 'root');
model.set('capacity', 100);
model.set('maxCapacity', 100);
model.set('usedCapacity', 0);
model.set('absCapacity', 100);
model.set('absMaxCapacity', 100);
model.set('absUsedCapacity', 0);
model.set('state', 'RUNNING');
model.set('userLimit', 100);
model.set('userLimitFactor', 1.0);
model.set('preemptionDisabled', true);
model.set('numPendingApplications', 0);
model.set('numActiveApplications', 0);
assert.equal(model.get('isLeafQueue'), true);
assert.deepEqual(model.get('capacitiesBarChartData'),
[{label: "Absolute Capacity", value: 100},
{label: "Absolute Used", value: 0},
{label: "Absolute Max Capacity", value: 100}]);
assert.deepEqual(model.get('userUsagesDonutChartData'), []);
assert.equal(model.get('hasUserUsages'), false);
assert.deepEqual(model.get('numOfApplicationsDonutChartData'),
[{label: "Pending Apps", value: 0}, {label: "Active Apps", value: 0}]);
var user1 = model.store.createRecord('yarn-user', {
name: 'user1',
usedMemoryMB: 2048
});
model.set('users', [user1]);
assert.deepEqual(model.get('userUsagesDonutChartData'),
[{label: 'user1', value: 2048}]);
assert.equal(model.get('hasUserUsages'), true);
model.set('name', 'root');
let child = this.subject({
name: 'default'
});
model.set('children', [child]);
model.set('parent', '');
model.set('capacity', 100);
model.set('maxCapacity', 100);
model.set('usedCapacity', 0);
model.set('absCapacity', 100);
model.set('absMaxCapacity', 100);
model.set('absUsedCapacity', 0);
model.set('state', 'RUNNING');
model.set('numPendingApplications', 0);
model.set('numActiveApplications', 0);
assert.equal(model.get('isLeafQueue'), false);
assert.deepEqual(model.get('capacitiesBarChartData'),
[
{label: "Absolute Capacity", value: 100},
{label: "Absolute Used", value: 0},
{label: "Absolute Max Capacity", value: 100}
]);
assert.deepEqual(model.get('numOfApplicationsDonutChartData'),
[
{label: "Pending Apps", value: 0},
{label: "Active Apps", value: 0}
]);
}.bind(this));
});
test('Test relationship with yarn-user', function(assert) {
let YarnQueue = this.store().modelFor('yarn-queue');
let relationship = Ember.get(YarnQueue, 'relationshipsByName').get('users');
assert.expect(2);
assert.equal(relationship.key, 'users');
assert.equal(relationship.kind, 'hasMany');
});

View File

@ -20,7 +20,6 @@ import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('yarn-rm-node', 'Unit | Model | RMNode', {
// Specify the other units that are required for this test.
needs: []
});
@ -64,17 +63,7 @@ test('test fields', function(assert) {
model.set("usedVirtualCores", 1);
model.set("availableVirtualCores", 7);
model.set("nodeLabels", ["x"]);
assert.equal(model.get("rack"), "/default-rack");
assert.equal(model.get("state"), "RUNNING");
assert.equal(model.get("nodeHostName"), "localhost");
assert.equal(model.get("id"), "localhost:64318");
assert.equal(model.get("nodeHTTPAddress"), "localhost:8042");
assert.equal(model.get("usedMemoryMB"), 1024);
assert.equal(model.get("availMemoryMB"), 7168);
assert.equal(model.get("usedVirtualCores"), 1);
assert.equal(model.get("availableVirtualCores"), 7);
assert.equal(model.get("isDummyNode"), false);
assert.deepEqual(model.get("nodeLabels"), ["x"]);
assert.equal(model.get("nodeLabelsAsString"), "x");
assert.deepEqual(model.get("nodeStateStyle"), "label label-success");
assert.deepEqual(model.get("getMemoryDataForDonutChart"),
@ -93,4 +82,3 @@ test('test fields', function(assert) {
assert.equal(model.get("nodeLabelsAsString"), "");
});
});

View File

@ -0,0 +1,32 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
moduleForModel('yarn-user', 'Unit | Model | yarn user', {
needs: []
});
test('Basic creation test', function(assert) {
let model = this.subject();
assert.ok(model);
assert.ok(model.name);
assert.ok(model.queueName);
assert.ok(model.usedMemoryMB);
assert.ok(model.usedVCore);
});

View File

@ -0,0 +1,143 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('route:cluster-overview', 'Unit | Route | cluster overview', {
unit: true
});
test('Basic creation test', function(assert) {
let route = this.subject();
assert.ok(route);
assert.ok(route.model);
assert.ok(route.afterModel);
assert.ok(route.unloadAll);
});
test('Test getting cluster metrics data', function(assert) {
var response = {
clusterMetrics: {
appsSubmitted: 0,
appsCompleted: 0,
appsPending: 0,
appsRunning: 0,
appsFailed: 0,
appsKilled: 0,
reservedMB: 0,
availableMB: 17408,
allocatedMB: 0,
reservedVirtualCores: 0,
availableVirtualCores: 7,
allocatedVirtualCores: 1,
containersAllocated: 0,
containersReserved: 0,
containersPending: 0,
totalMB: 17408,
totalVirtualCores: 8,
totalNodes: 1,
lostNodes: 0,
unhealthyNodes: 0,
decommissionedNodes: 0,
rebootedNodes: 0,
activeNodes: 1
}
};
var store = {
findAll: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve(response);
});
},
query: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve({});
});
}
};
var route = this.subject();
route.set('store', store);
assert.expect(3);
route.model().then(function(model) {
assert.ok(model);
assert.ok(model.clusterMetrics);
assert.deepEqual(model.clusterMetrics, response);
});
});
test("Test getting yarn app data", function(assert) {
var response = {
"apps": {
"app": [{
"finishedTime" : 1326815598530,
"amContainerLogs" : "http://host.domain.com:8042/node/containerlogs/container_1326815542473_0001_01_000001",
"trackingUI" : "History",
"state" : "FINISHED",
"user" : "user1",
"id" : "application_1326815542473_0001",
"clusterId" : 1326815542473,
"finalStatus" : "SUCCEEDED",
"amHostHttpAddress" : "host.domain.com:8042",
"amRPCAddress" : "host.domain.com:4201",
"progress" : 100,
"name" : "word count",
"startedTime" : 1326815573334,
"elapsedTime" : 25196,
"diagnostics" : "",
"trackingUrl" : "http://host.domain.com:8088/proxy/application_1326815542473_0001/jobhistory/job/job_1326815542473",
"queue" : "default",
"allocatedMB" : 0,
"allocatedVCores" : 0,
"runningContainers" : 0,
"applicationType" : "MAPREDUCE",
"applicationTags" : "",
"memorySeconds" : 151730,
"vcoreSeconds" : 103,
"unmanagedApplication" : "false",
"applicationPriority" : 0,
"appNodeLabelExpression" : "",
"amnodeLabelExpression" : ""
}]
}
};
var store = {
findAll: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve({});
});
},
query: function(type) {
return new Ember.RSVP.Promise(function(resolve) {
if (type === 'yarn-app') {
resolve(response);
} else {
resolve({});
}
});
}
};
var route = this.subject();
route.set('store', store);
assert.expect(3);
route.model().then(function(model) {
assert.ok(model);
assert.ok(model.apps);
assert.deepEqual(model.apps, response);
});
});

View File

@ -16,13 +16,15 @@
* limitations under the License.
*/
import { nodeName } from '../../../helpers/node-name';
import { module, test } from 'qunit';
import { moduleFor, test } from 'ember-qunit';
module('Unit | Helper | node name');
// Replace this with your real tests.
test('it works', function(assert) {
let result = nodeName(42);
assert.ok(result);
moduleFor('route:yarn-app-attempt', 'Unit | Route | yarn app attempt', {
unit: true
});
test('Basic creation test', function(assert) {
let route = this.subject();
assert.ok(route);
assert.ok(route.model);
assert.ok(route.unloadAll);
});

View File

@ -0,0 +1,152 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('route:yarn-app', 'Unit | Route | yarn app', {
unit: true
});
test('Basic creation test', function(assert) {
let route = this.subject();
assert.ok(route);
assert.ok(route.model);
assert.ok(route.unloadAll);
});
test('Test getting yarn application data', function(assert) {
var response = {
"app" : {
"finishedTime" : 1326824991300,
"amContainerLogs" : "http://host.domain.com:8042/node/containerlogs/container_1326821518301_0005_01_000001",
"trackingUI" : "History",
"state" : "FINISHED",
"user" : "user1",
"id" : "application_1326821518301_0005",
"clusterId" : 1326821518301,
"finalStatus" : "SUCCEEDED",
"amHostHttpAddress" : "host.domain.com:8042",
"amRPCAddress" : "host.domain.com:4201",
"progress" : 100,
"name" : "Sleep job",
"applicationType" : "Yarn",
"startedTime" : 1326824544552,
"elapsedTime" : 446748,
"diagnostics" : "",
"trackingUrl" : "http://host.domain.com:8088/proxy/application_1326821518301_0005/jobhistory/job/job_1326821518301_5_5",
"queue" : "a1",
"memorySeconds" : 151730,
"vcoreSeconds" : 103,
"unmanagedApplication" : "false",
"applicationPriority" : 0,
"appNodeLabelExpression" : "",
"amNodeLabelExpression" : ""
}
};
var store = {
find: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve(response);
});
},
findAll: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve({});
});
},
query: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve([]);
});
}
};
var appId = "application_1326821518301_0005";
var route = this.subject();
route.set('store', store);
assert.expect(3);
route.model({app_id: appId}).then(function(model) {
assert.ok(model);
assert.ok(model.app);
assert.deepEqual(model.app, response);
});
});
test('Test getting yarm rm nodes data', function(assert) {
var response = {
"nodes": {
"node": [{
"rack":"\/default-rack",
"state":"NEW",
"id":"h2:1235",
"nodeHostName":"h2",
"nodeHTTPAddress":"h2:2",
"healthStatus":"Healthy",
"lastHealthUpdate":1324056895432,
"healthReport":"Healthy",
"numContainers":0,
"usedMemoryMB":0,
"availMemoryMB":8192,
"usedVirtualCores":0,
"availableVirtualCores":8
},
{
"rack":"\/default-rack",
"state":"NEW",
"id":"h1:1234",
"nodeHostName":"h1",
"nodeHTTPAddress":"h1:2",
"healthStatus":"Healthy",
"lastHealthUpdate":1324056895092,
"healthReport":"Healthy",
"numContainers":0,
"usedMemoryMB":0,
"availMemoryMB":8192,
"usedVirtualCores":0,
"availableVirtualCores":8
}]
}
};
var store = {
find: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve({});
});
},
findAll: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve(response);
});
},
query: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve([]);
});
}
};
var appId = "application_1326821518301_0005";
var route = this.subject();
route.set('store', store);
assert.expect(4);
route.model({app_id: appId}).then(function(model) {
assert.ok(model);
assert.ok(model.nodes);
assert.deepEqual(model.nodes.nodes.node[0], response.nodes.node[0]);
assert.deepEqual(model.nodes.nodes.node[1], response.nodes.node[1]);
});
});

View File

@ -17,13 +17,120 @@
*/
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('route:yarn-apps', 'Unit | Route | yarn apps', {
// Specify the other units that are required for this test.
// needs: ['controller:foo']
unit: true
});
test('it exists', function(assert) {
test('Basic creation test', function(assert) {
var route = this.subject();
assert.ok(route);
assert.ok(route.model);
assert.ok(route.unloadAll);
});
test("Test getting yarn applications data", function(assert) {
var response = {
"apps": {
"app": [{
"finishedTime" : 1326815598530,
"amContainerLogs" : "http://host.domain.com:8042/node/containerlogs/container_1326815542473_0001_01_000001",
"trackingUI" : "History",
"state" : "FINISHED",
"user" : "user1",
"id" : "application_1326815542473_0001",
"clusterId" : 1326815542473,
"finalStatus" : "SUCCEEDED",
"amHostHttpAddress" : "host.domain.com:8042",
"amRPCAddress" : "host.domain.com:4201",
"progress" : 100,
"name" : "word count",
"startedTime" : 1326815573334,
"elapsedTime" : 25196,
"diagnostics" : "",
"trackingUrl" : "http://host.domain.com:8088/proxy/application_1326815542473_0001/jobhistory/job/job_1326815542473",
"queue" : "default",
"allocatedMB" : 0,
"allocatedVCores" : 0,
"runningContainers" : 0,
"applicationType" : "MAPREDUCE",
"applicationTags" : "",
"memorySeconds" : 151730,
"vcoreSeconds" : 103,
"unmanagedApplication" : "false",
"applicationPriority" : 0,
"appNodeLabelExpression" : "",
"amnodeLabelExpression" : ""
}]
}
};
var store = {
findAll: function(type) {
return new Ember.RSVP.Promise(function(resolve) {
if (type === 'yarn-app') {
resolve(response);
} else {
resolve({});
}
});
}
};
var route = this.subject();
route.set('store', store);
assert.expect(3);
route.model().then(function(model) {
assert.ok(model);
assert.ok(model.apps);
assert.deepEqual(model.apps, response);
});
});
test('Test getting cluster metrics data', function(assert) {
var response = {
"clusterMetrics": {
"appsSubmitted": 0,
"appsCompleted": 0,
"appsPending": 0,
"appsRunning": 0,
"appsFailed": 0,
"appsKilled": 0,
"reservedMB": 0,
"availableMB": 17408,
"allocatedMB": 0,
"reservedVirtualCores": 0,
"availableVirtualCores": 7,
"allocatedVirtualCores": 1,
"containersAllocated": 0,
"containersReserved": 0,
"containersPending": 0,
"totalMB": 17408,
"totalVirtualCores": 8,
"totalNodes": 1,
'lostNodes': 0,
"unhealthyNodes": 0,
"decommissionedNodes": 0,
'rebootedNodes': 0,
"activeNodes": 1
}
};
var store = {
findAll: function(type) {
return new Ember.RSVP.Promise(function(resolve) {
if (type === 'ClusterMetric') {
resolve(response);
} else {
resolve({});
}
});
}
};
var route = this.subject();
route.set('store', store);
assert.expect(3);
route.model().then(function(model) {
assert.ok(model);
assert.ok(model.clusterMetrics);
assert.deepEqual(model.clusterMetrics, response);
});
});

View File

@ -61,11 +61,11 @@ test('Test getting a node', function(assert) {
// Create store which returns appropriate responses.
var store = {
findRecord: function(type) {
if (type === 'yarnNode') {
if (type === 'yarn-node') {
return new Ember.RSVP.Promise(function(resolve) {
resolve(nodeResponse);
});
} else if (type === 'yarnRmNode') {
} else if (type === 'yarn-rm-node') {
return new Ember.RSVP.Promise(function(resolve) {
resolve(rmNodeResponse);
});
@ -75,10 +75,13 @@ test('Test getting a node', function(assert) {
var route = this.subject();
assert.expect(4);
route.set('store', store);
var model = route.model(
{node_addr:"localhost:8042", node_id:"localhost:64318"})._result;
route.model({
node_addr:"localhost:8042",
node_id:"localhost:64318"
}).then(function(model) {
assert.ok(model.node);
assert.deepEqual(model.node, nodeResponse);
assert.ok(model.rmNode);
assert.deepEqual(model.rmNode, rmNodeResponse);
});
});

View File

@ -65,10 +65,11 @@ test('Test getting nodes', function(assert) {
};
var route = this.subject();
route.set('store', store);
var model = route.model()._result;
route.model().then(function(model) {
assert.expect(4);
assert.ok(model);
assert.equal(model.length, 2);
assert.deepEqual(response[0], model[0]);
assert.deepEqual(response[1], model[1]);
assert.ok(model.nodes);
assert.equal(model.nodes.length, 2);
assert.deepEqual(response[0], model.nodes[0]);
assert.deepEqual(response[1], model.nodes[1]);
});
});

View File

@ -17,13 +17,293 @@
*/
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('route:yarn-queues', 'Unit | Route | yarn queues', {
// Specify the other units that are required for this test.
// needs: ['controller:foo']
unit: true
});
test('it exists', function(assert) {
test('Basic creation test', function(assert) {
let route = this.subject();
assert.ok(route);
assert.ok(route.model);
assert.ok(route.afterModel);
assert.ok(route.unloadAll);
});
test('Test getting yarn queues', function(assert) {
let response = {
"scheduler": {
"schedulerInfo": {
"capacity": 100,
"maxCapacity": 100,
"queueName": "root",
"queues": {
"queue": [
{
"absoluteCapacity": 10.5,
"absoluteMaxCapacity": 50,
"absoluteUsedCapacity": 0,
"capacity": 10.5,
"maxCapacity": 50,
"numApplications": 0,
"queueName": "a",
"queues": {
"queue": [
{
"absoluteCapacity": 3.15,
"absoluteMaxCapacity": 25,
"absoluteUsedCapacity": 0,
"capacity": 30.000002,
"maxCapacity": 50,
"numApplications": 0,
"queueName": "a1",
"queues": {
"queue": [
{
"absoluteCapacity": 2.6775,
"absoluteMaxCapacity": 25,
"absoluteUsedCapacity": 0,
"capacity": 85,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 1,
"maxApplications": 267,
"maxApplicationsPerUser": 267,
"maxCapacity": 100,
"numActiveApplications": 0,
"numApplications": 0,
"numContainers": 0,
"numPendingApplications": 0,
"queueName": "a1a",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 1,
"users": null
},
{
"absoluteCapacity": 0.47250003,
"absoluteMaxCapacity": 25,
"absoluteUsedCapacity": 0,
"capacity": 15.000001,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 1,
"maxApplications": 47,
"maxApplicationsPerUser": 47,
"maxCapacity": 100,
"numActiveApplications": 0,
"numApplications": 0,
"numContainers": 0,
"numPendingApplications": 0,
"queueName": "a1b",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 1,
"users": null
}
]
},
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>"
},
{
"absoluteCapacity": 7.35,
"absoluteMaxCapacity": 50,
"absoluteUsedCapacity": 0,
"capacity": 70,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 100,
"maxApplications": 735,
"maxApplicationsPerUser": 73500,
"maxCapacity": 100,
"numActiveApplications": 0,
"numApplications": 0,
"numContainers": 0,
"numPendingApplications": 0,
"queueName": "a2",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 100,
"users": null
}
]
},
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>"
},
{
"absoluteCapacity": 89.5,
"absoluteMaxCapacity": 100,
"absoluteUsedCapacity": 0,
"capacity": 89.5,
"maxCapacity": 100,
"numApplications": 2,
"queueName": "b",
"queues": {
"queue": [
{
"absoluteCapacity": 53.7,
"absoluteMaxCapacity": 100,
"absoluteUsedCapacity": 0,
"capacity": 60.000004,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 100,
"maxApplications": 5370,
"maxApplicationsPerUser": 537000,
"maxCapacity": 100,
"numActiveApplications": 1,
"numApplications": 2,
"numContainers": 0,
"numPendingApplications": 1,
"queueName": "b1",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 100,
"users": {
"user": [
{
"numActiveApplications": 0,
"numPendingApplications": 1,
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"username": "user2"
},
{
"numActiveApplications": 1,
"numPendingApplications": 0,
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"username": "user1"
}
]
}
},
{
"absoluteCapacity": 35.3525,
"absoluteMaxCapacity": 100,
"absoluteUsedCapacity": 0,
"capacity": 39.5,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 100,
"maxApplications": 3535,
"maxApplicationsPerUser": 353500,
"maxCapacity": 100,
"numActiveApplications": 0,
"numApplications": 0,
"numContainers": 0,
"numPendingApplications": 0,
"queueName": "b2",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 100,
"users": null
},
{
"absoluteCapacity": 0.4475,
"absoluteMaxCapacity": 100,
"absoluteUsedCapacity": 0,
"capacity": 0.5,
"maxActiveApplications": 1,
"maxActiveApplicationsPerUser": 100,
"maxApplications": 44,
"maxApplicationsPerUser": 4400,
"maxCapacity": 100,
"numActiveApplications": 0,
"numApplications": 0,
"numContainers": 0,
"numPendingApplications": 0,
"queueName": "b3",
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"type": "capacitySchedulerLeafQueueInfo",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>",
"userLimit": 100,
"userLimitFactor": 100,
"users": null
}
]
},
"resourcesUsed": {
"memory": 0,
"vCores": 0
},
"state": "RUNNING",
"usedCapacity": 0,
"usedResources": "<memory:0, vCores:0>"
}
]
},
"type": "capacityScheduler",
"usedCapacity": 0
}
}
};
let store = {
query: function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve(response);
});
}
};
let route = this.subject();
route.set('store', store);
route.model({queue_name: 'a1'}).then(function(model) {
assert.ok(model);
assert.ok(model.queues);
assert.ok(model.selected);
assert.equal(model.selected, 'a1');
assert.deepEqual(model.queues, response);
});
});

View File

@ -0,0 +1,70 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
moduleFor('serializer:cluster-info', 'Unit | Serializer | cluster info', {
unit: true
});
test('Basic creation test', function(assert) {
let serializer = this.subject();
assert.ok(serializer);
assert.ok(serializer.normalizeSingleResponse);
assert.ok(serializer.normalizeArrayResponse);
});
test('Test normalizeArrayResponse', function(assert) {
var serializer = this.subject(),
modelClass = {
modelName: "cluster-info"
},
payload = {
"clusterInfo": {
"id":1324053971963,
"startedOn":1324053971963,
"state":"STARTED",
"resourceManagerVersion":"0.23.1-SNAPSHOT",
"resourceManagerBuildVersion":"0.23.1-SNAPSHOT from 1214049 by user1 source checksum 050cd664439d931c8743a6428fd6a693",
"resourceManagerVersionBuiltOn":"Tue Dec 13 22:12:48 CST 2011",
"hadoopVersion":"0.23.1-SNAPSHOT",
"hadoopBuildVersion":"0.23.1-SNAPSHOT from 1214049 by user1 source checksum 11458df3bb77342dca5f917198fad328",
"hadoopVersionBuiltOn":"Tue Dec 13 22:12:26 CST 2011"
}
};
var id = 1324053971963;
var normalized = serializer.normalizeArrayResponse({}, modelClass, payload, id, null);
assert.expect(12);
assert.ok(normalized.data);
assert.ok(normalized.data[0]);
assert.equal(normalized.data.length, 1);
assert.equal(normalized.data[0].id, id);
assert.equal(normalized.data[0].type, modelClass.modelName);
assert.equal(normalized.data[0].attributes.startedOn, payload.clusterInfo.startedOn);
assert.equal(normalized.data[0].attributes.state, payload.clusterInfo.state);
assert.equal(normalized.data[0].attributes.resourceManagerVersion,
payload.clusterInfo.resourceManagerVersion);
assert.equal(normalized.data[0].attributes.resourceManagerBuildVersion,
payload.clusterInfo.resourceManagerBuildVersion);
assert.equal(normalized.data[0].attributes.hadoopVersion,
payload.clusterInfo.hadoopVersion);
assert.equal(normalized.data[0].attributes.hadoopBuildVersion,
payload.clusterInfo.hadoopBuildVersion);
assert.equal(normalized.data[0].attributes.hadoopVersionBuiltOn,
payload.clusterInfo.hadoopVersionBuiltOn);
});

View File

@ -0,0 +1,90 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
moduleFor('serializer:cluster-metric', 'Unit | Serializer | cluster metric', {
unit: true
});
test('Basic creation test', function(assert) {
let serializer = this.subject();
assert.ok(serializer);
assert.ok(serializer.normalizeSingleResponse);
assert.ok(serializer.normalizeArrayResponse);
});
test('Test normalizeArrayResponse', function(assert) {
let serializer = this.subject(),
modelClass = {
modelName: 'cluster-metric'
},
payload = {
"clusterMetrics": {
"appsSubmitted":0,
"appsCompleted":0,
"appsPending":0,
"appsRunning":0,
"appsFailed":0,
"appsKilled":0,
"reservedMB":0,
"availableMB":17408,
"allocatedMB":0,
"reservedVirtualCores":0,
"availableVirtualCores":7,
"allocatedVirtualCores":1,
"containersAllocated":0,
"containersReserved":0,
"containersPending":0,
"totalMB":17408,
"totalVirtualCores":8,
"totalNodes":1,
"lostNodes":0,
"unhealthyNodes":0,
"decommissionedNodes":0,
"rebootedNodes":0,
"activeNodes":1
}
};
let normalized = serializer.normalizeArrayResponse({}, modelClass, payload, 1, null);
assert.expect(20);
assert.ok(normalized.data);
assert.ok(normalized.data[0]);
assert.equal(normalized.data[0].id, 1);
assert.equal(normalized.data[0].type, modelClass.modelName);
assert.equal(normalized.data[0].attributes.appsSubmitted, payload.clusterMetrics.appsSubmitted);
assert.equal(normalized.data[0].attributes.appsCompleted, payload.clusterMetrics.appsCompleted);
assert.equal(normalized.data[0].attributes.appsPending, payload.clusterMetrics.appsPending);
assert.equal(normalized.data[0].attributes.appsRunning, payload.clusterMetrics.appsRunning);
assert.equal(normalized.data[0].attributes.appsFailed, payload.clusterMetrics.appsFailed);
assert.equal(normalized.data[0].attributes.appsKilled, payload.clusterMetrics.appsKilled);
assert.equal(normalized.data[0].attributes.reservedMB, payload.clusterMetrics.reservedMB);
assert.equal(normalized.data[0].attributes.availableMB, payload.clusterMetrics.availableMB);
assert.equal(normalized.data[0].attributes.allocatedMB, payload.clusterMetrics.allocatedMB);
assert.equal(normalized.data[0].attributes.totalMB, payload.clusterMetrics.totalMB);
assert.equal(normalized.data[0].attributes.reservedVirtualCores,
payload.clusterMetrics.reservedVirtualCores);
assert.equal(normalized.data[0].attributes.availableVirtualCores,
payload.clusterMetrics.availableVirtualCores);
assert.equal(normalized.data[0].attributes.allocatedVirtualCores,
payload.clusterMetrics.allocatedVirtualCores);
assert.equal(normalized.data[0].attributes.totalVirtualCores,
payload.clusterMetrics.totalVirtualCores);
assert.equal(normalized.data[0].attributes.activeNodes, payload.clusterMetrics.activeNodes);
assert.equal(normalized.data[0].attributes.totalNodes, payload.clusterMetrics.totalNodes);
});

View File

@ -0,0 +1,101 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
import Converter from 'yarn-ui/utils/converter';
moduleFor('serializer:yarn-app-attempt', 'Unit | Serializer | yarn app attempt', {
unit: true
});
test('Basic creation test', function(assert) {
let serializer = this.subject();
assert.ok(serializer);
assert.ok(serializer.normalizeSingleResponse);
assert.ok(serializer.normalizeArrayResponse);
});
test('Test normalizeSingleResponse', function(assert) {
let serializer = this.subject(),
payload = {
"appAttemptId": "appattempt_1479277364592_0001_000001",
"host": "N/A",
"rpcPort": "-1",
"trackingUrl": "http://ctr-e46-1478293962054-1774-01-000007.hwx.site:25005/proxy/application_1479277364592_0001/",
"originalTrackingUrl": "http://ctr-e46-1478293962054-1774-01-000004.hwx.site:19888/jobhistory/job/job_1479277364592_0001",
"diagnosticsInfo": "Attempt recovered after RM restart",
"appAttemptState": "FINISHED",
"amContainerId": "container_e01_1479277364592_0001_01_000001",
"startedTime": "1479280923398",
"finishedTime": "1479280966401"
},
modelClass = {
modelName: 'yarn-app-attempt'
};
var response = serializer.normalizeSingleResponse({}, modelClass, payload, payload.appAttemptId);
assert.ok(response);
assert.ok(response.data);
assert.equal(response.data.id, payload.appAttemptId);
assert.equal(response.data.type, modelClass.modelName);
assert.equal(response.data.attributes.appAttemptId, payload.appAttemptId);
assert.equal(response.data.attributes.hosts, payload.host);
assert.equal(response.data.attributes.amContainerId, payload.amContainerId);
assert.equal(response.data.attributes.state, payload.appAttemptState);
assert.equal(response.data.attributes.startedTime, Converter.timeStampToDate(payload.startedTime));
assert.equal(response.data.attributes.finishedTime, Converter.timeStampToDate(payload.finishedTime));
});
test('Test normalizeArrayResponse', function(assert) {
let serializer = this.subject(),
modelClass = {
modelName: 'yarn-app-attempt'
},
payload = {
"appAttempts": {
"appAttempt": [
{
"id": 1,
"startTime": 1479280923398,
"finishedTime": 1479280966401,
"containerId": "container_e01_1479277364592_0001_01_000001",
"nodeHttpAddress": "ctr-e46-1478293962054-1774-01-000004.hwx.site:25008",
"nodeId": "ctr-e46-1478293962054-1774-01-000004.hwx.site:25006",
"logsLink": "http://ctr-e46-1478293962054-1774-01-000004.hwx.site:25008/node/containerlogs/container_e01_1479277364592_0001_01_000001/user1",
"blacklistedNodes": "",
"nodesBlacklistedBySystem": "",
"appAttemptId": "appattempt_1479277364592_0001_000001"
}
]
}
};
let response = serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response);
assert.ok(response.data);
assert.ok(response.data[0]);
assert.equal(response.data[0].id, payload.appAttempts.appAttempt[0].appAttemptId);
assert.equal(response.data[0].type, modelClass.modelName);
assert.equal(response.data[0].attributes.appAttemptId, payload.appAttempts.appAttempt[0].appAttemptId);
assert.equal(response.data[0].attributes.containerId, payload.appAttempts.appAttempt[0].containerId);
assert.equal(response.data[0].attributes.nodeHttpAddress, payload.appAttempts.appAttempt[0].nodeHttpAddress);
assert.equal(response.data[0].attributes.nodeId, payload.appAttempts.appAttempt[0].nodeId);
assert.equal(response.data[0].attributes.logsLink, payload.appAttempts.appAttempt[0].logsLink);
assert.equal(response.data[0].attributes.startTime,
Converter.timeStampToDate(payload.appAttempts.appAttempt[0].startTime));
assert.equal(response.data[0].attributes.finishedTime,
Converter.timeStampToDate(payload.appAttempts.appAttempt[0].finishedTime));
});

View File

@ -16,18 +16,62 @@
* limitations under the License.
*/
import { moduleForModel, test } from 'ember-qunit';
import { moduleFor, test } from 'ember-qunit';
moduleForModel('yarn-app', 'Unit | Serializer | yarn app', {
// Specify the other units that are required for this test.
needs: ['serializer:yarn-app']
moduleFor('serializer:yarn-app', 'Unit | Serializer | yarn app', {
});
test('Basic creation test', function(assert) {
let serializer = this.subject();
assert.ok(serializer);
assert.ok(serializer.normalizeSingleResponse);
assert.ok(serializer.internalNormalizeSingleResponse);
});
// Replace this with your real tests.
test('it serializes records', function(assert) {
var record = this.subject();
var serializedRecord = record.serialize();
assert.ok(serializedRecord);
test('normalizeSingleResponse test', function(assert) {
let serializer = this.subject(),
modelClass = {
modelName: "yarn-app"
},
payload = {
app : {
finishedTime : 1326824991300,
amContainerLogs : "localhost:8042/node/containerlogs/container_1326821518301_0005_01_000001",
trackingUI : "History",
state : "FINISHED",
user : "user1",
id : "application_1326821518301_0005",
clusterId : 1326821518301,
finalStatus : "SUCCEEDED",
amHostHttpAddress : "localhost:8042",
amRPCAddress : "localhost:4201",
progress : 100,
name : "Sleep job",
applicationType : "Yarn",
startedTime : 1326824544552,
elapsedTime : 446748,
diagnostics : "",
trackingUrl : "localhost:8088/proxy/application_1326821518301_0005/jobhistory/job/job_1326821518301_5_5",
queue : "a1",
memorySeconds : 151730,
vcoreSeconds : 103,
unmanagedApplication : "false",
applicationPriority : 0,
appNodeLabelExpression : "",
amNodeLabelExpression : ""
}
},
id = "application_1326821518301_0005";
var response = serializer.normalizeSingleResponse({}, modelClass, payload, id);
assert.equal(response.data.id, id);
assert.equal(response.data.type, modelClass.modelName);
assert.equal(response.data.attributes.appName, payload.app.name);
assert.equal(response.data.attributes.user, payload.app.user);
assert.equal(response.data.attributes.state, payload.app.state);
assert.equal(response.data.attributes.finalStatus, payload.app.finalStatus);
assert.equal(response.data.attributes.queue, payload.app.queue);
assert.equal(response.data.attributes.applicationType, payload.app.applicationType);
assert.equal(response.data.attributes.progress, payload.app.progress);
});

View File

@ -0,0 +1,30 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { moduleFor, test } from 'ember-qunit';
moduleFor('serializer:yarn-container', 'Unit | Serializer | yarn container', {
unit: true
});
test('Basic creation test', function(assert) {
let serializer = this.subject();
assert.ok(serializer);
assert.ok(serializer.normalizeSingleResponse);
assert.ok(serializer.normalizeArrayResponse);
});

View File

@ -48,7 +48,7 @@ test('normalizeArrayResponse test', function(assert) {
};
assert.expect(15);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 2);
assert.equal(response.data[0].attributes.containers, undefined);
@ -70,14 +70,11 @@ test('normalizeArrayResponse no apps test', function(assert) {
modelName: "yarn-node-app"
},
payload = { apps: null };
assert.expect(5);
assert.expect(2);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 1);
assert.equal(response.data[0].type, modelClass.modelName);
assert.equal(response.data[0].id, "dummy");
assert.equal(response.data[0].attributes.appId, undefined);
assert.equal(response.data.length, 0);
});
test('normalizeSingleResponse test', function(assert) {
@ -90,7 +87,7 @@ test('normalizeSingleResponse test', function(assert) {
};
assert.expect(7);
var response =
serializer.normalizeSingleResponse({}, modelClass, payload, null, null);
serializer.normalizeSingleResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(payload.app.id, response.data.id);
assert.equal(modelClass.modelName, response.data.type);

View File

@ -56,7 +56,7 @@ test('normalizeArrayResponse test', function(assert) {
};
assert.expect(14);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 2);
assert.equal(response.data[0].id,
@ -82,14 +82,11 @@ test('normalizeArrayResponse no containers test', function(assert) {
modelName: "yarn-node-container"
},
payload = { containers: null };
assert.expect(5);
assert.expect(2);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 1);
assert.equal(response.data[0].type, modelClass.modelName);
assert.equal(response.data[0].id, "dummy");
assert.equal(response.data[0].attributes.containerId, undefined);
assert.equal(response.data.length, 0);
});
test('normalizeSingleResponse test', function(assert) {
@ -109,7 +106,7 @@ test('normalizeSingleResponse test', function(assert) {
};
assert.expect(11);
var response =
serializer.normalizeSingleResponse({}, modelClass, payload, null, null);
serializer.normalizeSingleResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.id, payload.container.id);
assert.equal(response.data.type, modelClass.modelName);

View File

@ -70,7 +70,7 @@ test('normalizeArrayResponse test', function(assert) {
};
assert.expect(12);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 2);
assert.equal(response.data[0].id, "192.168.1.1:64318");
@ -92,15 +92,11 @@ test('normalizeArrayResponse no nodes test', function(assert) {
modelName: "yarn-rm-node"
},
payload = { nodes: null };
assert.expect(5);
assert.expect(2);
var response =
serializer.normalizeArrayResponse({}, modelClass, payload, null, null);
console.log(response);
serializer.normalizeArrayResponse({}, modelClass, payload);
assert.ok(response.data);
assert.equal(response.data.length, 1);
assert.equal(response.data[0].type, modelClass.modelName);
assert.equal(response.data[0].id, "dummy");
assert.equal(response.data[0].attributes.nodeHostName, undefined);
assert.equal(response.data.length, 0);
});
test('normalizeSingleResponse test', function(assert) {
@ -128,7 +124,7 @@ test('normalizeSingleResponse test', function(assert) {
assert.expect(13);
var id = "localhost:64318";
var response =
serializer.normalizeSingleResponse({}, modelClass, payload, id, null);
serializer.normalizeSingleResponse({}, modelClass, payload, id);
assert.ok(response.data);
assert.equal(response.data.id, id);
assert.equal(response.data.type, modelClass.modelName);