Code coverage report for app/mixins/common/hosts/host_component_validation_mixin.js

Statements: 100% (18 / 18)      Branches: 87.5% (7 / 8)      Functions: 77.78% (7 / 9)      Lines: 100% (17 / 17)      Ignored: none     

All files » app/mixins/common/hosts/ » host_component_validation_mixin.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110    1                                     1   1                     1               22             22 22                 23 23 22 2 2 2 3             22                 22                               21                        
'use strict';
 
;require.register("mixins/common/hosts/host_component_validation_mixin", function (exports, require, module) {
  /**
   * 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.
   */
 
  require('mixins/common/blueprint');
 
  var App = require('app');
 
  /**
   * @typedef {object} HostValidationRequestData
   * @property {string} stackVersionUrl stack version url
   * @property {string[]} hosts host names
   * @property {string[]} services service names
   * @property {string} validate validation type e.g. 'host_groups'
   * @property {object} recommendations blueprint object
   */
 
  App.HostComponentValidationMixin = Em.Mixin.create(App.BlueprintMixin, {
    /**
     * Validate host components
     * @method validateSelectedHostComponents
     * @param {HostComponentRecommendationOptions} options
     * @return {$.Deferred}
     */
    validateSelectedHostComponents: function validateSelectedHostComponents(options) {
      var opts = $.extend({
        services: [],
        blueprint: null,
        hosts: [],
        components: []
      }, options || {});
 
      opts.components = this.formatValidateComponents(opts.components);
      return this.getHostComponentValidationRequest(this.getHostComponentValidationParams(opts));
    },
 
    /**
     * @method formatValidateComponents
     * @param {RecommendComponentObject[]} components
     * @returns {Em.Object[]}
     */
    formatValidateComponents: function formatValidateComponents(components) {
      var res = [];
      if (!components) return [];
      components.forEach(function (component) {
        var componentName = Em.get(component, 'componentName');
        Eif (Em.get(component, 'hosts.length')) {
          Em.get(component, 'hosts').forEach(function (hostName) {
            res.push(Em.Object.create({
              componentName: componentName,
              hostName: hostName
            }));
          });
        }
      });
      return res;
    },
 
    /**
     * Returns request data for validation request
     * @method getHostComponentValidationParams
     * @return {HostValidationRequestData}
     */
    getHostComponentValidationParams: function getHostComponentValidationParams(options) {
      return {
        stackVersionUrl: App.get('stackVersionURL'),
        hosts: options.hosts,
        services: options.services,
        validate: 'host_groups',
        recommendations: options.blueprint || this.getComponentsBlueprint(options.components)
      };
    },
 
    /**
     * Performs request to validate components location
     * @method getHostComponentValidationRequest
     * @param {object} validationData
     * @returns {$.Deferred}
     */
    getHostComponentValidationRequest: function getHostComponentValidationRequest(validationData) {
      return App.ajax.send({
        name: 'config.validations',
        sender: this,
        data: validationData,
        success: 'updateValidationsSuccessCallback',
        error: 'updateValidationsErrorCallback'
      });
    },
 
    updateValidationsSuccessCallback: function updateValidationsSuccessCallback() {},
    updateValidationsErrorCallback: function updateValidationsErrorCallback() {}
  });
});