open-nomad/ui/tests/unit/models/task-group-test.js
2021-10-12 16:36:10 -04:00

141 lines
3.5 KiB
JavaScript

import { get } from '@ember/object';
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { run } from '@ember/runloop';
const sum = (list, key) => list.reduce((sum, item) => sum + get(item, key), 0);
module('Unit | Model | task-group', function(hooks) {
setupTest(hooks);
test("should expose reserved resource stats as aggregates of each task's reserved resources", function(assert) {
const taskGroup = run(() =>
this.owner.lookup('service:store').createRecord('task-group', {
name: 'group-example',
tasks: [
{
name: 'task-one',
driver: 'docker',
reservedMemory: 512,
reservedCPU: 500,
reservedDisk: 1024,
},
{
name: 'task-two',
driver: 'docker',
reservedMemory: 256,
reservedCPU: 1000,
reservedDisk: 512,
},
{
name: 'task-three',
driver: 'docker',
reservedMemory: 1024,
reservedCPU: 1500,
reservedDisk: 4096,
},
{
name: 'task-four',
driver: 'docker',
reservedMemory: 2048,
reservedCPU: 500,
reservedDisk: 128,
},
],
})
);
assert.equal(
taskGroup.get('reservedCPU'),
sum(taskGroup.get('tasks'), 'reservedCPU'),
'reservedCPU is an aggregate sum of task CPU reservations'
);
assert.equal(
taskGroup.get('reservedMemory'),
sum(taskGroup.get('tasks'), 'reservedMemory'),
'reservedMemory is an aggregate sum of task memory reservations'
);
assert.equal(
taskGroup.get('reservedDisk'),
sum(taskGroup.get('tasks'), 'reservedDisk'),
'reservedDisk is an aggregate sum of task disk reservations'
);
});
test("should expose mergedMeta as merged with the job's meta", function(assert) {
const store = this.owner.lookup('service:store');
const jobWithMeta = run(() =>
store.createRecord('job', {
name: 'example-with-meta',
meta: store.createFragment('structured-attributes', { raw: { a: 'b' } }),
taskGroups: [
{
name: 'one',
meta: { c: 'd' },
},
{
name: 'two',
},
{
name: 'three',
meta: null,
},
{
name: 'four',
meta: {},
},
],
})
);
let expected = [{ a: 'b', c: 'd' }, { a: 'b' }, { a: 'b' }, { a: 'b' }];
expected.forEach((exp, i) => {
assert.deepEqual(
jobWithMeta
.get('taskGroups')
.objectAt(i)
.get('mergedMeta'),
exp,
'mergedMeta is merged with job meta'
);
});
const jobWithoutMeta = run(() =>
this.owner.lookup('service:store').createRecord('job', {
name: 'example-without-meta',
taskGroups: [
{
name: 'one',
meta: { c: 'd' },
},
{
name: 'two',
},
{
name: 'three',
meta: null,
},
{
name: 'four',
meta: {},
},
],
})
);
expected = [{ c: 'd' }, {}, {}, {}];
expected.forEach((exp, i) => {
assert.deepEqual(
jobWithoutMeta
.get('taskGroups')
.objectAt(i)
.get('mergedMeta'),
exp,
'mergedMeta is merged with job meta'
);
});
});
});