|
@@ -37,13 +37,6 @@ describe('App.AddHostController', function () {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- beforeEach(function () {
|
|
|
- sinon.spy(controller, "setDBProperty");
|
|
|
- });
|
|
|
- afterEach(function () {
|
|
|
- controller.setDBProperty.restore();
|
|
|
- });
|
|
|
-
|
|
|
describe('#removeHosts()', function () {
|
|
|
var testCases = [
|
|
|
{
|
|
@@ -91,6 +84,12 @@ describe('App.AddHostController', function () {
|
|
|
result: {}
|
|
|
}
|
|
|
];
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.spy(controller, "setDBProperty");
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.setDBProperty.restore();
|
|
|
+ });
|
|
|
testCases.forEach(function (test) {
|
|
|
it(test.title, function () {
|
|
|
controller.set('testDBHosts', test.content.dbHosts);
|
|
@@ -380,5 +379,934 @@ describe('App.AddHostController', function () {
|
|
|
it("generatel list of clients to install", function () {
|
|
|
expect(controller.getClientsToInstall(services, components)).to.eql(clients);
|
|
|
})
|
|
|
- })
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#setCurrentStep()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
|
|
|
+ sinon.stub(App.db, 'setWizardCurrentStep', Em.K);
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ App.clusterStatus.setClusterStatus.restore();
|
|
|
+ App.db.setWizardCurrentStep.restore();
|
|
|
+ });
|
|
|
+ it("call App.clusterStatus.setClusterStatus()", function () {
|
|
|
+ controller.setCurrentStep();
|
|
|
+ expect(App.clusterStatus.setClusterStatus.getCall(0).args[0].wizardControllerName).to.be.equal('addHostController');
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#getCluster()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(App.router, 'getClusterName').returns('c1');
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ App.router.getClusterName.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.set('clusterStatusTemplate', {'prop': 'clusterStatusTemplate'});
|
|
|
+ expect(controller.getCluster()).to.be.eql({
|
|
|
+ prop: 'clusterStatusTemplate',
|
|
|
+ name: 'c1'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#getInstallOptions()", function () {
|
|
|
+ it("", function () {
|
|
|
+ controller.set('installOptionsTemplate', {'prop': 'installOptionsTemplate'});
|
|
|
+ expect(controller.getInstallOptions()).to.be.eql({
|
|
|
+ prop: 'installOptionsTemplate'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadServices", function () {
|
|
|
+ var services = {
|
|
|
+ db: null,
|
|
|
+ stack: [],
|
|
|
+ model: []
|
|
|
+ };
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(controller, 'getDBProperty', function () {
|
|
|
+ return services.db;
|
|
|
+ });
|
|
|
+ sinon.stub(App.StackService, 'find', function () {
|
|
|
+ return services.stack;
|
|
|
+ });
|
|
|
+ sinon.stub(App.Service, 'find', function () {
|
|
|
+ return services.model;
|
|
|
+ });
|
|
|
+ sinon.stub(controller, 'setDBProperty', Em.K);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.getDBProperty.restore();
|
|
|
+ App.StackService.find.restore();
|
|
|
+ App.Service.find.restore();
|
|
|
+ controller.setDBProperty.restore();
|
|
|
+ });
|
|
|
+ it("No services in db, no installed services", function () {
|
|
|
+ services.stack = [Em.Object.create({
|
|
|
+ serviceName: 'S1'
|
|
|
+ })];
|
|
|
+ controller.loadServices();
|
|
|
+ expect(controller.setDBProperty.getCall(0).args).to.eql(['services',
|
|
|
+ {
|
|
|
+ selectedServices: [],
|
|
|
+ installedServices: []
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ expect(controller.get('content.services')).to.eql([
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ isInstalled: false,
|
|
|
+ isSelected: false
|
|
|
+ })
|
|
|
+ ])
|
|
|
+ });
|
|
|
+ it("No services in db, installed service present", function () {
|
|
|
+ services.stack = [
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1'
|
|
|
+ }),
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S2'
|
|
|
+ })
|
|
|
+ ];
|
|
|
+ services.model = [
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1'
|
|
|
+ })
|
|
|
+ ];
|
|
|
+ controller.loadServices();
|
|
|
+ expect(controller.setDBProperty.getCall(0).args).to.eql(['services',
|
|
|
+ {
|
|
|
+ selectedServices: ['S1'],
|
|
|
+ installedServices: ['S1']
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ expect(controller.get('content.services')).to.eql([
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ isInstalled: true,
|
|
|
+ isSelected: true
|
|
|
+ }),
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S2',
|
|
|
+ isInstalled: false,
|
|
|
+ isSelected: false
|
|
|
+ })
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ it("DB is empty", function () {
|
|
|
+ services.stack = [Em.Object.create({
|
|
|
+ serviceName: 'S1'
|
|
|
+ })];
|
|
|
+ services.db = {
|
|
|
+ selectedServices: [],
|
|
|
+ installedServices: []
|
|
|
+ };
|
|
|
+ controller.loadServices();
|
|
|
+ expect(controller.setDBProperty.called).to.be.false;
|
|
|
+ expect(controller.get('content.services')).to.eql([
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ isSelected: false,
|
|
|
+ isInstalled: false
|
|
|
+ })
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ it("DB has selected and installed services", function () {
|
|
|
+ services.stack = [
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1'
|
|
|
+ }),
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S2'
|
|
|
+ })
|
|
|
+ ];
|
|
|
+ services.db = {
|
|
|
+ selectedServices: ['S1'],
|
|
|
+ installedServices: ['S2']
|
|
|
+ };
|
|
|
+ controller.loadServices();
|
|
|
+ expect(controller.setDBProperty.called).to.be.false;
|
|
|
+ expect(controller.get('content.services')).to.eql([
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ isInstalled: false,
|
|
|
+ isSelected: true
|
|
|
+ }),
|
|
|
+ Em.Object.create({
|
|
|
+ serviceName: 'S2',
|
|
|
+ isInstalled: true,
|
|
|
+ isSelected: false
|
|
|
+ })
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadSlaveComponentHosts()", function () {
|
|
|
+ var mock = {
|
|
|
+ hosts: null,
|
|
|
+ slaveComponentHosts: null
|
|
|
+ };
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(controller, 'getDBProperty', function (arg) {
|
|
|
+ if (arg === 'hosts') return mock.hosts;
|
|
|
+ if (arg === 'slaveComponentHosts') return mock.slaveComponentHosts;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.getDBProperty.restore();
|
|
|
+ });
|
|
|
+
|
|
|
+ it("No slaveComponentHosts in db, null", function () {
|
|
|
+ controller.loadSlaveComponentHosts();
|
|
|
+ expect(controller.get('content.slaveComponentHosts')).to.be.empty;
|
|
|
+ });
|
|
|
+ it("No slaveComponentHosts in db", function () {
|
|
|
+ mock.slaveComponentHosts = [];
|
|
|
+ controller.loadSlaveComponentHosts();
|
|
|
+ expect(controller.get('content.slaveComponentHosts')).to.be.empty;
|
|
|
+ });
|
|
|
+ it("One slaveComponent without hosts", function () {
|
|
|
+ mock.slaveComponentHosts = [
|
|
|
+ {hosts: []}
|
|
|
+ ];
|
|
|
+ mock.hosts = {};
|
|
|
+ controller.loadSlaveComponentHosts();
|
|
|
+ expect(controller.get('content.slaveComponentHosts')).to.be.eql([
|
|
|
+ {hosts: []}
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ it("One slaveComponent with host", function () {
|
|
|
+ mock.slaveComponentHosts = [
|
|
|
+ {hosts: [
|
|
|
+ {host_id: 1}
|
|
|
+ ]}
|
|
|
+ ];
|
|
|
+ mock.hosts = {'host1': {id: 1}};
|
|
|
+ controller.loadSlaveComponentHosts();
|
|
|
+ expect(controller.get('content.slaveComponentHosts')).to.be.eql([
|
|
|
+ {hosts: [
|
|
|
+ {
|
|
|
+ host_id: 1,
|
|
|
+ hostName: 'host1'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#saveClients()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(App.StackServiceComponent, 'find').returns('StackServiceComponent');
|
|
|
+ sinon.stub(controller, 'getClientsToInstall').returns(['client']);
|
|
|
+ sinon.stub(controller, 'setDBProperty', Em.K);
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ controller.setDBProperty.restore();
|
|
|
+ App.StackServiceComponent.find.restore();
|
|
|
+ controller.getClientsToInstall.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.set('content.services', [Em.Object.create({'isSelected': true})]);
|
|
|
+ controller.saveClients();
|
|
|
+ expect(controller.getClientsToInstall.calledWith(
|
|
|
+ [Em.Object.create({'isSelected': true})],
|
|
|
+ 'StackServiceComponent'
|
|
|
+ )).to.be.true;
|
|
|
+ expect(controller.setDBProperty.calledWith('clientInfo', ['client'])).to.be.true;
|
|
|
+ expect(controller.get('content.clients')).to.be.eql(['client']);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#getClientsToInstall()", function () {
|
|
|
+ var testCases = [
|
|
|
+ {
|
|
|
+ title: 'No services',
|
|
|
+ data: {
|
|
|
+ services: [],
|
|
|
+ components: []
|
|
|
+ },
|
|
|
+ result: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'No components',
|
|
|
+ data: {
|
|
|
+ services: [
|
|
|
+ {}
|
|
|
+ ],
|
|
|
+ components: []
|
|
|
+ },
|
|
|
+ result: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'Component is not client',
|
|
|
+ data: {
|
|
|
+ services: [Em.Object.create({serviceName: 'S1'})],
|
|
|
+ components: [Em.Object.create({serviceName: 'S1'})]
|
|
|
+ },
|
|
|
+ result: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'Component is not client',
|
|
|
+ data: {
|
|
|
+ services: [Em.Object.create({serviceName: 'S1'})],
|
|
|
+ components: [Em.Object.create({serviceName: 'S1', isClient: false})]
|
|
|
+ },
|
|
|
+ result: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'Component is client',
|
|
|
+ data: {
|
|
|
+ services: [Em.Object.create({serviceName: 'S1'})],
|
|
|
+ components: [Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ isClient: true,
|
|
|
+ componentName: 'C1',
|
|
|
+ displayName: 'C1'
|
|
|
+ })]
|
|
|
+ },
|
|
|
+ result: [
|
|
|
+ {
|
|
|
+ component_name: 'C1',
|
|
|
+ display_name: 'C1',
|
|
|
+ isInstalled: false
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ];
|
|
|
+
|
|
|
+ testCases.forEach(function (test) {
|
|
|
+ it(test.title, function () {
|
|
|
+ expect(controller.getClientsToInstall(test.data.services, test.data.components)).to.eql(test.result);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#applyConfigGroup()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(App.ajax, 'send', Em.K);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ App.ajax.send.restore();
|
|
|
+ });
|
|
|
+ it("No config groups", function () {
|
|
|
+ controller.set('content.configGroups', []);
|
|
|
+ controller.applyConfigGroup();
|
|
|
+ expect(App.ajax.send.called).to.be.false;
|
|
|
+ });
|
|
|
+ it("selectedConfigGroup absent", function () {
|
|
|
+ controller.set('content.configGroups', [
|
|
|
+ {
|
|
|
+ configGroups: [],
|
|
|
+ selectedConfigGroup: ''
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.applyConfigGroup();
|
|
|
+ expect(App.ajax.send.called).to.be.false;
|
|
|
+ });
|
|
|
+ it("selectedConfigGroup present", function () {
|
|
|
+ controller.set('content.configGroups', [
|
|
|
+ {
|
|
|
+ configGroups: [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ id: 1,
|
|
|
+ group_name: 'G1',
|
|
|
+ hosts: []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ selectedConfigGroup: 'G1',
|
|
|
+ hosts: ['host1']
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.applyConfigGroup();
|
|
|
+
|
|
|
+ expect(App.ajax.send.getCall(0).args[0].name).to.equal('config_groups.update_config_group');
|
|
|
+ expect(App.ajax.send.getCall(0).args[0].data).to.eql({
|
|
|
+ "id": 1,
|
|
|
+ "configGroup": {
|
|
|
+ "ConfigGroup": {
|
|
|
+ "id": 1,
|
|
|
+ "group_name": "G1",
|
|
|
+ "hosts": [
|
|
|
+ {
|
|
|
+ "host_name": "host1"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#getServiceConfigGroups()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(controller, 'getDBProperty').withArgs('serviceConfigGroups').returns(['serviceConfigGroup']);
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ controller.getDBProperty.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.getServiceConfigGroups();
|
|
|
+ expect(controller.get('content.configGroups')).to.eql(['serviceConfigGroup']);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#saveServiceConfigGroups()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(controller, 'setDBProperty', Em.K);
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ controller.setDBProperty.restore();
|
|
|
+ });
|
|
|
+ it("call setDBProperty()", function () {
|
|
|
+ controller.set('content.configGroups', [
|
|
|
+ {}
|
|
|
+ ]);
|
|
|
+ controller.saveServiceConfigGroups();
|
|
|
+ expect(controller.setDBProperty.calledWith('serviceConfigGroups', [
|
|
|
+ {}
|
|
|
+ ])).to.be.true;
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadServiceConfigGroups()", function () {
|
|
|
+ before(function () {
|
|
|
+ sinon.stub(controller, 'loadServiceConfigGroupsBySlaves', Em.K);
|
|
|
+ sinon.stub(controller, 'loadServiceConfigGroupsByClients', Em.K);
|
|
|
+ sinon.stub(controller, 'sortServiceConfigGroups', Em.K);
|
|
|
+ });
|
|
|
+ after(function () {
|
|
|
+ controller.loadServiceConfigGroupsBySlaves.restore();
|
|
|
+ controller.loadServiceConfigGroupsByClients.restore();
|
|
|
+ controller.sortServiceConfigGroups.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.loadServiceConfigGroups();
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients.calledWith([])).to.be.true;
|
|
|
+ expect(controller.loadServiceConfigGroupsBySlaves.calledWith([])).to.be.true;
|
|
|
+ expect(controller.sortServiceConfigGroups.calledWith([])).to.be.true;
|
|
|
+ expect(controller.get('content.configGroups')).to.eql([]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#sortServiceConfigGroups", function () {
|
|
|
+ var testCases = [
|
|
|
+ {
|
|
|
+ title: 'sorted',
|
|
|
+ selectedServices: [
|
|
|
+ {
|
|
|
+ configGroups: [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'a'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'b'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ result: ['a', 'b']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'not sorted',
|
|
|
+ selectedServices: [
|
|
|
+ {
|
|
|
+ configGroups: [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'b'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'a'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ result: ['a', 'b']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: 'sort equal',
|
|
|
+ selectedServices: [
|
|
|
+ {
|
|
|
+ configGroups: [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'a'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ group_name: 'a'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ result: ['a', 'a']
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ testCases.forEach(function (test) {
|
|
|
+ it(test.title, function () {
|
|
|
+ controller.sortServiceConfigGroups(test.selectedServices);
|
|
|
+ expect(test.selectedServices[0].configGroups.mapProperty('ConfigGroup.group_name')).to.eql(test.result);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadServiceConfigGroupsBySlaves()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(App.StackServiceComponent, 'find').returns(Em.Object.create({
|
|
|
+ stackService: Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ displayName: 's1'
|
|
|
+ })
|
|
|
+ }));
|
|
|
+ controller.set('content.configGroups', [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ tag: 'S1',
|
|
|
+ group_name: 'G1'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ App.StackServiceComponent.find.restore();
|
|
|
+ });
|
|
|
+ it("slaveComponentHosts is empty", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', []);
|
|
|
+ expect(controller.loadServiceConfigGroupsBySlaves(selectedServices)).to.be.false;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("slaveComponentHosts has ho hosts", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {hosts: []}
|
|
|
+ ]);
|
|
|
+ expect(controller.loadServiceConfigGroupsBySlaves(selectedServices)).to.be.true;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("slaveComponentHosts is CLIENT", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ hosts: [
|
|
|
+ {hostName: 'host1'}
|
|
|
+ ],
|
|
|
+ componentName: 'CLIENT'
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ expect(controller.loadServiceConfigGroupsBySlaves(selectedServices)).to.be.true;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("slaveComponentHosts is slave", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ hosts: [
|
|
|
+ {hostName: 'host1'}
|
|
|
+ ],
|
|
|
+ componentName: 'C1'
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ expect(controller.loadServiceConfigGroupsBySlaves(selectedServices)).to.be.true;
|
|
|
+ expect(selectedServices).to.eql([
|
|
|
+ {
|
|
|
+ "serviceId": "S1",
|
|
|
+ "displayName": "s1",
|
|
|
+ "hosts": [
|
|
|
+ "host1"
|
|
|
+ ],
|
|
|
+ "configGroupsNames": [
|
|
|
+ "s1 Default",
|
|
|
+ "G1"
|
|
|
+ ],
|
|
|
+ "configGroups": [
|
|
|
+ {
|
|
|
+ "ConfigGroup": {
|
|
|
+ "tag": "S1",
|
|
|
+ "group_name": "G1"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "selectedConfigGroup": "s1 Default"
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadServiceConfigGroupsByClients()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(App.StackServiceComponent, 'find').returns(Em.Object.create({
|
|
|
+ stackService: Em.Object.create({
|
|
|
+ serviceName: 'S1',
|
|
|
+ displayName: 's1'
|
|
|
+ })
|
|
|
+ }));
|
|
|
+ sinon.stub(controller, 'loadClients', Em.K);
|
|
|
+ controller.set('content.configGroups', [
|
|
|
+ {
|
|
|
+ ConfigGroup: {
|
|
|
+ tag: 'S1',
|
|
|
+ group_name: 'G1'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.loadClients.restore();
|
|
|
+ App.StackServiceComponent.find.restore();
|
|
|
+ });
|
|
|
+ it("Clients is null", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', null);
|
|
|
+ controller.set('content.clients', null);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.false;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("No CLIENT component", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', []);
|
|
|
+ controller.set('content.clients', []);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.false;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("Clients is empty", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ componentName: 'CLIENT',
|
|
|
+ hosts: []
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.set('content.clients', []);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.false;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("Client component does not have hosts", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ componentName: 'CLIENT',
|
|
|
+ hosts: []
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.set('content.clients', [
|
|
|
+ {}
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.false;
|
|
|
+ expect(selectedServices).to.be.empty;
|
|
|
+ });
|
|
|
+ it("Client present, selectedServices is empty", function () {
|
|
|
+ var selectedServices = [];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ componentName: 'CLIENT',
|
|
|
+ hosts: [
|
|
|
+ {hostName: 'host1'}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.set('content.clients', [
|
|
|
+ {
|
|
|
+ component_name: 'C1'
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.true;
|
|
|
+ expect(selectedServices).to.be.eql([
|
|
|
+ {
|
|
|
+ "serviceId": "S1",
|
|
|
+ "displayName": "s1",
|
|
|
+ "hosts": [
|
|
|
+ "host1"
|
|
|
+ ],
|
|
|
+ "configGroupsNames": [
|
|
|
+ "s1 Default",
|
|
|
+ "G1"
|
|
|
+ ],
|
|
|
+ "configGroups": [
|
|
|
+ {
|
|
|
+ "ConfigGroup": {
|
|
|
+ "tag": "S1",
|
|
|
+ "group_name": "G1"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "selectedConfigGroup": "s1 Default"
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ it("Client present, selectedServices has service", function () {
|
|
|
+ var selectedServices = [
|
|
|
+ {
|
|
|
+ serviceId: 'S1',
|
|
|
+ hosts: ['host1', 'host2']
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ controller.set('content.slaveComponentHosts', [
|
|
|
+ {
|
|
|
+ componentName: 'CLIENT',
|
|
|
+ hosts: [
|
|
|
+ {hostName: 'host1'}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+ controller.set('content.clients', [
|
|
|
+ {
|
|
|
+ component_name: 'C1'
|
|
|
+ }
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expect(controller.loadServiceConfigGroupsByClients(selectedServices)).to.be.true;
|
|
|
+ expect(selectedServices[0].hosts).to.be.eql(["host1", "host2"]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadServiceConfigProperties()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ this.mock = sinon.stub(App.db, 'get');
|
|
|
+ this.mock.withArgs('Installer', 'serviceConfigProperties').returns([1]);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ this.mock.restore();
|
|
|
+ });
|
|
|
+ it("serviceConfigProperties is null", function () {
|
|
|
+ this.mock.withArgs('AddService', 'serviceConfigProperties').returns(null);
|
|
|
+ controller.loadServiceConfigProperties();
|
|
|
+ expect(controller.get('content.serviceConfigProperties')).to.eql([1]);
|
|
|
+ });
|
|
|
+ it("serviceConfigProperties is empty", function () {
|
|
|
+ this.mock.withArgs('AddService', 'serviceConfigProperties').returns([]);
|
|
|
+ controller.loadServiceConfigProperties();
|
|
|
+ expect(controller.get('content.serviceConfigProperties')).to.eql([1]);
|
|
|
+ });
|
|
|
+ it("serviceConfigProperties has data", function () {
|
|
|
+ this.mock.withArgs('AddService', 'serviceConfigProperties').returns([1]);
|
|
|
+ controller.loadServiceConfigProperties();
|
|
|
+ expect(controller.get('content.serviceConfigProperties')).to.eql([1]);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#loadAllPriorSteps()", function () {
|
|
|
+ var stepsSet = {
|
|
|
+ '1': [
|
|
|
+ {
|
|
|
+ name: 'load',
|
|
|
+ args: ['hosts']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'load',
|
|
|
+ args: ['installOptions']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'load',
|
|
|
+ args: ['cluster']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ '2': [
|
|
|
+ {
|
|
|
+ name: 'loadServices',
|
|
|
+ args: []
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ '3': [
|
|
|
+ {
|
|
|
+ name: 'loadClients',
|
|
|
+ args: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'loadServices',
|
|
|
+ args: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'loadMasterComponentHosts',
|
|
|
+ args: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'loadSlaveComponentHosts',
|
|
|
+ args: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'load',
|
|
|
+ args: ['hosts']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ '5': [
|
|
|
+ {
|
|
|
+ name: 'loadServiceConfigProperties',
|
|
|
+ args: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'getServiceConfigGroups',
|
|
|
+ args: []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ var testCases = [
|
|
|
+ {
|
|
|
+ currentStep: '0',
|
|
|
+ calledFunctions: []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '1',
|
|
|
+ calledFunctions: stepsSet['1']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '2',
|
|
|
+ calledFunctions: stepsSet['1'].concat(stepsSet['2'])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '3',
|
|
|
+ calledFunctions: stepsSet['3'].concat(stepsSet['2'], stepsSet['1'])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '4',
|
|
|
+ calledFunctions: stepsSet['3'].concat(stepsSet['2'], stepsSet['1'])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '5',
|
|
|
+ calledFunctions: stepsSet['5'].concat(stepsSet['3'], stepsSet['2'], stepsSet[1])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '6',
|
|
|
+ calledFunctions: stepsSet['5'].concat(stepsSet['3'], stepsSet['2'], stepsSet[1])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '7',
|
|
|
+ calledFunctions: stepsSet['5'].concat(stepsSet['3'], stepsSet['2'], stepsSet[1])
|
|
|
+ },
|
|
|
+ {
|
|
|
+ currentStep: '8',
|
|
|
+ calledFunctions: []
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ var functionsToCall = [
|
|
|
+ 'loadServiceConfigProperties',
|
|
|
+ 'getServiceConfigGroups',
|
|
|
+ 'loadClients',
|
|
|
+ 'loadServices',
|
|
|
+ 'loadMasterComponentHosts',
|
|
|
+ 'loadSlaveComponentHosts',
|
|
|
+ 'load'
|
|
|
+ ];
|
|
|
+ beforeEach(function () {
|
|
|
+ this.mock = sinon.stub(controller, 'get');
|
|
|
+ sinon.stub(controller, 'loadServiceConfigProperties', Em.K);
|
|
|
+ sinon.stub(controller, 'getServiceConfigGroups', Em.K);
|
|
|
+ sinon.stub(controller, 'loadClients', Em.K);
|
|
|
+ sinon.stub(controller, 'loadServices', Em.K);
|
|
|
+ sinon.stub(controller, 'loadMasterComponentHosts', Em.K);
|
|
|
+ sinon.stub(controller, 'loadSlaveComponentHosts', Em.K);
|
|
|
+ sinon.stub(controller, 'load', Em.K);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ this.mock.restore();
|
|
|
+ controller.loadServiceConfigProperties.restore();
|
|
|
+ controller.getServiceConfigGroups.restore();
|
|
|
+ controller.loadClients.restore();
|
|
|
+ controller.loadServices.restore();
|
|
|
+ controller.loadMasterComponentHosts.restore();
|
|
|
+ controller.loadSlaveComponentHosts.restore();
|
|
|
+ controller.load.restore();
|
|
|
+ });
|
|
|
+ testCases.forEach(function (test) {
|
|
|
+ it("current step - " + test.currentStep, function () {
|
|
|
+ this.mock.returns(test.currentStep);
|
|
|
+ controller.loadAllPriorSteps();
|
|
|
+ functionsToCall.forEach(function (fName) {
|
|
|
+ var callStack = test.calledFunctions.filterProperty('name', fName);
|
|
|
+ if (callStack.length > 0) {
|
|
|
+ callStack.forEach(function (f, index) {
|
|
|
+ expect(controller[f.name].getCall(index).args).to.eql(f.args);
|
|
|
+ }, this);
|
|
|
+ } else {
|
|
|
+ expect(controller[fName].called).to.be.false;
|
|
|
+ }
|
|
|
+ }, this);
|
|
|
+ });
|
|
|
+ }, this);
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#clearAllSteps()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(controller, 'clearInstallOptions', Em.K);
|
|
|
+ sinon.stub(controller, 'getCluster').returns({});
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.clearInstallOptions.restore();
|
|
|
+ controller.getCluster.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.clearAllSteps();
|
|
|
+ expect(controller.getCluster.calledOnce).to.be.true;
|
|
|
+ expect(controller.clearInstallOptions.calledOnce).to.be.true;
|
|
|
+ expect(controller.get('content.cluster')).to.eql({});
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#clearStorageData()", function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(controller, 'resetDbNamespace', Em.K);
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.resetDbNamespace.restore();
|
|
|
+ });
|
|
|
+ it("launch resetDbNamespace", function () {
|
|
|
+ controller.clearStorageData();
|
|
|
+ expect(controller.resetDbNamespace.calledOnce).to.be.true;
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("#finish()", function () {
|
|
|
+ var mock = {
|
|
|
+ updateAll: Em.K,
|
|
|
+ getAllHostNames: Em.K
|
|
|
+ };
|
|
|
+ beforeEach(function () {
|
|
|
+ sinon.stub(controller, 'setCurrentStep', Em.K);
|
|
|
+ sinon.stub(controller, 'clearAllSteps', Em.K);
|
|
|
+ sinon.stub(controller, 'clearStorageData', Em.K);
|
|
|
+ sinon.stub(App.updater, 'immediateRun', Em.K);
|
|
|
+ sinon.stub(App.router, 'get').returns(mock);
|
|
|
+ sinon.spy(mock, 'updateAll');
|
|
|
+ sinon.spy(mock, 'getAllHostNames');
|
|
|
+ });
|
|
|
+ afterEach(function () {
|
|
|
+ controller.setCurrentStep.restore();
|
|
|
+ controller.clearAllSteps.restore();
|
|
|
+ controller.clearStorageData.restore();
|
|
|
+ App.updater.immediateRun.restore();
|
|
|
+ App.router.get.restore();
|
|
|
+ mock.updateAll.restore();
|
|
|
+ mock.getAllHostNames.restore();
|
|
|
+ });
|
|
|
+ it("", function () {
|
|
|
+ controller.finish();
|
|
|
+ expect(controller.setCurrentStep.calledWith('1')).to.be.true;
|
|
|
+ expect(controller.clearAllSteps.calledOnce).to.be.true;
|
|
|
+ expect(controller.clearStorageData.calledOnce).to.be.true;
|
|
|
+ expect(mock.updateAll.calledOnce).to.be.true;
|
|
|
+ expect(App.updater.immediateRun.calledWith('updateHost')).to.be.true;
|
|
|
+ expect(mock.getAllHostNames.calledOnce).to.be.true;
|
|
|
+ });
|
|
|
+ });
|
|
|
});
|